#include "button.h"
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
//Display Objekt erstellen
//Pin A4 = SDA
//Pin A5 = SCL
//I2C Adresse 0x27, 16x2 Zeichen
LiquidCrystal_I2C lcd(0x27,16,2);
//Servo Objekte erstellen
Servo servo_one;
Servo servo_two;
Servo servo_three;
//Positionen der Servos in Konstante speichern
const uint8_t pos_close = 0;
const uint8_t pos_open = 180;
//Button Objekte erstellen
Button snack1;
Button snack2;
Button snack3;
Button rfid;
//Variable welche Auswahl getroffen wurde
uint8_t choise = 0;
//timeout für das Display und die Auswahl in Millisekunden (Konstant)
const int period = 5000;
//momentane Zeit
unsigned long time_now = 0;
//setup läuft einmal beim Start
void setup() { //SETUP START
servo_one.attach(10); //Servo 1 hinzufügen an Pin 10
servo_one.write(pos_close); //Servo 1 auf Startposition setzen
servo_two.attach(11); //Servo 2 hinzufügen an Pin 11
servo_two.write(pos_close); //Servo 2 auf Startposition setzen
servo_three.attach(12); //Servo 3 hinzufügen an Pin 12
servo_three.write(pos_close); //Servo 3 auf Startposition setzen
lcd.init(); //LCD: initialisieren
welcome_screen(); //Willkommen Funktion ausführen, siehe unten
snack1.begin(4); //Button Snack 1, Pin 4, initialisieren
snack2.begin(5); //Button Snack 2, Pin 5, initialisieren
snack3.begin(6); //Button Snack 3, Pin 6, initialisieren
rfid.begin(7); //Button RFID, Pin 7, initialisieren
} //SETUP ENDE
//loop läuft als Schleife
void loop() { //LOOP START
if (snack1.debounce()) { //WENN Button 1 gedrückt dann
time_now = millis(); //Timer zurücksetzen
snack_one(); //Funktion snack_one ausführen
} //WENN ENDE
if (snack2.debounce()) { //WENN Button 2 gedrückt dann
time_now = millis(); //Timer zurücksetzen
snack_two(); //Funktion snack_two ausführen
} //WENN ENDE
if (snack3.debounce()) { //WENN Button 3 gedrückt dann
time_now = millis(); //Timer zurücksetzen
snack_three(); //Funktion snack_three ausführen
} //WENN ENDE
if (rfid.debounce()) { //WENN Button 4 gedrückt dann
time_now = millis(); //Timer zurücksetzen
rfid_check(); //Funktion snack_three ausführen
} //WENN ENDE
if(millis() > time_now + period){ //WENN millis (interner Arduino Zähler) GRÖßER als Zeit jetzt + timeout
lcd.clear(); //LCD: Inhalt löschen
lcd.noBacklight(); //LCD: Beleuchtung ausschalten
choise = 0; //Variable für Auswahl zurücksetzen auf 0
} //WENN ENDE
} //LOOP ENDE
//Funktionen
void snack_one(){ //FUNKTION START
lcd.backlight(); //LCD: Beleuchtung einschalten
lcd.clear(); //LCD: Inhalt löschen
lcd.setCursor(4,0); //LCD: Cursor auf Stelle 5 Reihe 1 setzen
lcd.print(F("Snickers")); //LCD: Text anzeigen
choise = 1; //Variable für Auswahl auf 3 setzen
} //FUNKTION ENDE
void snack_two(){ //FUNKTION START
lcd.backlight(); //LCD: Beleuchtung einschalten
lcd.clear(); //LCD: Inhalt löschen
lcd.setCursor(6,0); //LCD: Cursor auf Stelle 7 Reihe 1 setzen
lcd.print(F("Twix")); //LCD: Text anzeigen
choise = 2; //Variable für Auswahl auf 2 setzen
} //FUNKTION ENDE
void snack_three(){ //FUNKTION START:
lcd.backlight(); //LCD: Beleuchtung einschalten
lcd.clear(); //LCD: Inhalt löschen
lcd.setCursor(6,0); //LCD: Cursor auf Stelle 7 Reihe 1 setzen
lcd.print(F("Mars")); //LCD: Text anzeigen
choise = 3; //Variable für Auswahl auf 3 setzen
} //FUNKTION ENDE
void rfid_check(){ //FUNKTION START
lcd.backlight(); //LCD: Beleuchtung einschalten
if (choise == 0){ //WENN Auswahl = 0 DANN
lcd.clear(); //LCD: Inhalt löschen
lcd.setCursor(2,0); //LCD: Cursor auf Stelle 3 Reihe 1 setzen
lcd.print(F("Bitte Auswahl")); //LCD: Text anzeigen
lcd.setCursor(4,1); //LCD: Cursor auf Stelle 5 Reihe 2 setzen
lcd.print(F("treffen")); //LCD: Text anzeigen
}
if (choise == 1){ //WENN Auswahl = 1 DANN
choise = 0; //Auswahl = 0
servo_one.write(pos_open); //Servo 1 auf Position offen setzen
delay(500); //PAUSE 500 Millisekunden
servo_one.write(pos_close); //Servo 1 auf Position geschlossen setzen
bon_appetit(); //Funktion bon_appetit ausführen
}
if (choise == 2){ //WENN Auswahl = 2 DANN
choise = 0;
servo_two.write(pos_open); //Servo 2 auf Position offen setzen
delay(500); //PAUSE 500 Millisekunden
servo_two.write(pos_close); //Servo 2 auf Position geschlossen setzen
bon_appetit(); //Funktion bon_appetit ausführen
}
if (choise == 3){ //WENN Auswahl = 3 DANN
choise = 0;
servo_three.write(pos_open); //Servo 3 auf Position offen setzen
delay(500); //PAUSE 500 Millisekunden
servo_three.write(pos_close); //Servo 3 auf Position geschlossen setzen
bon_appetit(); //Funktion bon_appetit ausführen
}
} //FUNKTION ENDE
void welcome_screen(){ //FUNKTION START
lcd.clear(); //LCD: leeren
lcd.backlight(); //LCD: Beleuchtung einschalten
lcd.setCursor(4,0); //LCD: Cursor auf Stelle 5 Reihe 1
lcd.print(F("Herzlich")); //LCD: Text anzeigen
lcd.setCursor(3,1); //LCD: Cursor auf Stelle 4 Reihe 2
lcd.print(F("Willkommen")); //LCD: Text anzeigen
delay(500); //PAUSE 500 Millisekunden
lcd.clear(); //LCD: leeren
lcd.setCursor(2,0); //LCD: Cursor auf Stelle 3 Reihe 1
lcd.print(F("Bitte Auswahl")); //LCD: Text anzeigen
lcd.setCursor(4,1); //LCD: Cursor auf Stelle 5 Reihe 2
lcd.print(F("treffen")); //LCD: Text anzeigen
} //FUNKTION ENDE
void bon_appetit(){ //FUNKTION START
lcd.clear(); //LCD: leeren
lcd.setCursor(5,0); //LCD: Cursor auf Stelle 6 Reihe 1
lcd.print("Guten"); //LCD: Text anzeigen
lcd.setCursor(4,1); //LCD: Cursor auf Stelle 5 Reihe 2
lcd.print("Appetit"); //LCD: Text anzeigen
} //FUNKTION ENDE