Arduino 按钮继电器控制和 LED

时间:2021-04-10 09:49:01

标签: arduino arduino-uno arduino-ide

我不是 arduino 编码的专业人士,我有一个关于 Sketch 的问题。我需要用按钮控制继电器的代码。我有 3 个按钮、3 个 LED 和 2 个继电器。当按下 1 个按钮时,选择第一个 LED,如果两次按下,则选择第二个 LED。按下第二个按钮一次则选择第一个继电器,如果两次按下则选择第二个继电器,最后启动按钮启动所有这些命令,然后点亮第三个 LED。请帮助!这是我的代码:

int button1=2;
int button2=3;
int button3=4;
int relay1=8;
int relay2=9;
int led=5;
int led2=6;
int led3=7;
int button1State=0;
int button2State=0;
int button3State=0;
void setup() {
      // put your setup code here, to run once:
Serial.begin(9600);
pinMode(button1, INPUT_PULLUP);
pinMode(button2,INPUT_PULLUP);
pinMode(button3,INPUT_PULLUP):
pinMode(relay1, OUTPUT);
digitalWrite(relay1, HIGH);
pinMode(relay2,OUTPUT);
digitalWrite(relay2, HIGH);
pinMode(led,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
button1State = digitalRead(button1);//when once click turn led
if(button1State==HIGH){
  digitalWrite(led,HIGH);
  delay(wait);

if(button1State==HIGH){ //when clicked twice then turn on led 2, but i dont know how to do it
digitalWrite(led2,HIGH);
delay(wait)
}
}
if (button2State== HIGH){
  digitalWrite(relay1,HIGH);
  delay(wait);

if(button2State==HIGH){ //when clicked twice turn on second relay but i dont know how to do this
  digitalWrite(relay2,HIGH);
  delay(wait);
}
if(button2State==HIGH){
  digitalWrite(relay1&&relay2,HIGH);
  delay(wait);
}
}
//and click start i dont kknow how to do this :((
//when select led then circuits run for 10 sec,if led 2 select then circuit runs for 20 sec
}

1 个答案:

答案 0 :(得分:0)

画出你的代码的流程图,你很快就会发现它不是你想要做的。

让我们回顾一下您的几行:

在这里你读到了当时按钮 1 的状态

button1State = digitalRead(button1);//when once click turn led

如果该状态为 HIGH,则打开 LED 并等待。 (顺便说一句,这里等待未定义,这会导致错误)

if(button1State==HIGH){
  digitalWrite(led,HIGH);
  delay(wait);

然后,如果按钮状态为 HIGH,则打开第二个 LED 并等待。和上面一样的问题。

if(button1State==HIGH){ //when clicked twice then turn on led 2, but i dont know how to do it
digitalWrite(led2,HIGH);
delay(wait)
}
...

所以你的第一个问题是你没有更新 button1State。还是你一开始读到的值。

如果你只是自言自语,你会怎么做?如果每次按下一个按钮都想做三件不同的事情,你需要做什么?

  1. 你需要找出按钮被按下(你问自己我按下按钮了吗?)

  2. 你需要知道你按下按钮的频率(你数了 1、2、3、1、2、3)

  3. 您需要为每次按下按钮做不同的事情(如果 1 则执行 a,如果 2 则执行 b,如果 3 则执行 c ...

  4. 你还需要知道按钮是否仍然被按下

所以你需要一个计算按钮按下次数的变量。

以下代码只是为了向您展示如何处理事情。我没有测试它是否编译,也没有实现你需要的一切。只是给你一个起点。

在某些时候,您还必须重置计数器。您可以为此使用模运算符。现在去学习吧!

int button1Count = 0;
int lastButton1State = LOW;
// your other variables

void setup()
{
  pinMode(button1, INPUT_PULLUP);
}

void loop()
{ 
  int button1State = digitalRead(button1);
  // button 1 has just been pressed
  if (button1State && !lastButton1State)
  {
    button1Count++;
  }

  lastButton1State = button1State;

  switch(button1State) {
  case 1:
    digitalWrite(led, HIGH);
    break;
  case 2:
    digitalWrite(led2, HIGH);
    break;
  }
}

当您成功实现此功能后,您应该了解如何编写非阻塞 arduino 代码。

相关问题