首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我还不知道如何在arduino中使用状态函数,这是我的第一个小项目

我还不知道如何在arduino中使用状态函数,这是我的第一个小项目
EN

Stack Overflow用户
提问于 2022-03-24 11:54:12
回答 2查看 30关注 0票数 0
代码语言:javascript
复制
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。但按下按钮后,唯一亮起灯的是绿色和红色,我甚至不知道它们为什么同时打开

EN

回答 2

Stack Overflow用户

发布于 2022-03-24 12:20:39

阅读数字输入只会给你两个状态高或低,将被“翻译”为1(高)或0(低)。我真的不明白为什么红色LED灯,我认为它不应该。

为了达到您的目的,您应该在代码中添加一个“计数器”变量,每次按下按钮时都会增加,并在if语句中使用这个计数器变量。我还建议您在达到某个值时将这个变量设置为0,否则您的LED将始终处于关闭状态,并且您必须重新启动Arduino才能再次打开它们。

您还应该关心取消按钮,以及调用延迟的方式。正如您所使用的,当您的代码到达延迟函数时,它将完全停止。

同时,使用“using”语句也是一种良好的实践。

代码语言:javascript
复制
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;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2022-03-24 12:07:25

彼此之间有多个if(),而不是使用else if

else只与if(state == 3)相关,因为在这种情况下,状态只能是0或1。因此,当按下按钮时,它将始终与if(state == 1)一起运行。

将除第一个if(...)之外的所有内容更改为else if(...),这样可能会更有意义。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71602033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档