其他引脚总是点亮

时间:2017-08-07 06:01:10

标签: arduino arduino-uno arduino-ide

为什么其他引脚会亮起,即使我还没有设置int x = 0, y = 0, i = 4; void setup() { for (i = 4; i <= 13; i++) { pinMode(i, OUTPUT); } for (i = 4; i <= 8; i++) { digitalWrite(i, HIGH); } pinMode(2, INPUT); pinMode(3, INPUT); } void loop() { if (digitalRead(2) == HIGH) { x += 1; } if (x == 3) { i += 1; digitalWrite(i, HIGH); x = 0; } if (digitalRead(3) == HIGH) { y -= 1; } if (y == 3) { digitalWrite(i, LOW); i -= 1; y = 0; } }

我不知道是什么让其他引脚点亮LED。

这是我的代码:

LED_BUILTIN

我通过Arduino板测试它(没有面包板......),内置LED或void setup()点亮,但亮度不是太高;它就像它变暗了。

现在,我使用面包板通过手动将跨接线从一个针脚连接到另一个针脚进行测试。所有引脚都会使LED亮起,但我不明白,因为我的代码不允许其他引脚(引脚4到8除外)点亮。

因此,基本上,我希望我的代码实现的目的是点亮1个LED(+1 LED),每按三次按钮(引脚2)。另一方面,我还希望它能够关闭1个LED(-1 LED),每按一下按钮(针脚3)。但是,在点击之前,引脚4到8已经点亮(正如您在new InjectionToken<Array<Validator|Function>>('NgValidators'); 上看到的那样)。

2 个答案:

答案 0 :(得分:0)

在你的setup()中,你打开了一堆别针:

for (i = 4; i <= 13; i++) { // set pins 4-13 up as outputs
  pinMode(i, OUTPUT);
}
for (i = 4; i <= 8; i++) { // turn on 4,5,6,7, and 8
  digitalWrite(i, HIGH);

循环中的其余代码不会关闭它们,所以它们会继续运行。

之后,假设您的digitalRead()语句与推送某些按钮相关联,没有任何延迟或其他机制来减慢速度,以下语句可以比您可以控制的更快地执行:

i += 1;
digitalWrite(i, HIGH);

我打赌如果你检查i的值,你会发现它们在你的测试条件下会超过8。因此,您设置为输出的其他引脚将从单个(按短按)按钮开启。

答案 1 :(得分:0)

自己解决问题......

if (digitalRead(2) == HIGH) {
    x += 1;
}

delay之后应该有x += 1;,如下所示:...

if (digitalRead(2) == HIGH) {
    x += 1;
    delay(200);
}

因此,x不应该立即增加。

新守则:

int x = 0, y = 0, i = 7;

void setup() {
  for (int a = 4; a <= 13; a++) {
    pinMode(a, OUTPUT);
  }
  for (int a = 4; a <= 7; a++) {
    digitalWrite(a, HIGH);
  }
  pinMode(2, INPUT);
  pinMode(3, INPUT);
}

void loop() {
  if (digitalRead(2) == HIGH) {
    x += 1;
    delay(200);
  }
  if (x == 3) {
    i += 1;
    digitalWrite(i, HIGH);
    x = 0;
  }

  if (digitalRead(3) == HIGH) {
    y += 1;
    delay(200);
  }
  if (y == 3) {
    digitalWrite(i, LOW);
    i -= 1;
    y = 0;
  }
}
相关问题