其他引脚始终点亮

Other pins always lighting up

即使我还没有设置 digitalWrite(pin, HIGH);,为什么其他引脚会亮起?

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

这是我的代码:

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;
  }
}

我通过Arduino板本身测试了它(还没有面包板......),内置LED或LED_BUILTIN正在点亮,但亮度不是太高;好像变暗了。

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

所以,基本上,我想要我的代码实现的是点亮 1 个 LED(+1 LED),每点击 3 次按钮(引脚 2)。另一方面,我还希望它每点击三次按钮(引脚 3)关闭 1 个 LED(-1 LED)。但是,在点击之前,引脚 4 到 8 已经点亮(正如您在 void setup() 上看到的那样)。

在您的 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 以上。因此,您设置为输出的其他引脚通过按一次(无论多么短暂)按钮打开。

自己解决了问题...

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

x += 1;后面应该有一个delay,像这样:...

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;
  }
}