我试图在我的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仍然继续这样做 - 这基本上就是问题。
提前致谢!
答案 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++)
这就是最终造成错误的。