Arduino - Simon说编程问题

时间:2014-12-10 19:47:22

标签: c++ loops arduino

我试图在我的Arduino Uno上为Simon Says游戏构建一个简单的草图。

我现在正在面包板上做,计划是通过Attiny和移位寄存器使其可移植,但这只是在我让主代码正常工作之后。

在循环中,有一个for来创建随机值,并决定打开哪个按钮。之后,根据我的代码,它应该监听按钮输入。

但是,出于某种原因,它会停留在创建随机值的部分。从}else if(reading == false){

开始

以下是我在Serial窗口中获得的内容: **请注意,在此运行期间,我没有向arduino / serial输入任何内容。

~~~Simon Says~~~
Here's the sequence!
Run: ID 0 LED 1
Run: ID 1 LED 1
Run: ID 2 LED 2
Run: ID 3 LED 2
I'm listening.
Here's the sequence!
Run: ID 0 LED 1
Run: ID 1 LED 2
Run: ID 2 LED 0
Run: ID 3 LED 2
I'm listening.
Here's the sequence!
Run: ID 0 LED 2
Run: ID 1 LED 1
Run: ID 2 LED 0
Run: ID 3 LED 2
I'm listening.
Here's the sequence!
Run: ID 0 LED 0
Run: ID 1 LED 2
Run: ID 2 LED 0
Run: ID 3 LED 3
boolean reading = false;
void loop()
{
  if(reading == true)
  {
    tell = deBounce(tell);
    if(tell == 4)
    {
      int won;
      for(int i; i<4; i++)
      {
        if( pressButtons[i] == buttons[i])won++;
      }
      if(won == 4){
        ntln("Won");
        for(int i; i<2; i++)
        {
          for(int k; k<4; k++)digitalWrite(led[i],HIGH);
          delay(delaySwitch);
          for(int k; k<4; k++)digitalWrite(led[i],LOW);
        }
        reading = false;
      }else{
        nt("Lost mistakes: ");
        ntln(4-won);
        digitalWrite(buz, HIGH);
        delay(delaySwitch);
        digitalWrite(buz, LOW);
        reading = false;
      }
    }
  }else if(reading == false){
     ntln("Here's the sequence!");
    for(int i; i<4; i++)
    {
      //if(mode > 0) buttons[i] = 
      buttons[i] = random(0,3);
      setLeds(buttons[i], true);
      nt("Run: ID "); nt(i); nt(" LED "); ntln(buttons[i]);
    }
    for(int i; i<4; i++)digitalWrite(led[i],HIGH);
    delay(delaySwitch);
    for(int i; i<4; i++)digitalWrite(led[i],LOW);
    ntln("I'm listening.");
    reading = true;
  }
  delay(50);
}

我对整个循环部分和阅读的删除进行了调整,除了这些行之外,没有任何其他用途的变量。

在-else结尾 - 我宣布读到真, 但arduino仍然继续这样做 - 这基本上就是问题。

提前致谢!

2 个答案:

答案 0 :(得分:0)

for(int i; i<2; i++)
{
    for(int i; i<4; i++)digitalWrite(led[i],HIGH);
    delay(delaySwitch);
    for(int i; i<4; i++)digitalWrite(led[i],LOW);
}

您在上面的部分中遇到了问题。看起来你试图在已经声明的循环范围内声明变量“i”。试着这样做:

for(int i; i<2; i++)
{
    for(int x; x<4; x++)digitalWrite(led[x],HIGH);
    delay(delaySwitch);
    for(int z; z<4; z++)digitalWrite(led[z],LOW);
}

答案 1 :(得分:0)

创建该bug的原因是我在for循环中期望x == 0, 但是我没有在for循环中为x变量设置一个值。

我希望循环和X值为0,1,2,3用于编程目的。 错过了0就完全不同了。

之前:[X值为:1,2,3]

for(int x; x<4; x++)

之后:[X值0,1,2,3]

for(int x=0; x<4; x++)

这就是最终造成错误的。