我正在尝试制作一个简单的Arduino游戏,跟踪按下按钮的次数。有两个按钮,每个用户一个,以及最接近Arduino选择的随机数的人,获胜。葡萄酒商按钮旁边是“获胜”。然而,在我走得更远之前,我陷入了困境 - 我会透露,我只有两周时间才进入整个arduino / C ++环境,所以我的知识非常低。
基本上我想要发生的是游戏持续一定时间,比如5秒,然后在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;
}
答案 0 :(得分:3)
你真的应该看看arduino.cc论坛寻求帮助。有一整套知识存档,还有很多有很多arduino经验的人。
草图基本上有3个问题。首先,正如你所说,gameClock并不像你想要的那样工作。只需使用一个计数器就不会削减它,即使只有16Mhz,arduino也会在不到5秒的时间内直接穿过它。你需要实际计时。
其次,你的按钮'去抖'被打破了。去抖按钮实际上非常棘手。幸运的是,很多人已经解决了这个问题。检查arduino图书馆,论坛和游乐场。这里的问题是你永远不会将lastDebounceTime变量设置为任何东西。
最后,你的草图每次只能读取一次按钮。这会抛弃一切。 它会杀死你的去抖动并弄乱按钮按下次数。
我现在停下来让你有机会解决这个问题。如果您需要更多帮助,请发表另一条评论。