// распознавание количества хлопков
#include <VolAnalyzer.h>
#include <Clap.h>
#include "EncButton.h"
uint8_t BTN = 15; // кнопка
Button butt1(BTN);
VolAnalyzer vol(A0); // микрофон на А0
uint8_t n_claps = 0;
Clap clap;
uint8_t Check_clap = 2; // индикация хлопков
uint32_t claptime = 0;
uint32_t timeout_befor = 10000; //перед контрольным сигналом должна быть тишина 30 секунд
uint32_t timeout_after = 10000; //после контрольного сигнала подать команду в течении не более 10 секунд
uint32_t interval = 0;
bool b_flag = false;
void setup() {
Serial.begin(115200);
pinMode(Check_clap, OUTPUT);
digitalWrite(Check_clap, 0); //выключили лампочку
}
void loop() {
vol.tick();
//clap.tick(vol.getRawMax());
butt1.tick();
n_claps = butt1.getClicks(); //получили количество хлопков
if (butt1.hasClicks()) {
n_claps = butt1.getClicks(); //получили количество хлопков
interval = millis() - claptime; //получили интервал от последнего хлопка
claptime = millis(); //запомнили время текущего хлопка
Serial.print(millis()/1000);
Serial.print(" сек. сейчас. Был ");
Serial.print(interval/1000);
Serial.print(" сек. интервал. Грязных хлопков ");
Serial.println(n_claps);
if (b_flag) {
if (interval < timeout_after) {
if (n_claps == 1) my_blink(n_claps);
if (n_claps == 2) my_blink(n_claps);
if (n_claps == 3) my_blink(n_claps);
}
b_flag = false;
digitalWrite(Check_clap, 0); //выключили лампочку - поезд ушел
}
else {
if (interval > timeout_befor && n_claps == 2) { //Только 2 хлопка и только после таймаута!
b_flag = true;
digitalWrite(Check_clap, 1); //включили лампочку в знак готовности принять команду
Serial.println("Жду команду");
}
}
}
}
void my_blink(uint8_t n_claps) {
digitalWrite(Check_clap, 0); //выключили лампочку
Serial.println("Выполняю команду");
delay(1000);
for (byte i = 0; i < n_claps; i++) {
digitalWrite(Check_clap, 1); //включили лампочку
delay(500);
digitalWrite(Check_clap, 0); //выключили лампочку
delay(500);
}
Serial.println("Команда выполнена");
}