Hallo zusammen,
habe dank agmue jetzt alles soweit das die Dosierung funktioniert auch das Display ist eingebunden und gibt den entsprechenden Text aus, ob das so in der Art und Weise gut ist? was denkt Ihr den.
Als nächstes möchte ich gerne einen Zähler einbauen, der die Gesammtanzahl der aufgerufen Rezepte zählt und Speichert aber auch für jedes Rezept.
Die Werte sollen auch nach dem Ein und Ausschalten gepeichert bleiben, erst nach einem Gewolltem Reset alles auf Null setzt.
Ich habe das "DS3231 Real Time Clock" Modul aus dem Aruino Set, kann ich das dafür verwenden?
Wie baue ich das überhaupt auf?
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x3F // <<----- Add your address here. Find it from I2C Scanner
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
const int Anzahl_Rezepte = 9; // anzahl Rezepte
const int Anzahl_Zutaten = 12; // anzahl zutaten
const int Anzahl_Buchstaben = 16; // zwei zeilen Display
const int Anzahl_Buchstaben = 20; // vier zeilen Display
//Cocktailnamen
const char Cocktail[Anzahl_Rezepte][Anzahl_Buchstaben] = {
{"Long Island Ice."},{"Pina Colada"},{"Gin Tonic"},
{"Cuba Libre"},{"Cuban Ice Tea"},{"Zombie"},
{"Averna"},{"Touch Down"},{"frei"}
};
const unsigned long Rezept[Anzahl_Rezepte][Anzahl_Zutaten] = {
{ 0 , 3000, 3500, 4000, 4000, 3000, 0, 0, 0, 0, 0,4000}, // Long Island Ice Tea
{ 1000, 1000, 1000, 1000, 1000, 1000, 500, 1000, 2000, 2000, 2000, 4000}, // Pina Colade
{ 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // Gin Tonic (John Tinnic)
{ 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // Cuba Libre (Setfan)
{ 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // Cuban Ice Tea
{ 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // Zombie
{ 3000, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // Averna
{ 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // Touch Down
{ 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} // frei
};
// Taster
const int Taster[Anzahl_Rezepte] = {A0, A1, A2, A3, A4, A5,A6, A7, A8};
// Ventile
// neu mit PMW --> const int Ventil[Anzahl_Zutaten] = {2, 3, 4, 5, 6, 7, 22, 23, 24, 25, 26, 27};
const int Ventil[Anzahl_Zutaten] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
boolean Dosierungaktiv = false;
unsigned long StartZeit;
int Rezept_Nr;
// neu mit PMW
//bool PumpenVentilZustand[Anzahl_Zutaten] = {false, false, false, false, false, false, false, false, false, false, false, false};
//byte pwmwert[] = {210, 60, 70, 255, 100, 50};
//
void setup() {
Serial.begin(9600);
lcd.begin (16,2); // <<----- LCD 16x2
//lcd.begin (20,4); // <<----- LCD 20x4
for (int i = 0; i < Anzahl_Rezepte; i++) {
pinMode(Taster[i], INPUT);
digitalWrite(Taster[i], HIGH);
}
for (int i = 0; i < Anzahl_Zutaten; i++) {
pinMode(Ventil[i], OUTPUT);
}
Start();
//
for (int i = 0; i < Anzahl_Zutaten; i++) digitalWrite(Ventil[i], LOW);
//
}
void loop() {
if (!Dosierungaktiv) { // Wenn keine Dosierung, dann Taster abfragen
for (int i = 0; i < Anzahl_Rezepte; i++) {
if (analogRead(Taster[i]) < 512) { // Wenn Taster gedrückt wurden,
Rezept_Nr = i; // Ausgewähltes Rezept merken,
StartZeit = millis(); // Zeit merken,
Serial.print("\nRezept_Nr: "); Serial.print(Rezept_Nr);
//Start(i);
lcd.clear();
lcd.setCursor (0,0);
lcd.print(Cocktail[i]);
lcd.setCursor (0,1);
lcd.print("wird Zubereitet");
for (int z = 0; z <= Anzahl_Zutaten; z++) { // Dosierung Ventil i starten
digitalWrite(Ventil[z], HIGH);
}
Dosierungaktiv = true; // und Status setzen.
}
}
} else { // Solange Dosierung aktiv
for (int i = 0; i < Anzahl_Zutaten; i++) { // für jede Zutat abfragen,
unsigned long currentMillis = millis();
if ( currentMillis - StartZeit > Rezept[Rezept_Nr][i]) { // ob die Dosierzeit abgelaufen ist
digitalWrite(Ventil[i], LOW);
}
}
boolean DosierungAus = true;
for (int i = 0; i < Anzahl_Zutaten; i++) { // Wenn alle Ventile abgeschalten sind
DosierungAus = DosierungAus && !digitalRead(Ventil[i]);
}
if (DosierungAus) {
Dosierungaktiv = false; // Status zurücksetzen
Rezeptwael();
}
}
} // end loop()a
void Rezeptwael(){
lcd.clear();
delay (1000);
lcd.setCursor (1,0);
lcd.print("Bitte Cocktail");
lcd.setCursor (4,1);
lcd.print("waehlen");}
void Start(){
// Hintergrundbeleuchtung
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(LOW);
delay (2000) ;
lcd.setBacklight(HIGH);
lcd.home ();
lcd.clear();
lcd.setCursor (5,0);
lcd.print("A B C");
lcd.setCursor (1,1);
lcd.print("Modell: xxx");
delay (3000) ;
lcd.setCursor (1,1);
lcd.print("wird gestertet");
delay (4000) ;
Rezeptwael();
}
void Start(int &Cocktail){
}