簡體   English   中英

我不知道如何在 state function 中使用 arduino,這是我的第一個小項目

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM