极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13125|回复: 3

求助各位大神!!!如何用光敏电阻或光敏模块和开关共同控制LED灯

[复制链接]
发表于 2017-7-3 16:19:56 | 显示全部楼层 |阅读模式
本帖最后由 tz9066 于 2017-7-4 15:44 编辑

要求:灯光初始亮度的电压为0.5V,当光敏模块输出的电压>2.5V(或者光敏电阻数值>500)并且开关是高电平时,灯光亮度由初始亮度逐渐变亮,如果读取到光敏模块输出的电压一直>2.5V(或者光敏电阻数值>500)并且开关一直是高电平,灯光亮度维持在最高亮度。一旦其中一个条件不成立(即开关和光敏读取条件不满足之前的条件),灯光亮度由最高亮度逐渐变为初始亮度并维持在初始亮度,直到下次感应。。。。


这是我之前写的只用开关控制的程序,是能正常执行的
int ledpin6=6;
int ledpin3=3;

void setup(){
pinMode(ledpin3,OUTPUT);
pinMode(ledpin6,INPUT);
}
void loop(){
int val=digitalRead(ledpin6);

//没按下开关按钮
if(val==LOW){                  
  analogWrite(ledpin3,26);    //6号针脚读取值为低电平时,三号针脚输出电压为26(即0.5V)
}

//按下开关按钮
else{                                 
     for (int a=26; a<=255;a++){        //灯光逐渐变亮
           analogWrite(ledpin3,a);
           delay(9);  
        }                                       
      while(digitalRead(ledpin9)==HIGH){      //当一直感应到高电平,程序就一直执行while()函数
        
       analogWrite(ledpin3,255);
      }
      
  //松开开关按钮   
  for (int a=255; a>=26;a--){          //当按键松开后执行的程序
           analogWrite(ledpin3,a);
           delay(9);      
  }
}
}

我在这基础上增加了一个光敏后就用不了了,感应到后会变亮,然后一直维持在最亮,即时开关变为低电平
有时候又会一直循环灯光由暗到亮

int ledpin9=9;
int ledpin3=3;
int ledpin6=6;
void setup(){
pinMode(ledpin3,OUTPUT);
pinMode(ledpin9,INPUT);
pinMode(ledpin6,INPUT);
}
void loop(){
int val=analogRead(ledpin9); \\光敏
int val1=digitalRead(ledpin6);

if(val<LOW||val1==LOW){                  
  analogWrite(ledpin3,26);   
}


else if(val==HIGH&&val1==HIGH){        在用光敏模块的时候,这个位置如果改成val>130,灯光都不会变亮                        
     for (int a=26; a<=255;a++){         
           analogWrite(ledpin3,a);
           delay(9);  
        }                                       
      while(val==HIGH&&val1==HIGH){     
        
       analogWrite(ledpin3,255);
      }
      
   
  for (int a=255; a>=26;a--){         
           analogWrite(ledpin3,a);
           delay(9);      
  }
}
}
回复

使用道具 举报

发表于 2017-7-3 19:28:51 | 显示全部楼层
光敏你用的是analogRead,但是定义变量却是int是个什么情况。。。。
是不是考虑用个float
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-4 13:49:10 | 显示全部楼层
应该不是这个问题,我看书上在读取光敏数值的时候也是用的 int
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-4 16:23:23 | 显示全部楼层
今天重新试、写了N遍,由简单到复杂,一步一步慢慢来,结果成了。
好像与之前也没差多少,有点莫名其妙。
分享给大家,尤其是新手

int photocellPin=14;
int ledPin=3;
int ledPin2=6;
void setup(){
  pinMode(ledPin,OUTPUT);
  pinMode(ledPin2,INPUT);
}

void loop(){
  int val=analogRead(photocellPin);//读取光敏数值
  int val2=digitalRead(ledPin2);
  if(val>50||val2==LOW){          //数值在0-200之间数值越大,越敏感,所需遮住的光越少
analogWrite(ledPin,26);
  }
  
  
  else{
    for(int i=26;i<=255;i++){
analogWrite(ledPin,i);
delay(9);
    }
    while(analogRead(photocellPin)<50&&digitalRead(ledPin2)==HIGH){
      analogWrite(ledPin,255);
      
    }
     for(int i=255;i>=26;i--){
analogWrite(ledPin,i);
delay(9);
    }
  }

  }
   
关于这个程序光敏的数值有点蒙,反正试到200的时候,灯没有反应。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-27 00:50 , Processed in 0.041800 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表