繁体   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