【发布时间】:2019-06-04 04:44:25
【问题描述】:
我正在制作一个程序,当我拍两下时会打开我的灯。我将项目编码为: 1. 听声音(第一次鼓掌) 2. 听安静(拍手之间的休息)这是为了避免错误的触发(说话等)。 3. 听第二次噪音(第二次拍手)。
代码运行并正常工作,但它有几个我正在努力寻找/修复的断点。我知道如果我发出声音,然后我就安静了,然后我重复发出另一个声音,并且代码迅速连续地卡在第一个 while 循环中,或者完全停止进入第一个 while 循环。当我说话时,代码经常会中断。
如果有人愿意为我节省一些时间和精力,我已经提供了代码。我会很感激所有建议,因为我还是个初学者。
bool quiet = false;
bool loud = false;
int runtime = 1000;
int start = millis();
bool clap = false;
bool clap2 = false;
void setup() {
Serial.begin(9600);
pinMode(2, INPUT);
}
void loop() {
int mic = digitalRead(2);
if (mic == 0) {
Serial.println("loud");
clap = true;
} else {
Serial.println("quiet");
}
if (clap == true) {
clap = false;
Serial.println("clap");
start = millis();
delay(500);
while (start >= millis() - runtime && loud != true) {
mic = digitalRead(2);
if (mic == 0) {
Serial.println("noise detected!");
loud = true;
} else {
Serial.println("scilence");
quiet = true;
}
}
} else {
delay(1);
}
if (quiet == true && loud == false) {
quiet = false;
Serial.println("listening for second clap...");
delay(500);
start = millis();
while (start >= millis() - runtime) {
mic = digitalRead(2);
if (mic == 0) {
clap2 = true;
} else {
delay(1);
}
}
} else {
loud = false;
quiet = false;
}
if (clap2 == true) {
clap2 = false;
Serial.println("clap 2");
delay(1000);
} else {
delay(1);
}
}
【问题讨论】:
标签: arduino arduino-uno arduino-ide