igendel icon

Fridge Beeper Demo

igendel | PRO | 01/28/20 03:58:26 PM UTC | 0 ⭐ | 512 👁️ | Never ⏰ | []
C |

1.78 KB

|

None

|

0 👍

/

0 👎

// 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

Comments