#include <LiquidCrystal.h>
#include <SPI.h>
#include <MFRC522.h>
#include <MFRC522Extended.h>
#include <deprecated.h>
#include <require_cpp11.h>
// RFID-Modul definieren
#define SDA_PIN 50
#define SCK_PIN 51
#define MOSI_PIN 52
#define MISO_PIN 53
#define RST_PIN 2
// Pumpen-Pin-Array
int PumpPin[] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
// Flowmeter-Pin-Array
int FlowMeterPin[] = {21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38};
// LCD-Display Pins
#define RS_PIN 39
#define EN_PIN 40
#define D4_PIN 41
#define D5_PIN 42
#define D6_PIN 43
#define D7_PIN 44
MFRC522 rfid(SDA_PIN, SCK_PIN);
// LCD-Objekt initialisieren
LiquidCrystal lcd(RS_PIN, EN_PIN, D4_PIN, D5_PIN, D6_PIN, D7_PIN);
bool pumpenAktiv = false;
void setup() {
// RFID-Verbindung initialisieren
SPI.begin();
rfid.PCD_Init();
// LCD-Verbindung initialisieren
lcd.begin(16, 2);
// Schalter definieren
pinMode(45, INPUT_PULLUP);
lcd.print("Becher in Halter");
lcd.setCursor(0, 1);
lcd.print("& Karte auflegen");
// Pumpen-Pins als OUTPUT definieren
for (int i = 0; i < sizeof(PumpPin) / sizeof(PumpPin[0]); i++) {
pinMode(PumpPin[i], OUTPUT);
}
// Flowmeter-Pins als INPUT definieren
for (int i = 0; i < sizeof(FlowMeterPin) / sizeof(FlowMeterPin[0]); i++) {
pinMode(FlowMeterPin[i], INPUT);
}
}
void loop() {
// Wenn die Pumpen nicht aktiv sind, RFID-Tag auslesen
if (digitalRead(45) == LOW && !pumpenAktiv && rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
// ID des RFID-Tags auslesen
String cardId = "";
for (byte i = 0; i < rfid.uid.size; i++) {
cardId.concat(String(rfid.uid.uidByte[i] < 0x10 ? "0" : ""));
cardId.concat(String(rfid.uid.uidByte[i], HEX));
}
// Pumpen und Flowmeter aktivieren
if (cardId == "04311040730000") { // ID-Karte 1
digitalWrite(PumpPin[0], HIGH); // Pumpe 1 einschalten
lcd.setCursor(0, 0);
lcd.clear();
lcd.print("Bacardi cola ");
delay(5880 * 40); // Flowmeter für 40 ml laufen lassen
digitalWrite(PumpPin[0], LOW); // Pumpe 1 ausschalten
}
else if (cardId == "04ea143f730000") { // ID-Karte 2
digitalWrite(PumpPin[0], HIGH); // Pumpe 1 einschalten
lcd.setCursor(0, 0);
lcd.clear();
lcd.print("Long Island");
lcd.setCursor(0, 1);
lcd.print("Ice Tea !");
delay(5880 * 90); // Flowmeter für 90 ml laufen lassen
digitalWrite(PumpPin[0], LOW); // Pumpe 1 ausschalten
digitalWrite(PumpPin[2], HIGH); // Pumpe 2 einschalten
delay(5880 * 70); // Flowmeter für 70 ml laufen lassen
digitalWrite(PumpPin[2], LOW); // Pumpe 2 ausschalten
}
else if (cardId == "04c9383f730000") { // ID-Karte 3
digitalWrite(PumpPin[0], HIGH); // Pumpe 1 einschalten
digitalWrite(PumpPin[2], HIGH); // Pumpe 2 einschalten
digitalWrite(PumpPin[3], HIGH); // Pumpe 3 einschalten
lcd.setCursor(0, 0);
lcd.clear();
lcd.print("Tequila Sunrise 150ml");
delay(5880 * 150); // Flowmeter für 150 ml laufen lassen
digitalWrite(PumpPin[0], LOW); // Pumpe 1 ausschalten
digitalWrite(PumpPin[2], LOW); // Pumpe 2 ausschalten
digitalWrite(PumpPin[3], LOW); // Pumpe 3 ausschalten
}
lcd.clear();
lcd.print("Becher in Halter");
lcd.setCursor(0, 1);
lcd.print("& Karte auflegen");
// RFID-Verbindung beenden
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
// Überprüfen, ob Pumpen aktiv sind und den Flussmesser aktualisieren
if (pumpenAktiv) {
updateFlowMeter();
}
}
void updateFlowMeter() {
for (int i = 0; i < sizeof(FlowMeterPin) / sizeof(FlowMeterPin[0]); i++) {
int flow = digitalRead(FlowMeterPin[i]);
// Flowmeter-Werte verarbeiten und anzeigen
// Hier können Sie Ihre eigene Logik für die Verarbeitung und Anzeige der Flowmeter-Werte einfügen
}
}