【发布时间】:2026-01-10 19:40:01
【问题描述】:
我编写了一个代码应该执行以下操作:如果我在循环void btnpress() 中按下一个按钮,程序将被发送到另一个函数void blink2(),然后一个 LED 亮起,3 秒后 LED 应该亮关闭,它也应该通过btnpress(); 再次返回到void btnpress()。
问题是,如果我按下按钮并释放,LED 会继续并保持无限亮,程序似乎没有执行以下最后部分 digitalWrite(LED_BUILTIN, LOW); 和 btnpress();。
const int btnpin = 9;
int btnstate = 0;
unsigned long currentTime;
unsigned long previousTime;
const long period = 3000;
// the setup
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
pinMode(btnpin, INPUT);
Serial.begin(9600);
}
// the loop
void loop()
{
btnpress();
}
void btnpress()
{
Serial.println("Press button");
delay(500);
btnstate = digitalRead(btnpin);
if (btnstate == HIGH) {
previousTime = millis();
blink2();
}
}
void blink2()
{
if (currentTime - previousTime >= period) {
Serial.println("Led on");
previousTime = currentTime;
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on
}
else {
Serial.println("Led off");
digitalWrite(LED_BUILTIN, LOW);
btnpress();
}
}
【问题讨论】:
-
我根本看不到
currentTime的更新位置? -
顺便说一句,适当的缩进是个好主意。
-
@NateEldredge 我该怎么做?
-
如果您希望其他人阅读您的代码,正确的缩进是一个好主意,这似乎是您现在所处的情况。这种格式会损害您获得帮助的机会。
-
粘贴您的代码here,点击“格式化”,您的代码将得到很好的格式化。
标签: c++ loops if-statement arduino void