我想做一個簡單的Arduino遊戲,跟蹤按鈕被按下的次數。有兩個按鈕,每個用戶一個,最接近Arduino挑選的隨機數的任何人都會贏。 「獲勝」是一個燈光旁邊的winers按鈕。然而,我陷入了一種看起來很尷尬的狀態 - 在我走得更遠之前,我會泄露說,我只有兩週時間進入整個arduino/C++環境,所以我的知識水平很低。控制結構正在讓我失望
基本上我想要發生的是遊戲持續一定的時間,讓我們說5秒鐘,然後在5秒鐘後,所有的按鈕推動被記錄和比較,並獲得勝利者。然後遊戲重新開始,我們可以再次玩。我陷入困境的地方在於計時功能。我原本是從millis()
函數中減去一個gameClock
變量,但是我已經讀到重置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;
}
你需要問一個實際的問題。 – JBentley
以下列格式詢問您的問題很有幫助。 「我想做'X',我嘗試了'Y',但是當我跑步時,我看到'Z'。我應該怎樣做才能看到'X'?」 – Bill
哇,Arduino的問題不是關於正確使用串口。仍然是基本的循環問題,只有在進入循環時才能讀取按鈕狀態。然後再次循環,而無需更新狀態。所以你永遠不會看到按鈕被按下。 –