Arduino Uno:如果 if 语句变为假,如何继续循环?

问题描述 投票:0回答:3

我正在尝试使用 arduino uno 和面包板制作程序。我正在努力做到这一点,所以当我按下一个按钮时,它会在三个灯之间切换。

int switchState = 0;

void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, INPUT);
}

void loop() {
  switchState = digitalRead(5);

  int number = 0;
  
  if (switchState == HIGH) {
    number = +1;
  }
  
  if (number == 1) {
    digitalWrite(4, HIGH);
  }
  
  if (number == 2) {
    digitalWrite(3, HIGH);
  }

  if (number == 3) {
    digitalWrite(2, HIGH);
  }
}

问题是我认为它卡在第三个 if 语句上,因此它不会继续代码。

我试过使用 if-else-statements。我试图在主循环中创建一个循环,但我就是想不通。请帮助。

loops arduino arduino-uno arduino-ide
3个回答
0
投票

您的循环不会卡在第三个

if
,因为那个条件永远不会变为真。
number
每次都会重置为
0
,所以
number
如果没有按下按钮只能是
0
,如果按下按钮则只能是
1

这一行

number = +1;
不正确。如果你想增加数字,写
number++
number += 1
.

如果你想计算按钮按下次数,将

number
的声明移出循环,就像
switchState
一样。事实上,
switchState
可以在循环内移动。

最后,你可能会遇到switch弹跳,所以你需要单独处理。

编辑

要包装计数器,您可以按照 MidasN74 的建议重置

number
,或者像这样:

  if (number == 3) {
    number = 0;
    digitalWrite(2, HIGH);
  }

0
投票

这是因为你的计数器一直在上升,所以检查计数器是否为 4,如果是,则将其设置回 0。还有 int number = 0;不应该在循环中!所以:

int switchState = 0;
int number = 0;

void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, INPUT);
}

void loop() {
  switchState = digitalRead(5);
  
  if (switchState == HIGH) {
    number++;
  }

  if (number == 4) {
    number = 1;
  }
  
  if (number == 1) {
    digitalWrite(4, HIGH);
  }
  
  if (number == 2) {
    digitalWrite(3, HIGH);
  }

  if (number == 3) {
    digitalWrite(2, HIGH);
  }
}

0
投票

请按照说明编辑您的代码...

  1. 定义和分配输入和输出引脚
  2. 在循环函数中添加一个 while 循环(当 shitchState 为高电平时)。
  3. 将 int number = 0 作为全局变量。
  4. 使 number = 0 in state 3.

这是你的完整代码。希望它能正常工作。请让我知道更新。

int switchState = 0;
int number = 0;

void setup() {
    pinMode(2, OUTPUT);
    pinMode(3, OUTPUT);
    pinMode(4, OUTPUT);
    pinMode(5, INPUT);
}

void loop() {

    switchState = digitalRead(5);

    while(switchState)
    {
        ;
    }

    if (switchState == HIGH) {
        number = +1;
    }

    if (number == 1) {
        digitalWrite(4, HIGH);
    }
    if (number == 2) {
        digitalWrite(3, HIGH);
    }
    if (number == 3) {
        digitalWrite(2, HIGH);
        number = 0;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.