Part II/III+
void loop() {
int readVal;
loops = loops + 1;
if (loops > loopsMax) {
loops = 0;
loop2();
}
beep(0, 0);
for (i = 0; i < 20; i++) {
delay(delayMS); // DELAY #1
if (i < 20) {
now[i] = digitalRead(i);
}
if (abs(installed[i]) == 1) {
if (now[i] != was[i]) {
//state change!
delay(delayMS); // DELAY #2
if (now[i] == was[i]) {
goto next; //If switch back, skip down.
}
// DeBounce
if ((millis() - last[i]) < deBounceMS) {
goto next;
}
last[i] = millis();
inParse();
Serial.println(i);
}
}
was[i] = now[i];
next:
int y = 1;
}
//State Checks - Lowest Priority First
//Magnet Non-Contact Warning
if ((digitalRead(mc7) == HIGH) && (digitalRead(dr7) == LOW)) {
mc7Reads ++;
if (mc7Reads > mc7ReadsMax) {
eventName = "Magnet Non-Contact Warning";
volume = 1;
beep(repMagNonContact, hzMagNonContact);
}
}
//Timers
if (millis() > doorMS) {
beepOn = 1;
eventName = "Please Close Door!";
}
if ((millis() - pexPush > noKeysDelay) && (pexUnlock == 0)) {
beep(repNoKeys, hzNoKeys);
pexUnlock = 1;
eventName = "NoKeys Unlock";
digitalWrite(PX7, HIGH);
delay(100);
digitalWrite(PX7, LOW);
}
if (millis() - pirMS > pirDelay) {
//turn off PIR indicators
pirMS = millis() + pirDelay;
}
if (millis() - pr8MS > pirDelay) {
//turn off PIR indicators
pr8MS = 999999123;
pr8Hits = 0;
}
eventOld = eventName + ">>" + eventOld;
}
void loop2() {
if (digitalRead(bo7) == LOW) {
digitalWrite(LR8, HIGH);
delay(50);
digitalWrite(LR8, LOW);
}
if (digitalRead(bo7) == HIGH) {
digitalWrite(LR8, LOW);
delay(50);
digitalWrite(LR8, HIGH);
}
delay(25);
if (eventName == "Please Close Door!") {
volume = 1;
beep(repCloseDoor, hzCloseDoor);
}
if (digitalRead(pr8) == HIGH) {
pr8Hits++; //Increase pir 8 hit count for every secondary cycle
}
if (loudBeeps < 0) {
loudBeeps = 0;
}
lcd.clear();
lcd.print(eventName);
lcd.backlight();
eventName = "";
}