const int buttonPin = 4; // the port number of the pushbutton pin
const int green = 13; // the port number of the LED pin
const int red = 12;
const int blue = 11;
void setup() {
pinMode(green, OUTPUT); // initialize the LED pin as an output:
pinMode(red, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(buttonPin, INPUT); // initialize the pushbutton pin as an input:
}
void loop()
{
int state = digitalRead(buttonPin); // to check if it's on or not
if (state == 1)
{
digitalWrite(green, HIGH); //LED GREEN ON
digitalWrite(red, LOW); // LED RED OFF
digitalWrite(blue, LOW); //LED BLUE OFF
delay(10000);
}
if(state == 2)
{
digitalWrite(green, LOW); //LED GREEN OFF
digitalWrite(red, HIGH); // LED RED ON
digitalWrite(blue, LOW); //LED BLUE OFF
delay(10000);
}
if(state == 3)
{
digitalWrite(green, LOW); //LED GREEN OFF
digitalWrite(red, LOW); // LED RED OFF
digitalWrite(blue, HIGH); //LED BLUE ON
delay(10000);
}
else
{
digitalWrite(green, LOW); //LED GREEN OFF
digitalWrite(red, LOW); // LED RED OFF
digitalWrite(blue, LOW); //LED BLUE OFF
}
}我编码了这个问题,并决定把状态函数,以便它将存储一个数字时,我按下按钮,以点燃leds。但按下按钮后,唯一亮起灯的是绿色和红色,我甚至不知道它们为什么同时打开
发布于 2022-03-24 12:20:39
阅读数字输入只会给你两个状态高或低,将被“翻译”为1(高)或0(低)。我真的不明白为什么红色LED灯,我认为它不应该。
为了达到您的目的,您应该在代码中添加一个“计数器”变量,每次按下按钮时都会增加,并在if语句中使用这个计数器变量。我还建议您在达到某个值时将这个变量设置为0,否则您的LED将始终处于关闭状态,并且您必须重新启动Arduino才能再次打开它们。
您还应该关心取消按钮,以及调用延迟的方式。正如您所使用的,当您的代码到达延迟函数时,它将完全停止。
同时,使用“using”语句也是一种良好的实践。
const int buttonPin = 4; // the port number of the pushbutton pin
const int green = 13; // the port number of the LED pin
const int red = 12;
const int blue = 11;
void setup() {
pinMode(green, OUTPUT); // initialize the LED pin as an output:
pinMode(red, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(buttonPin, INPUT); // initialize the pushbutton pin as an input:
int counter = 0;
}
void loop()
{
int state = digitalRead(buttonPin); // to check if it's on or not
if(state == 1) { // if(state) also works
counter = counter + 1; // counter++
}
if (counter == 1)
{
digitalWrite(green, HIGH); //LED GREEN ON
digitalWrite(red, LOW); // LED RED OFF
digitalWrite(blue, LOW); //LED BLUE OFF
delay(10000);
}
else if(counter == 2)
{
digitalWrite(green, LOW); //LED GREEN OFF
digitalWrite(red, HIGH); // LED RED ON
digitalWrite(blue, LOW); //LED BLUE OFF
delay(10000);
}
else if(counter == 3)
{
digitalWrite(green, LOW); //LED GREEN OFF
digitalWrite(red, LOW); // LED RED OFF
digitalWrite(blue, HIGH); //LED BLUE ON
delay(10000);
}
else if (counter > 3)
{
digitalWrite(green, LOW); //LED GREEN OFF
digitalWrite(red, LOW); // LED RED OFF
digitalWrite(blue, LOW); //LED BLUE OFF
}
else if (counter == 10){ //so it resets at some point
counter = 0;
}
}发布于 2022-03-24 12:07:25
彼此之间有多个if(),而不是使用else if。
else只与if(state == 3)相关,因为在这种情况下,状态只能是0或1。因此,当按下按钮时,它将始终与if(state == 1)一起运行。
将除第一个if(...)之外的所有内容更改为else if(...),这样可能会更有意义。
https://stackoverflow.com/questions/71602033
复制相似问题