Lieber Tommy56,
Danke für den Tipp mit dem +T! Das spart einem häufiges Leerzeichen- Drücken:D.
Danke auch für den Tipp mit der Pin- Vergabe, ich habe diese geändert.
Mit dem komischen Aussehen meine ich folgendes:
Bei "WAIT", sieht das ganze so aus (so wie es sein sollte):
Und bei "PLAY" sieht das ganze so aus (komisch):
Der Countdown erscheint übrigens garnicht mehr auf dem LCD. Kann mir jemand sagen wo der Fehler liegt?
Und hier der besser lesbare Code:
// LiquidCrystal Library
#include <LiquidCrystal.h>
int s = 60; // Wert für Variable s = 60
int m = 29; // Wert für Varaible m = 30
unsigned long timestore_Sekunden; // Variabler Speicher für Systemzeit
unsigned long timestore; // Variabler Speicher für Systemzeit
int KompressorStatus = LOW; //Kompressor is normally off
int KompressorPin = 2;
int VentilStatus = LOW; //Ventil is normally closed
int VentilPin = 3;
//initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
void setup() {
lcd.begin(16, 2);
pinMode (2, OUTPUT); //Kompressor
pinMode (3, OUTPUT); //Ventil
}
void loop() {
if (millis() - timestore > 1800000) {
timestore = millis();
}
// 1. Vorbereitungsphase: Kompressorkessel wird aufgefüllt. Das Kompressorventil ist geschlossen. Auf dem LCD wird während dieser Phase "WAIT" angezeigt.
if (KompressorStatus == LOW) { // wenn der Kompressor aus ist
if (millis() - timestore > 0) { // auf die Uhr sehen, ob die 0 Minuten schon rum sind, wenn ja
digitalWrite(KompressorPin, HIGH); // Kompressor einschalten
KompressorStatus = HIGH; // notieren, dass der Kompressor angeschaltet ist
}
} else { // wenn der Kompressor an ist
if (millis() - timestore > 300000) { // auf die Uhr sehen ob die 5 Minuten schon rum sind, wenn ja
digitalWrite (KompressorPin, LOW); // Kompressor ausschalten
KompressorStatus = LOW; // notieren, dass der Kompressor ausgeschaltet ist
lcd.clear();
// 2. Spielphase: Das Ventil ist geöffnet, dadurch wird das Spiel mit Druckluft versorgt. Während des Spiels wird auf dem LCD "PLAY" angezeigt.
digitalWrite (VentilPin, HIGH); // Ventil öffnen
VentilStatus = HIGH; // notieren, dass das Ventil geöffnet ist
} // wenn die 5 Minuten noch nicht rum sind: weitergehen
}
if (VentilStatus == HIGH) { // wenn das Ventil geöffnet ist
if (millis() - timestore > 600000) { // auf die Uhr sehen, 10 Minuten schon rum sind, wenn ja
digitalWrite(VentilPin, LOW); // Ventil öffnen
VentilStatus = LOW; // notieren, dass das Ventil geschlossen ist
lcd.clear();
}
}
// Spielpause: Jetzt soll der Countdown, der im Hintergrund abläuft auf dem LCD erscheinen. Ich habe den Countdown an eine if- Bedingung geknüpft, dass dieser nur auf dem LCD erscheint, wenn KompressorStatus und VentilStatus == LOW sind.
if (millis() - timestore_Sekunden > 1000) { // wenn eine Sekunde vergangen ist...
s = s - 1; // wird s um 1 dezimiert
timestore_Sekunden = millis(); // dann wird timestore_Sekunden = millis()
}
if (s == 0) { // wenn s bei 0 angekommen ist
s = 60; // wird s wieder 60
m = m - 1; // gleichzeitig wird m um eins dezimiert
}
if ( m == 0) { // wenn m bei 0 angekommen ist
m = 30; // wird m wieder 30
}
if (KompressorStatus == HIGH) { // während der Kompressor eingeschaltet ist wird "WAIT" auf dem LCD angezeigt
lcd.setCursor(0, 0); // Beginn beim ersten Zeichen in der ersten Zeile
lcd.print("WAIT"); // mit dem Text „WAIT“
}
if (VentilStatus == HIGH) { // während das Ventil geöffnet ist wird "PLAY" auf dem LCD angezeigt
lcd.setCursor(0, 0); // Beginn beim ersten Zeichen in der ersten Zeile
lcd.print("PLAY"); // mit dem Text „PLAY“
}
if (millis() - timestore_Sekunden > 600000 && millis() - timestore_Sekunden < 1800000 ) { // Wenn die 10 Minuten vergangen sind (in denen der Kompressor Druck aufgebaut hat (5 Minuten) und das Ventil geöffnet war (5 Minuten), dann...
lcd.setCursor(0, 0); // Startposition der Darstellung auf dem LCD festlegen. lcd.setCursor(0,0) bedeutet: Erstes Zeichen in der ersten Zeile.
lcd.print("time to next game:"); // Dort soll der Text „time to next game: “ erscheinen.
lcd.setCursor(0, 1); // Startposition der Darstellung auf dem LCD festlegen.
lcd.print(m); // Dort soll die variable m erscheinen.
lcd.print (":"); // dann der Text ":"
lcd.print(s); // dann s
}
}