Контрольные структуры меня подводят

Я пытаюсь сделать простую игру 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;

}

-1

Решение

Вы действительно должны посмотреть на форумы arduino.cc для помощи по этому вопросу. Есть целый архив знаний, а также много людей, которые имеют большой опыт работы с Arduino.

Есть в основном 3 проблемы с вашим эскизом. Во-первых, как вы сказали, GameClock не работает так, как вы этого хотите. Простое использование счетчика не приведет к его сокращению, даже на частоте 16 МГц, Arduino будет проноситься сквозь него всего за 5 секунд. Вы должны на самом деле время это.

Во-вторых, ваша кнопка «debouncing» не работает. Деблокирование кнопок на самом деле довольно сложно. К счастью, многие уже решили проблему. Проверьте библиотеки Arduino, форум и игровую площадку. Проблема здесь в том, что вы никогда не устанавливаете переменные lastDebounceTime ни к чему.

Наконец, ваш эскиз читает кнопки только один раз за игру. Это отбрасывает все остальное.
Это убивает ваши искажения и портит количество нажатий кнопок.

Я остановлюсь сейчас, чтобы дать вам шанс разобраться. Оставьте еще один комментарий, если вам нужна дополнительная помощь.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]