我最近一直在努力解决一个问题。
问题是我无法找到一种方法来使一个按钮在8x8显示器上触发一个序列10秒钟然后熄灭,并且还没有另一个按钮使另一个序列在10秒内触发另一个序列然后熄灭,依此类推。 / p>
如果有人可以帮助我,请回答,将不胜感激:)
这是代码:
const int buttonPin = 3
int button = 0;
long now = 0;
setup(){
pinMode(buttonPin, INPUT);
}
loop(){
button = digitalRead(buttonPin);
if(button==HIGH){
lc.setRow(0, 0, B00000000);
lc.setRow(0, 1, B00011000);
lc.setRow(0, 2, B00100100);
lc.setRow(0, 3, B01011010);
lc.setRow(0, 4, B10011001);
lc.setRow(0, 5, B10000001);
lc.setRow(0, 6, B11111111);
lc.setRow(0, 7, B00000000);
delay(110);
now = millis();
}
delay(50);
if(millis()>now + 10000){
lc.setRow(0, 0, B00000000);
lc.setRow(0, 1, B00000000);
lc.setRow(0, 2, B00100100);
lc.setRow(0, 3, B01011010);
lc.setRow(0, 4, B10011001);
lc.setRow(0, 5, B10000001);
lc.setRow(0, 6, B11111111);
lc.setRow(0, 7, B00000000);
delay(110);
}
}
这是我从老师那里得到的帮助表,但我无法理解:
感谢马特
答案 0 :(得分:0)
问题是delay(50);
。在这50毫秒内,arduino不会检查输入引脚,这很可能在您按下按钮时出现。您可以在按下按钮(https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/)时附加中断功能。或者,您可以尝试像这样的循环延迟:
unsigned int startTime = millis();
unsigned int currentTime = startTime;
while(currentTime - startTime >= 50) {
// check button state
currentTime = millis();
}
https://www.arduino.cc/en/Tutorial/StateChangeDetection
从您发布的代码看来,您根本不需要delay(50);
。