// by Ido Gendel, 2020 // For the Arduino Nano ("Old bootloader") #define SWITCH_REF_PIN A0 #define SWITCH_IN_PIN A1 #define LIGHT_IND_PIN 13 #define LIGHT_CTRL_PIN 2 #define BUZZER_GND_PIN 11 #define BUZZER_OUT_PIN 12 uint8_t isOpened = 0; uint8_t n; //========================================================= void setup() { // Switch is N.C. pinMode(SWITCH_REF_PIN, OUTPUT); pinMode(SWITCH_IN_PIN, INPUT_PULLUP); pinMode(LIGHT_CTRL_PIN, OUTPUT); pinMode(LIGHT_IND_PIN, OUTPUT); pinMode(BUZZER_GND_PIN, OUTPUT); pinMode(BUZZER_OUT_PIN, OUTPUT); } //========================================================= void waitToOpen(void) { // Lights Off digitalWrite(LIGHT_CTRL_PIN, LOW); digitalWrite(LIGHT_IND_PIN, LOW); while (HIGH == digitalRead(SWITCH_IN_PIN)) { } delay(50); // Debounce isOpened = 1; // Lights On digitalWrite(LIGHT_CTRL_PIN, HIGH); digitalWrite(LIGHT_IND_PIN, HIGH); } //========================================================= void openedWait(uint32_t ms) { uint32_t timeStamp = millis(); if (0 == isOpened) return; while (millis() - timeStamp < ms) { if (HIGH == digitalRead(SWITCH_IN_PIN)) { isOpened = 0; break; } } } //========================================================= void beep(const uint16_t freq, const uint32_t ms) { if (0 == isOpened) return; tone(BUZZER_OUT_PIN, freq); openedWait(ms); noTone(BUZZER_OUT_PIN); } //========================================================= void loop() { waitToOpen(); openedWait(5000); for (n = 0; n < 3; n++) { beep(4000, 500); openedWait(1000); } } https://drive.google.com/file/d/1NYLGT5MHHoqzMJRANOdAMuqTsrBZAlPl/view?usp=sharing