C++ 控制结构让我失望
我正在尝试制作一个简单的Arduino游戏,它可以记录按钮被按下的次数。有两个按钮,每个用户一个,谁最接近Arduino选择的随机数,谁就赢。winers按钮旁边的winning being(胜利)指示灯亮起。然而,在我进一步研究之前,我似乎陷入了一种陈规陋习,我将透露,我刚刚进入整个arduino/C++环境两周,所以我的知识水平相当低 基本上我想做的是,游戏持续一定的时间,比方说5秒钟,然后在5秒钟之后,所有的按钮按下都被统计和比较,并选出一个获胜者。然后游戏会自动重置,我们可以再次玩。我被卡住的地方是计时功能。我最初是从millis函数中减去一个gameClock变量,但是我读到重置millis函数是一种不好的做法。也许我的代码会让您更好地理解我正在努力实现的目标C++ 控制结构让我失望,c++,c,loops,arduino,control-structure,C++,C,Loops,Arduino,Control Structure,我正在尝试制作一个简单的Arduino游戏,它可以记录按钮被按下的次数。有两个按钮,每个用户一个,谁最接近Arduino选择的随机数,谁就赢。winers按钮旁边的winning being(胜利)指示灯亮起。然而,在我进一步研究之前,我似乎陷入了一种陈规陋习,我将透露,我刚刚进入整个arduino/C++环境两周,所以我的知识水平相当低 基本上我想做的是,游戏持续一定的时间,比方说5秒钟,然后在5秒钟之后,所有的按钮按下都被统计和比较,并选出一个获胜者。然后游戏会自动重置,我们可以再次玩。我被
#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丰富经验的人 你的素描基本上有三个问题。首先,正如你所说,游戏时钟没有按你所希望的那样工作。仅仅使用一个计数器是不会切断它的,即使在只有16Mhz的情况下,arduino也会在不到5秒钟的时间内快速通过它。你需要实际计时 第二,你的“去抖动”按钮坏了。去抖动按钮实际上相当棘手。幸运的是,许多人已经解决了这个问题。查看arduino图书馆、论坛和操场。这里的问题是,您从未将lastDebounceTime变量设置为任何值 最后,你的草图每次只读取一次按钮。这就把其他一切都抛在脑后了。 它扼杀了你的去抖动,扰乱了按键计数
我现在停下来给你一个解决问题的机会。如果您需要更多帮助,请发表另一条评论。您需要提出一个实际问题。以下格式的问题对您很有帮助。我想做X。我试过Y,但当我运行它时,我看到了Z。我应该做什么不同的事情来看到X?哇,这是一个Arduino的问题,不是关于正确使用序列号。仍然是基本的循环问题,只有进入循环时才能读取按钮状态。然后自己再循环一次,而不更新状态。所以你们永远看不到按钮被按下了。很抱歉这样的延迟回复,我被假期搞得心烦意乱了因此,我更新了代码,以利用arduino网站上的Bounce库。据我所知,它运行正常。我知道,对于我到底需要什么帮助,我并没有给出一个明确的答案,所以这里是我需要的。我需要能够有效地创建一个游戏时钟,设置游戏时间。一旦时间到了,按钮计数器被重置,我们可以再次播放。我更新了上面的代码。好多了。现在我们可以集中讨论原来的问题。我不会为你写代码的。当游戏开始时,读取并存储毫秒值作为开始时间。若要查看游戏是否结束,请从毫秒中减去开始时间,然后与游戏时间进行比较。