Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 控制结构让我失望_C++_C_Loops_Arduino_Control Structure - Fatal编程技术网

C++ 控制结构让我失望

C++ 控制结构让我失望,c++,c,loops,arduino,control-structure,C++,C,Loops,Arduino,Control Structure,我正在尝试制作一个简单的Arduino游戏,它可以记录按钮被按下的次数。有两个按钮,每个用户一个,谁最接近Arduino选择的随机数,谁就赢。winers按钮旁边的winning being(胜利)指示灯亮起。然而,在我进一步研究之前,我似乎陷入了一种陈规陋习,我将透露,我刚刚进入整个arduino/C++环境两周,所以我的知识水平相当低 基本上我想做的是,游戏持续一定的时间,比方说5秒钟,然后在5秒钟之后,所有的按钮按下都被统计和比较,并选出一个获胜者。然后游戏会自动重置,我们可以再次玩。我被

我正在尝试制作一个简单的Arduino游戏,它可以记录按钮被按下的次数。有两个按钮,每个用户一个,谁最接近Arduino选择的随机数,谁就赢。winers按钮旁边的winning being(胜利)指示灯亮起。然而,在我进一步研究之前,我似乎陷入了一种陈规陋习,我将透露,我刚刚进入整个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;

  }

你真的应该看看arduino.cc论坛来获得这方面的帮助。这里有一个完整的知识档案,再加上许多拥有arduino丰富经验的人

你的素描基本上有三个问题。首先,正如你所说,游戏时钟没有按你所希望的那样工作。仅仅使用一个计数器是不会切断它的,即使在只有16Mhz的情况下,arduino也会在不到5秒钟的时间内快速通过它。你需要实际计时

第二,你的“去抖动”按钮坏了。去抖动按钮实际上相当棘手。幸运的是,许多人已经解决了这个问题。查看arduino图书馆、论坛和操场。这里的问题是,您从未将lastDebounceTime变量设置为任何值

最后,你的草图每次只读取一次按钮。这就把其他一切都抛在脑后了。 它扼杀了你的去抖动,扰乱了按键计数


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

您需要提出一个实际问题。以下格式的问题对您很有帮助。我想做X。我试过Y,但当我运行它时,我看到了Z。我应该做什么不同的事情来看到X?哇,这是一个Arduino的问题,不是关于正确使用序列号。仍然是基本的循环问题,只有进入循环时才能读取按钮状态。然后自己再循环一次,而不更新状态。所以你们永远看不到按钮被按下了。很抱歉这样的延迟回复,我被假期搞得心烦意乱了因此,我更新了代码,以利用arduino网站上的Bounce库。据我所知,它运行正常。我知道,对于我到底需要什么帮助,我并没有给出一个明确的答案,所以这里是我需要的。我需要能够有效地创建一个游戏时钟,设置游戏时间。一旦时间到了,按钮计数器被重置,我们可以再次播放。我更新了上面的代码。好多了。现在我们可以集中讨论原来的问题。我不会为你写代码的。当游戏开始时,读取并存储毫秒值作为开始时间。若要查看游戏是否结束,请从毫秒中减去开始时间,然后与游戏时间进行比较。