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