控制结构让我失望

时间:2013-12-19 23:11:03

标签: c++ c loops arduino control-structure

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

  }

1 个答案:

答案 0 :(得分:3)

你真的应该看看arduino.cc论坛寻求帮助。有一整套知识存档,还有很多有很多arduino经验的人。

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

其次,你的按钮'去抖'被打破了。去抖按钮实际上非常棘手。幸运的是,很多人已经解决了这个问题。检查arduino图书馆,论坛和游乐场。这里的问题是你永远不会将lastDebounceTime变量设置为任何东西。

最后,你的草图每次只能读取一次按钮。这会抛弃一切。 它会杀死你的去抖动并弄乱按钮按下次数。

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