我正在尝试执行以下操作:
按下按钮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表示其停止?
答案 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)
早上好先生。我可以检查一下您的示意图吗?我认为您在同一位置连接了蜂鸣器和按钮。蜂鸣器的按钮应与蜂鸣器分开,以免在未按下蜂鸣器的情况下切断电流。