我需要获得帮助以使用arduino激活主动蜂鸣器的按钮的帮助

时间:2019-11-14 05:25:33

标签: c++ c arduino arduino-uno

我正在尝试执行以下操作:

按下按钮A,蜂鸣器静音。

按下按钮B,蜂鸣器以预定频率开启。

有效的方法:

int buttonApin = 9;
int buttonBpin = 8;
int buzzer = 12;

void setup() {
   ///put everything to output
}

void loop() {
   if (digitalRead(buttonApin) == LOW)
   {
      digitalWrite(buzzer, LOW);
   }
   if (digitalRead(buttonBpin == LOW)
   {
      digitalWrite(buzzer, HIGH);
   }

这很好。我按下按钮A,没有声音,然后按下按钮B,则蜂鸣器保持打开状态并保持打开状态,直到再次按下A为止。

我的问题是当我将“ digitalWrite(buzzer,High);”替换为以下内容时:

{
  digitalWrite(buzzer, HIGH);
  delay(1000);
  digitalWrite(buzzer, LOW);
  delay(1000); 
}

执行此操作并按下按钮B时,蜂鸣器仅发出蜂鸣声1秒钟。但是,当我按住蜂鸣器时,蜂鸣器会按照需要执行。我如何才能使蜂鸣器在不按住按钮B的情况下继续在高音和低音之间振荡,直到我再次按下按钮A表示其停止?

2 个答案:

答案 0 :(得分:0)

一个选项是使用状态变量和时间,该变量从打开变为关闭,直到按下按钮为止。您只需不断循环并记录时间。当按下按钮A时,指示灯熄灭,代码等待按钮B按下。它永远做到这一点。

#define OFF 0
#define ON 1
#define BUTTON 2

static char state = ON;
static unsigned long prevTime = 0;

void loop() {
   if (digitalRead(buttonApin) == HIGH)
   {
      state = BUTTON;
      digitalWrite(buzzer, LOW);
   }
   if (digitalRead(buttonBpin) == HIGH)
   {
      state = ON;
   }

   if (state != BUTTON && (millis() - prevTime >= 2000)) {
     digitalWrite(buzzer, HIGH);
     prevTime = millis();
     state = ON - state;
   } 
}

答案 1 :(得分:0)

早上好先生。我可以检查一下您的示意图吗?我认为您在同一位置连接了蜂鸣器和按钮。蜂鸣器的按钮应与蜂鸣器分开,以免在未按下蜂鸣器的情况下切断电流。