所以我有一个蓝牙模块,我已经创建了一些代码,所以当我按下按钮1它打开LED时,当我按2它关闭LED时,3应该让LED持续闪烁 . 一切都运行得很好,除了当我按3次LED闪烁一次然后停止 . 我可以对代码做什么让它连续闪烁,直到我再次按下按钮1或2?
char LED = 0;
void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600); // Opens Serial port
}
void loop() {
if (Serial.available()> 0){
LED = Serial.read();
Serial.print(LED);
if (LED == '1')
digitalWrite(13, HIGH);
if (LED == '0')
digitalWrite(13, LOW);
if (LED == '3') {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
}
}
2 回答
您需要将主循环更改为:
在这种情况下
LED == '3'
将在每次循环迭代时起作用,即使Serial
不包含任何数据您将闪烁的代码放入
if (Serial.available()> 0)
块,这意味着它仅在您发送'3'
时运行 . 您需要继续发送'3'
以保持LED闪烁 .谢尔盖为您提供了一个可行的解决方案,但该代码不必要地保持LED的开启或关闭,并且由于使用了
delay
,因此LED闪烁时代码无响应 .要修复这些问题,你需要使用一个变量来保持一个状态(在Sergey的代码中,该角色占用你现有的
LED
变量)并使用millis()
而不是delay()
进行闪烁,就像内置的Arduino IDE中的BlinkWithoutDelay一样 .