[英]I don't know how to use state function yet in arduino and this is my first little project
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
}
}
我对这个问题进行了编码,并决定输入 state function,这样当我按下按钮点亮 LED 时它就会存储一个数字。 但按下按钮后,唯一亮起的 LED 灯是绿色和红色,我什至不知道为什么它们同时亮起
读取数字输入只会给你两种状态高或低,将被“翻译”为 1(高)或 0(低)。 我真的不明白为什么红色的LED灯会亮,我觉得应该不会。
为了你的目的,你应该在你的代码中添加一个“计数器”变量,每次你按下按钮时它都会增加,并在 if 语句中使用这个计数器变量。 我还建议您在达到某个值时将此变量设置为 0,否则您的 LED 将始终在某个点关闭,您将不得不重新启动 Arduino 以再次打开它们。
您还应该关心按钮的去抖动以及调用延迟的方式。 如您所用,它会在达到延迟 function 时完全停止您的代码。
此外,使用“else”语句是一种很好的做法。
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;
}
}
您有多个if()
彼此相继而不是使用else if
。
else
仅与if(state == 3)
相关,它始终为 false,因为在这种情况下 state 只能为 0 或 1。 因此,当按下按钮时,else 将始终与if(state == 1)
一起运行。
将除第一个if(...)
之外的所有内容更改为else if(...)
,那么它可能更有意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.