咪头控制呼吸灯程序,跳不出for 循环
做了一个咪头控制呼吸灯的小东西,实现拍一下手呼吸灯逐渐变化,再拍一下手呼吸灯灭,代码正常执行,如果直接控制灯的亮灭,可以实现,但是加上呼吸灯的代码后,可以亮并且呼吸,但再拍一下手就不灭了,用打印看了一下,我自己判断为跳不出for循环,想请教大神看下,我哪里出问题了,在这里先谢谢了!
代码如下
int Pin1=A5;//(模拟引脚都可以)
/*Arduino A5接咪头负极(从外形上看引脚短的一边或与外壳有连接的一边)
另外一边接5v.注意:咪头负极要接一个10K的下拉电阻*/
int Pin2=10;//Arduino 10脚接LED正极(数字脚都可以)
int n=0;//存储读取的模拟值
boolean toggle=false;
unsigned long fristClap=0;//第一次拍手
unsigned long nextlap=0;//下一次拍手
unsigned int claps=0;//拍手的次数
unsigned long timeDiff=0;//时间间隔
void setup()
{
pinMode(Pin2,OUTPUT);//定义10脚为输出模式
Serial.begin(9600);
}
void loop()
{
n=analogRead(Pin1);//模拟读取A5的值
if (n>515)
{
fristClap=millis();
claps++;
if(claps==2)
{
timeDiff=fristClap-nextlap;
if (timeDiff>300&&timeDiff<2500)
{
toggle=!toggle;
claps=0;
}
else
claps=1;
}
nextlap=fristClap;
}
if (toggle)
{
Serial.println ("111");
for (int value = 0 ; value < 255; value++)//value=value-1
{
analogWrite(Pin2, value);
delay(8);
}
for (int value = 255; value >0; value--)//value=value-1
{
analogWrite(Pin2, value);
delay(8);
}
delay(1000);
}
else
{
Serial.println ("222");
analogWrite(Pin2, 0);
delay(200);
}
}
本帖最后由 Stormer 于 2017-11-14 21:11 编辑
因为FOR循环的时候是不检测 toggle的值的,所以会一直运行。 加个判断,跳出来就好了。
if (toggle)
{
for (int value = 0 ; value < 255; value++)//value=value-1
{
if (toggle==false)
{
value =300;
}
else
{ analogWrite(Pin2, value);
delay(8);
}
}
.....
if (toggle==false)
{
value =0;
}
.........
analogWrite(Pin2, 0); Stormer 发表于 2017-11-14 21:07
因为FOR循环的时候是不检测 toggle的值的,所以会一直运行。 加个判断,跳出来就好了。
原来是这样,我只知道跳不出来,却不知道怎么解决,谢谢啦!又学到新东西了:) 我也是新手,就算在for 里加了if 判断,我想硬件是不会时时更新toggle的值吧
页:
[1]