//Bibliotheken
#include "ButtonFunction.h"
#include "VertraagFunctie.h"
#include <LiquidCrystal_I2C.h>
//Defineer de input, output pinnen
#define PIN_MOTOR 4 //Verbonden met compressormotor
#define PIN_TEMPSENSOR A0 //Verbonden met DS18B20 uitgang
#define PIN_RESTKNOP 5 //Verbonden met resetknop
#define PIN_DEURSENSOR 6 //Verbonden met deur schakelaar
#define PIN_LED 7 //Verbonden met LED
#define PIN_BUZZER 8 //Verbonden met buzzer
#define PIN_VERLICHTING 9 //Verbonden met binnenverlichting
//Defineer lieten en instelwaarden
#define MAX_AFWIJKING 0.5 //Maximale afwijking temperatuur
#define TEMP_KOELKAST 5 //Temparatuur koelkast normale werking
#define TEMP_DEURALARM 9 //Temparatuur deuralarm
#define TEMP_KOELKAST_ALARM 7 //Temparatuur koelkast alarm
#define KNIPPERTIJD 200 //Is de aan en uit tijd van de LED
#define WACHTTIJDRESET 10000 //Wachttijd na resetknop gedrukt
#define WACHTTIJDMETING 1000 //Meettijd tussen 2 metingen
#define INSTELWACHTTIJD 5000
//Maak objecten aan
ButtonFunction resetButton; //Resetknop antidender
ButtonFunction deurschakelaar; //Deurschakelaar antidender
VertraagFunctie knipperLED; //Vertraging LED aan, uit
VertraagFunctie knipTijdVoorbij; //Meet tijd na resetknop is gedrukt
VertraagFunctie meetTijdTemp; //Meet tijd tussen 2 metingen
VertraagFunctie instelFunctieTijd;
LiquidCrystal_I2C lcd(0x27, 16, 2); //Geeft info weer
//Functies
void meetTemperatuur(); //Deze functie meet de temperatuur
void knipperendeLed(); //Laad LED knipperen in geval van temperatuur alarm
void resetKnopGedrukt(); //Stop deuralarm for x seconden
void knipperTijd(); //Laat LED van temperatuuralrm 10 seconden knipperen in geval deuralarm is gereset
void instelFunctie();
//Variablen
float gemetenTemp; //Gemeten temperatuur in °C
volatile bool resetKnopGedr = false; //True als knop is ingedrukt
volatile bool instelFunctieActief = false;
byte degree[] = { //Creert ° symbool
B01100,
B10010,
B01100,
B00000,
B00000,
B00000,
B00000,
B00000
};
void setup() {
Serial.begin(115200);
pinMode(PIN_TEMPSENSOR, INPUT);
pinMode(PIN_DEURSENSOR, INPUT);
pinMode(PIN_RESTKNOP, INPUT);
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_BUZZER, OUTPUT);
pinMode(PIN_MOTOR, OUTPUT);
pinMode(PIN_VERLICHTING, OUTPUT);
resetButton.initButton(false, PIN_RESTKNOP, false);
deurschakelaar.initButton(false, PIN_DEURSENSOR, false);
knipperLED.vertraagBegin(KNIPPERTIJD);
knipTijdVoorbij.vertraagBegin(WACHTTIJDRESET);
meetTijdTemp.vertraagBegin(WACHTTIJDMETING);
instelFunctieTijd.vertraagBegin(INSTELWACHTTIJD);
meetTemperatuur();
lcd.begin(16, 2, LCD_5x8DOTS);
lcd.createChar(0, degree);
lcd.setCursor(0, 0);
lcd.print("Setup done!");
lcd.setCursor(0, 1);
lcd.print("Temp: " + String(gemetenTemp, 1) + char(0) + "C");
delay(3000);
lcd.clear();
Serial.println("Setup gedaan!");
}
void loop() {
meetTijdTemp.vertaagControleer(meetTemperatuur);
if (gemetenTemp >= TEMP_KOELKAST + MAX_AFWIJKING) {
digitalWrite(PIN_MOTOR, HIGH);
}
if (gemetenTemp <= TEMP_KOELKAST - MAX_AFWIJKING) {
digitalWrite(PIN_MOTOR, LOW);
}
if (digitalRead(PIN_DEURSENSOR) == true) {
digitalWrite(PIN_VERLICHTING, HIGH);
resetButton.checkButton(resetKnopGedrukt);
if (gemetenTemp >= TEMP_DEURALARM) {
if (resetKnopGedr == true) {
knipperLED.vertaagControleer(knipperendeLed);
} else {
digitalWrite(PIN_LED, HIGH);
tone(PIN_BUZZER, 262, 250);
}
knipTijdVoorbij.vertaagControleer(knipperTijd);
} else {
digitalWrite(PIN_LED, LOW);
}
} else {
digitalWrite(PIN_VERLICHTING, LOW);
if (gemetenTemp >= TEMP_KOELKAST_ALARM) {
knipperLED.vertaagControleer(knipperendeLed);
} else {
digitalWrite(PIN_LED, LOW);
}
resetKnopGedr = false;
}
}
//Gemeten temperatuur in °C
void meetTemperatuur() {
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
gemetenTemp = 1 / (log(1 / (1023. / analogRead(PIN_TEMPSENSOR) - 1)) / BETA + 1.0 / 298.15) - 273.15;
lcd.setCursor(0, 0);
lcd.print("Temp: " + String(gemetenTemp, 1) + char(0) + "C ");
}
//Laad LED knipperen in geval van temperatuur alarm
void knipperendeLed() {
digitalWrite(PIN_LED, !digitalRead(PIN_LED));
}
//Stop deuralarm for x seconden
void resetKnopGedrukt() {
resetKnopGedr = true;
}
//Laat LED van temperatuuralrm 10 seconden knipperen in geval deuralarm is gereset
void knipperTijd() {
resetKnopGedr = false;
}