// definitie van de benamingen
#define PIN_BUZZER 8
#define PIN_TEMPSENSOR A0
#define PIN_DEURSENSOR 6
#define PIN_LED 7
#define PIN_RESETKNOP 5
#define BUZZER_TIJD 5000
#define ALARM_TEMP 9
// States
#define DEUR_DICHT 1
#define DEUR_OPEN_OK 2
#define DEUR_OPEN_ALARM 3
#define DEUR_OPEN_MUTE 4
// Functies
float controleerTemperatuurInC(); // Functie geeft iets terug
void checkTemperatuur();
void alarm();
void checkMuteButton();
void bepaalstatus();
// Variabelen
float temp = 10;
unsigned long startMute;
bool buzzerMuter = 0;
byte koelKastStatus = 1;
void setup() {
Serial.begin(115200);
pinMode(PIN_BUZZER, OUTPUT);
pinMode(PIN_TEMPSENSOR, INPUT);
pinMode(PIN_DEURSENSOR, INPUT);
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_RESETKNOP, INPUT);
}
void loop() {
Serial.println("");
Serial.print("status = ");
Serial.print(koelKastStatus);
/*Serial.print(" temp = ");
Serial.print(temp);
Serial.print(" Buzzer tijd = ");
Serial.print(millis() - startMute);*/
checkTemperatuur();
switch (koelKastStatus) {
case DEUR_DICHT:
digitalWrite(PIN_LED, LOW);
digitalWrite(PIN_BUZZER, LOW);
bepaalstatus();
break;
case DEUR_OPEN_OK:
digitalWrite(PIN_LED, HIGH);
digitalWrite(PIN_BUZZER, LOW);
checkTemperatuur();
bepaalstatus();
break;
case DEUR_OPEN_ALARM:
digitalWrite(PIN_LED, HIGH);
digitalWrite(PIN_BUZZER, HIGH);
alarm();
checkTemperatuur();
checkMuteButton();
bepaalstatus();
break;
case DEUR_OPEN_MUTE:
digitalWrite(PIN_LED, HIGH);
digitalWrite(PIN_BUZZER, LOW);
checkTemperatuur();
checkMuteButton();
bepaalstatus();
break;
default:
break;
}
}
void bepaalstatus() {
if (digitalRead(PIN_DEURSENSOR) == 0) { //als deur dicht, dan status = deur dicht
koelKastStatus = DEUR_DICHT;
}
else { //dus de deur staat open
if (temp < ALARM_TEMP) { //en temperatuur is in alarm
koelKastStatus = DEUR_OPEN_OK;
}
else { //en de buzzermuter is niet aktief, dan deur open, alarm
if (buzzerMuter == 0) {
koelKastStatus = DEUR_OPEN_ALARM;
}
else { //en de buzzer muter is wel aktief: dan deur open, mute
koelKastStatus = DEUR_OPEN_MUTE;
}
}
}
};
void checkMuteButton() {
/*Serial.print( "resetknop = ");
Serial.print (digitalRead(PIN_RESETKNOP));*/
if (buzzerMuter == 0) { //buzzerMuter is nul, dan wordt alarm doorgelaten
if (digitalRead(PIN_RESETKNOP) == 0) { //knop ingedrukt? dan resetknop = 0
while (digitalRead(PIN_RESETKNOP) == 0) {//reset knop moet eerst losgelaten worden voor chrone start
delay(100);
}
startMute = millis();
buzzerMuter = 1; //start de chrono en laat het alarm stoppen
}
}
else {
if ((millis() - startMute) > BUZZER_TIJD) {
buzzerMuter = 0; // na Buzzer_tijd wordt het alarm terug doorgelaten
}
}
}
void alarm() { //maak pieptoon van 1400 Hz gedurende 100 millis
tone(PIN_BUZZER, 1400, 100);
}
void checkTemperatuur() {
temp = controleerTemperatuurInC();
}
float controleerTemperatuurInC() {
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
return 1 / (log(1 / (1023. / analogRead(A0) - 1)) / BETA + 1.0 / 298.15) - 273.15;
}