У меня есть функция, которая в основном представляет собой игру в стиле Whack-A-Mole с использованием светодиодов и кнопок.LED-A загорается, и пользователь должен нажать BTN-A, чтобы выключить его ... и мы переходим к следующей комбинации LED / BTN.
Моя схема работает, и я могу включить каждый светодиод/ отключить и определять каждое нажатие кнопки.Однако, попав в игровой цикл (см. Ниже), я вижу странное поведение.
Мой код выглядит так:
void gameTwo(){
Serial.println("We are in Game 2");
playGameTwo();
//lightShowTwo();
// Set game state
int gameState = 0;
// Start counter
elapsedMillis timeElapsed;
// First LED
digitalWrite(ledB, HIGH);
while(digitalRead(btnB) != HIGH){
//Serial.print("btnBstate is: ");
//Serial.println(digitalRead(btnB));
if(digitalRead(btnB) == 1){
delay(50);
digitalWrite(ledB, LOW);
Serial.print(timeElapsed);
}
}
// Second LED
digitalWrite(ledE, HIGH);
while(digitalRead(btnE) != HIGH){
//Serial.print("btnBstate is: ");
//Serial.println(digitalRead(btnE));
if(digitalRead(btnE) == 1){
delay(50);
digitalWrite(ledE, LOW);
Serial.print(timeElapsed);
}
}
// Third LED
digitalWrite(ledF, HIGH);
while(digitalRead(btnF) != HIGH){
//Serial.print("btnBstate is: ");
//Serial.println(digitalRead(btnE));
if(digitalRead(btnF) == 1){
delay(50); // these dalays DO NOT work
digitalWrite(ledF, LOW);
Serial.print(timeElapsed);
}
}
// End Game - Publish Elapsed Time
gameState = 1;
// record user's elapsed time
int userTime = timeElapsed;
Serial.print("Game Finished - Your time was: ");
Serial.print(timeElapsed);
Serial.println(" ms!");
}
Проблема в том, что он не всегда работает.Иногда LED-A выключается, иногда горит.
Как видите, я пытался добавить небольшую задержку (50), но безрезультатно.
Как лучшеобнаружение нажатий кнопок во время цикла.
Дополнительный вопрос: я жестко программирую игру (например, LEDA, LEDB ... LEDx).Там должен быть лучший способ, возможно, с использованием массива, чтобы протолкнуть последовательность игры.Поскольку я не программист, я был бы признателен за некоторые рекомендации или статьи, чтобы прочитать, чтобы получить больше информации об этом.Спасибо.