如何跳出这个循环?
目标:发送a,LED一直亮。发送b,LED熄灭。发送c,LED闪烁。可是我发送c后,它就进入死循环了。我再按a或b都没反应了。怎么退出这个循环来?
int val;
int ledpin=13;
void setup()
{
Serial.begin(9600);
pinMode(ledpin,OUTPUT);
}
void loop()
{
val=Serial.read();
if(val=='a')
{
digitalWrite(ledpin,HIGH);
}
if(val=='b')
{
digitalWrite(ledpin,LOW);
}
while(val=='c')
{
digitalWrite(ledpin,HIGH);
delay(500);
digitalWrite(ledpin,LOW);
delay(500);
if(val!='c') break;
}
} 本帖最后由 kenan13 于 2014-7-6 20:05 编辑
你在while循环中没有对val进行重新赋值,所以val永远都是c,条件永远成立。
改正方法:在最后一个delay后面加上对val的重新赋值语句,如
if(Serial.avaible()) val=Serial.read(); 把while改成if也可以
不过还是建议按楼上的修改 digitalWrite(ledpin,HIGH);
delay(500);
digitalWrite(ledpin,LOW);
delay(500);
break;
这样可以么?
实践是检验真理的唯一标准!
自己 各种方法 都试一下吧
---------------------------------------
下面这个肯定管用:
int val;
int ledpin=13;
void setup()
{
Serial.begin(9600);
pinMode(ledpin,OUTPUT);
}
void loop()
{
if(Serial.avaible()) val=Serial.read();
if(val=='a')
{
digitalWrite(ledpin,HIGH);
}
if(val=='b')
{
digitalWrite(ledpin,LOW);
}
if(val=='c')
{
digitalWrite(ledpin,HIGH);
delay(500);
digitalWrite(ledpin,LOW);
delay(500);
}
} 你想要实现的功能,按5l这位大哥说的,应该是没错了。只要你不给val重新赋值,他等于C的话,就一直会在loop循环判断,然后到第三个判断语句,再进行,再出来,再从新判断。
页:
[1]