Я пытаюсь сделать простую игру Arduino, которая отслеживает, сколько раз была нажата кнопка. Есть две кнопки, по одной для каждого пользователя, и тот, кто ближе к случайному числу, которое выбирает Arduino, побеждает. «Победа», будучи светом, появляется рядом с кнопкой Winers. Однако я застрял в том, что кажется рутиной, — прежде чем идти дальше, я расскажу, что мне всего две недели, как во всей среде arduino / C ++, поэтому мои знания довольно низки.
По сути, я хочу, чтобы игра длилась определенное время, скажем, 5 секунд, затем через пять секунд все нажатия кнопок подсчитываются и сравниваются, и выбирается победитель. Затем игра перезагружается, и мы можем играть снова. То, где я застреваю, находится в функции времени. Я изначально вычитал gameClock
переменная из millis()
однако я прочитал, что сбросить millis()
функция. Возможно, мой код даст вам лучшее понимание того, чего я пытаюсь достичь.
#include <Bounce.h>
//Using Arduino UNO
#define RBUTTON 2
#define RRLED 3
#define RGLED 4
#define MBLED 5
#define LGLED 6
#define RLLED 7
#define LBUTTON 8
Bounce BounceR = Bounce(RBUTTON, 5);
Bounce BounceL = Bounce(LBUTTON, 5);
int lastStateR = 0;
int lastStateL = 0;
int switchLCount = 0;
int switchRCount = 0;
long gameClock = 5000;
void setup() {
//LED from left to right
pinMode(RBUTTON, INPUT);
pinMode(RRLED, OUTPUT); //Red
pinMode(RGLED, OUTPUT); //Green
pinMode(MBLED, OUTPUT); //Blue
pinMode(LGLED, OUTPUT); //Green
pinMode(RLLED, OUTPUT); //Red
pinMode(LBUTTON, INPUT);
Serial.begin(9600);
}
void loop() {
BounceR.update();
BounceL.update();
int total = switchRCount + switchLCount;int valueR = BounceR.read();
int valueL = BounceL.read();if (valueL != lastStateL) {
if (valueL == HIGH) {
switchLCount++;
Serial.print("Left button:");
Serial.println(switchLCount);
Serial.print("Total: ");
Serial.println(total);
}
}
lastStateL = valueL;
if (valueR != lastStateR) {
if (valueR == HIGH) {
switchRCount++;
Serial.print("Right button: ");
Serial.println(switchRCount);
Serial.print("Total: ");
Serial.println(total);
}
}
lastStateR = valueR;
}
Вы действительно должны посмотреть на форумы arduino.cc для помощи по этому вопросу. Есть целый архив знаний, а также много людей, которые имеют большой опыт работы с Arduino.
Есть в основном 3 проблемы с вашим эскизом. Во-первых, как вы сказали, GameClock не работает так, как вы этого хотите. Простое использование счетчика не приведет к его сокращению, даже на частоте 16 МГц, Arduino будет проноситься сквозь него всего за 5 секунд. Вы должны на самом деле время это.
Во-вторых, ваша кнопка «debouncing» не работает. Деблокирование кнопок на самом деле довольно сложно. К счастью, многие уже решили проблему. Проверьте библиотеки Arduino, форум и игровую площадку. Проблема здесь в том, что вы никогда не устанавливаете переменные lastDebounceTime ни к чему.
Наконец, ваш эскиз читает кнопки только один раз за игру. Это отбрасывает все остальное.
Это убивает ваши искажения и портит количество нажатий кнопок.
Я остановлюсь сейчас, чтобы дать вам шанс разобраться. Оставьте еще один комментарий, если вам нужна дополнительная помощь.
Других решений пока нет …