【问题标题】:I need help getting a button to activate an active buzzer using an arduino我需要帮助获得一个使用 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 发出停止信号?

【问题讨论】:

    标签: c++ c arduino arduino-uno


    【解决方案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】:

      先生,您好。我可以检查你的原理图吗?我认为您将蜂鸣器和按钮连接在同一地面上。蜂鸣器的按钮应该和蜂鸣器分开,这样如果不按下蜂鸣器就不会切断电流。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-30
        相关资源
        最近更新 更多