我需要帮助获得一个使用 arduino 激活有源蜂鸣器的按钮
Posted
技术标签:
【中文标题】我需要帮助获得一个使用 arduino 激活有源蜂鸣器的按钮【英文标题】:I need help getting a button to activate an active buzzer using an arduino 【发布时间】:2019-11-14 05:25:33 【问题描述】:我正在尝试执行以下操作:
按键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 发出停止信号?
【问题讨论】:
【参考方案1】:一种选择是使用状态变量和时间,在按下按钮之前从打开切换到关闭。您只需继续循环并记录时间。当按下按钮 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;
【讨论】:
【参考方案2】:先生,您好。我可以检查你的原理图吗?我认为您将蜂鸣器和按钮连接在同一地面上。蜂鸣器的按钮应该和蜂鸣器分开,这样如果不按下蜂鸣器就不会切断电流。
【讨论】:
以上是关于我需要帮助获得一个使用 arduino 激活有源蜂鸣器的按钮的主要内容,如果未能解决你的问题,请参考以下文章
Arduino 键盘 4x4 到 LCD 激活/停用(家庭安全系统)