tz9066 发表于 2017-7-3 16:19:56

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

本帖最后由 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);      
}
}
}

zjz5717 发表于 2017-7-3 19:28:51

光敏你用的是analogRead,但是定义变量却是int是个什么情况。。。。
是不是考虑用个float

tz9066 发表于 2017-7-4 13:49:10

应该不是这个问题,我看书上在读取光敏数值的时候也是用的 int

tz9066 发表于 2017-7-4 16:23:23

今天重新试、写了N遍,由简单到复杂,一步一步慢慢来,结果成了。
好像与之前也没差多少,有点莫名其妙。
分享给大家,尤其是新手:lol:P:D

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的时候,灯没有反应。
页: [1]
查看完整版本: 求助各位大神!!!如何用光敏电阻或光敏模块和开关共同控制LED灯