我需要帮助获得一个使用 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 激活有源蜂鸣器的按钮的主要内容,如果未能解决你的问题,请参考以下文章

Pyserial没有从Arduino获得新的价值

Arduino ESP32通过PWM控制无源蜂鸣器

无源蜂鸣器——小白的单片机笔记

Arduino 键盘 4x4 到 LCD 激活/停用(家庭安全系统)

Arduino 和 SX1278 的 LoRa B 类实现 TDMA

Arduino编译bootloader