Я делаю программу, которая включает мои огни, когда я дважды хлопаю в ладоши. Я закодировал проект для:
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);
}
}