gpt4 book ai didi

c++ - Arduino 在循环中显示 LED 输出的奇怪行为

转载 作者:行者123 更新时间:2023-11-28 01:16:02 25 4
gpt4 key购买 nike

您好,我在理解看似非常简单的问题的行为时遇到了一些困难。

我用一个按钮连接了 4 个 LED 和电阻器。我的想法是,我按下按钮,LED 依次亮起,关闭前一个。

这工作正常,直到从头开始重新启动循环时,串行监视器中一切正常,但 LEDS 几乎不亮,除了 4 号灯正常亮起。

这是我的代码:

const int buttonPin = 6;
const int ledPin1 = 2;
const int ledPin2 = 3;
const int ledPin3 = 4;
const int ledPin4 = 5;

int buttonState = 0;
int pressed = 0;

void setup() {
{
Serial.begin (115200);
Serial.println ();
Serial.println ("Starting up");
}
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}

void loop()
{
if(digitalRead(buttonPin)==HIGH)
{
if(pressed==0)
{
pressed=1;
switch(buttonState)
{
case 0:
digitalWrite(ledPin1, LOW);
buttonState++;
break;
case 1:
digitalWrite(ledPin1, HIGH);
Serial.println ("1");
buttonState++;
break;
case 2:
digitalWrite(ledPin2, HIGH);
pinMode(ledPin1, LOW);
Serial.println ("2");
buttonState++;
break;
case 3:
digitalWrite(ledPin3, HIGH);
pinMode(ledPin2, LOW);
Serial.println ("3");
buttonState++;
break;
case 4:
digitalWrite(ledPin4, HIGH);
pinMode(ledPin3, LOW);
Serial.println ("4");
buttonState++;
break;
case 5:
digitalWrite(ledPin4, LOW);
Serial.println ("off");
buttonState=0;
return;
}
}
}
else
{
pressed=0;
}
}

希望你们中的一些更聪明的人能够对这种不寻常的行为有所了解。

顺便说一句,我对 arduino 编程还很陌生,所以请放轻松。

最佳答案

您想了解 pinMode()digitalWrite() 函数之间的区别。

pinMode(pin, mode) 将指定的引脚配置为作为输入或输出。 (doc)digitalWrite(pin, value) 将 HIGH 或 LOW 值写入数字引脚。 (doc)

在您的 switch 语句中,您正在将 pinModeOUTPUT 更改为 INPUT

pinMode(ledPin1, LOW)

相同
pinMode(ledPin1, INPUT)

因为LOWINPUT都定义为0x00

当您将引脚模式更改为 INPUT 时,您无法再通过调用 digitalWrite(ledPin1, HIGH) 打开 LED。

LED 4 工作是因为您没有在任何地方调用 pinMode(ledPin4, LOW)

我认为您想在 switch 语句中调用 digitalWrite(ledPin1, LOW) 而不是 pinMode(ledPin1, LOW)

关于c++ - Arduino 在循环中显示 LED 输出的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58683433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com