[英]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.