所以我有一个蓝牙模块,我已经创建了一些代码,所以当我按下按钮1时它会打开LED,当我按2时它会关闭LED,而3应该是领导不断眨眼。一切都运行得很好,除了当我按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);
}
}
}
答案 0 :(得分:6)
您需要将主循环更改为:
void loop() {
if (Serial.available()> 0){
LED = Serial.read();
Serial.print(LED);
}
if (LED == '3') {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
else if (LED == '1')
digitalWrite(13, HIGH);
else if (LED == '0')
digitalWrite(13, LOW);
}
在这种情况下LED == '3'
将在每次循环迭代时起作用,即使Serial
不包含任何数据
答案 1 :(得分:0)
您将闪烁的代码放入if (Serial.available()> 0)
块,这意味着它仅在您发送'3'
时运行。您需要继续发送'3'
以保持LED闪烁。
谢尔盖为您提供了一个有效的解决方案,但该代码不必要地保持开启或关闭LED,并且由于使用delay
而LED指示灯闪烁,代码无响应。
要修复这些问题,您需要使用变量来保持状态(在谢尔盖的代码中,该角色使用现有的LED
变量)并使用millis()
代替{{1}用于闪烁,就像内置的Arduino IDE示例中的BlinkWithoutDelay一样。
delay()