/*
https://forum.arduino.cc/t/need-help-with-delay-function/1239293
*/
int SOUND = 10;
int ALERTLIGHT = 9;
int BUNKLIGHT = 8;
int SPEAKER = 7;
int alert = 2;
unsigned long sounddelay = 3000ul;
unsigned long alertlightdelay = 6000ul;
unsigned long bunkdelay = 10000ul;
byte sysState = 0; //0 = off
unsigned long lastDelay = 0;
byte lastPulse = 0;
unsigned long lastPress = 0;
int intervalDebounce = 50;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(SOUND, OUTPUT);
pinMode(ALERTLIGHT, OUTPUT);
pinMode(SPEAKER, OUTPUT);
pinMode(BUNKLIGHT, OUTPUT);
pinMode(alert, INPUT);// button needs pull down resistor..
digitalWrite(SOUND, HIGH);
digitalWrite(ALERTLIGHT, HIGH);
digitalWrite(BUNKLIGHT, HIGH);
digitalWrite(SPEAKER, HIGH);
//digitalWrite(alert, HIGH); no,no..
}
void loop() {
// put your main code here, to run repeatedly:
unsigned long now = millis();
if (now - lastPress >= intervalDebounce){
byte inputPulse = digitalRead(alert);
if (inputPulse != lastPulse) {
lastPress = now;//start debounce
lastPulse = inputPulse;
if (inputPulse == HIGH) {
sysState = 1;
Serial.println("Button Press");
}
}
}
if (sysState > 0) {
switch (sysState) {
case 1: digitalWrite(SOUND, LOW);
digitalWrite(ALERTLIGHT, LOW);
digitalWrite(BUNKLIGHT, LOW);
digitalWrite(SPEAKER, LOW);
sysState++;
lastDelay = now;
Serial.print("State 1 waiting: ");
Serial.print(sounddelay);
Serial.println(" ms");
break;
case 2: if (now - lastDelay >= sounddelay) {
sysState++;
Serial.println("State 2 wait complete");
} break;
case 3: digitalWrite(SOUND, HIGH); sysState++; lastDelay = now;
Serial.print("State 3 waiting: ");
Serial.print(alertlightdelay);
Serial.println(" ms");
break;
case 4: if (now - lastDelay >= alertlightdelay) {
sysState++;
Serial.println("State 4 wait complete");
} break;
case 5: digitalWrite(ALERTLIGHT, HIGH); sysState++; ; lastDelay = now;
Serial.print("State 5 waiting: ");
Serial.print(bunkdelay);
Serial.println(" ms");
break;
case 6: if (now - lastDelay >= bunkdelay) {
sysState++;
Serial.println("State 6 wait complete");
} break;
case 7: digitalWrite(SPEAKER, HIGH);
digitalWrite(BUNKLIGHT, HIGH);
Serial.println("State 7 ending");
sysState = 0;
break;
} //switch
} //if state > 0
}