const byte butPins[9] = {9, 8, 10};
#define monoPin 7
#define audioPin 6
const int butTimer = 300;
uint64_t lastButTimers[3]; // = {0, 0, 0};
byte lastButStates[3];
bool warning = false;
const long warningTimer = 15000;
const long offTimer = 30000;
uint64_t lastWarningTime;
uint64_t lastOffTime;
bool pusk = false;
bool expec = false;
void setup() {
Serial.begin(9600);
for(byte i {0}; i < 3; i++) {
pinMode(butPins[i], INPUT_PULLUP);
}
pinMode(monoPin, INPUT);
pinMode(audioPin, OUTPUT);
}
void loop() {
for(byte i {0}; i < 3; i++) {
checkBut(i);
}
if(pusk && digitalRead(monoPin) == LOW) {
delay(100);
digitalWrite(audioPin, HIGH);
Serial.write(3);
Serial.read();
lastWarningTime = millis();
expec = true;
while(expec) {
if(Serial.available()) {
expec = false;
}
if (millis() - lastWarningTime > warningTimer && !warning) {
warning = true;
lastOffTime = millis();
Serial.println(4);
Serial.write(4);
Serial.read();
}
else if(millis() - lastOffTime > offTimer && warning) {
warning = false;
expec = false;
Serial.write(5);
Serial.println(5);
Serial.read();
}
}
Serial.read();
pusk = false;
digitalWrite(audioPin, LOW);
}
}
void checkBut(byte i) {
byte butState = digitalRead(butPins[i]);
if(butState == LOW && butState != lastButStates[i]) {
if (millis() - lastButTimers[i] > butTimer) {
lastButTimers[i] = millis();
Serial.println(i);
Serial.write(i);
Serial.read();
if(i == 2) {
pusk = true;
}
}
}
lastButStates[i] = butState;
}