极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11865|回复: 5

如何跳出这个循环?

[复制链接]
发表于 2014-7-6 17:47:52 | 显示全部楼层 |阅读模式
目标:发送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;
}
}
回复

使用道具 举报

发表于 2014-7-6 20:03:44 | 显示全部楼层
本帖最后由 kenan13 于 2014-7-6 20:05 编辑

你在while循环中没有对val进行重新赋值,所以val永远都是c,条件永远成立。
改正方法:在最后一个delay后面加上对val的重新赋值语句,如
if(Serial.avaible()) val=Serial.read();
回复 支持 反对

使用道具 举报

发表于 2014-7-7 05:39:15 | 显示全部楼层
把while改成if也可以
不过还是建议按楼上的修改
回复 支持 反对

使用道具 举报

发表于 2014-7-7 06:51:43 | 显示全部楼层
digitalWrite(ledpin,HIGH);
delay(500);
digitalWrite(ledpin,LOW);
delay(500);
break;

这样可以么?
回复 支持 反对

使用道具 举报

发表于 2014-7-7 11:31:08 | 显示全部楼层
实践是检验真理的唯一标准!
自己 各种方法 都试一下吧
---------------------------------------
下面这个肯定管用:
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);
}
}
回复 支持 反对

使用道具 举报

发表于 2015-6-18 21:59:35 | 显示全部楼层
你想要实现的功能,按5l这位大哥说的,应该是没错了。只要你不给val重新赋值,他等于C的话,就一直会在loop循环判断,然后到第三个判断语句,再进行,再出来,再从新判断。
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-27 00:53 , Processed in 0.040197 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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