我正在尝试使用 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。我试图在主循环中创建一个循环,但我就是想不通。请帮助。
您的循环不会卡在第三个
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);
}
这是因为你的计数器一直在上升,所以检查计数器是否为 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);
}
}
请按照说明编辑您的代码...
这是你的完整代码。希望它能正常工作。请让我知道更新。
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;
}
}