【问题标题】:Arduino push button relay control and ledArduino 按钮继电器控制和 LED
【发布时间】:2021-04-10 09:49:01
【问题描述】:

我在 arduino 编码方面并不专业,我对草图有疑问。我需要用按钮控制继电器的代码。我有 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) button3 是您所说的“开始按钮”吗? 2)“所有这些命令”是否意味着打开所有 LED 和继电器?如果是,那么在超时(等待)之后会持续多长时间以及会发生什么? 3)等待延迟后会发生什么?您要关闭 LED 和继电器吗? 4)如果再次按下按钮(超过两次)会发生什么?
  • 这是我从您的问题中了解到的:1) 按下按钮 1:打开 led1,等待 10 秒。 2)再次按下按钮1:打开led2,等待10秒。 3) 按下按钮 2:打开继电器 1,等待 10 秒。 4) 再次按下按钮 2:打开继电器 2,等待 10 秒。 5) button3 按下:执行以上所有操作(你写“所有这些命令”的地方)并打开 led3。
  • 这就像一个计时器。您设置秒和分钟,并在运行结束时启动计时器。在我的项目中,您设置了该电路将运行多长时间。一开始你设置Led1或Led 2,当你选择led 1然后电路运行10秒,如果你选择led 2然后电路运行20秒,第二你设置继电器哪个继电器会工作?第一秒还是两者兼而有之?最后,当您按下开始按钮时,所有这些选择都会运行。 10 秒或 20 秒
  • int 我的代码我不知道如何为一次两次或三次按下的按钮编写代码,当按下一次 led1 打开时,按下两次 led 2 打开时,这种方法也适用于继电器。我需要你的帮助。我的这个项目的代码有什么问题。请帮忙

标签: arduino arduino-uno arduino-ide


【解决方案1】:

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

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

您在此处读取按钮 1 的状态

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

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

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

然后,如果按钮状态为高,则打开第二个 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 代码。

【讨论】:

  • 你能帮我写所有的代码吗?因为我不是专业程序员,请帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
相关资源
最近更新 更多