-1

我正在尝试制作一个简单的 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;

  }
4

1 回答 1

3

您真的应该查看 arduino.cc 论坛以获取有关这些内容的帮助。有一个完整的知识档案,还有许多拥有丰富 arduino 经验的人。

你的草图基本上有3个问题。首先,正如您所说,gameClock 并没有像您希望的那样工作。仅仅使用计数器并不会减少它,即使只有 16Mhz,arduino 也会在不到 5 秒的时间内直接通过它。你需要实际计时。

其次,您的按钮“去抖动”已损坏。去抖动按钮实际上是相当棘手的。幸运的是,很多人已经解决了这个问题。检查 arduino 库、论坛和操场。这里的问题是您从未将 lastDebounceTime 变量设置为任何值。

最后,你的草图每场比赛只读取一次按钮。这把其他一切都扔掉了。它会杀死你的去抖动并弄乱按钮按下计数。

我现在停下来给你一个解决问题的机会。如果您需要更多帮助,请发表另一条评论。

于 2013-12-19T23:51:56.870 回答