Hallo, wie versprochen melde ich mich hier nochmals.
Ich habs jetzt soweit hinbekommen. Jedoch muss ich vor jeder eigentlichen Ausgabe, beide Zeile à 16 Zeichen komplett mit Leerzeichen löschen, ansonsten funktionierts irgendwie nicht. ::)
Um jetzt nicht das ganze Forum Vollzuspamen, werde ich meine nächste Frage gleich hier reinposten, ich hoffe das ist in Ordnung.
Mein Einsteiger-Projekt ist ein automatisiertes Bewässerungssystem, welches eine (12V) Pumpe automatisch, je nach Wert der Bodenfeuchtigkeitssensoren an-oder ausschaltet.
Das funktioniert soweit alles Tiptop und ich verstehe Hardware - sowie auch Softwaretechnisch auch warum.
Nur habe ich wohl einen kleinen Logikfehler in meinem Sketch (oder in meiner Verkabelung):
Jedes Mal, wenn ich den Arduino (Uno) neu starte (oder den Sketch update), geht automatisch die Pumpe an, bis die Daten der Sensoren ausgewertet sind und der Arduino "erkennt", dass die Erde in Ordnung ist.
Frage: Wie unterbinde ich das automatische Einschalten der Pumpe bei einem Neustart/Einschalten des Arduino ? Rein von der Logik her im Sketch, müsste er ja als erstes die Sensoren auswerten, und dann entscheiden ob die Pumpe gestartet wird oder nicht ? :fearful:
Die Pumpe wird übrigens über ein Relay eingeschaltet welches NO angeschlossen ist (Weshalb ich das einschalten der Pumpe am Anfang auch nicht verstehe..)
Vielen Dank für Eure Hilfe! Anbei noch der Sketch (Steinigt mich nicht..):
//Lcd-Library einbinden//
#include
//Werte vom Bodenfeuchtigkeitssensor://
//0~300 Zu trockene Erde, giessen.
//300~700 Erde in Ordnung, nicht giessen.
//700~950 Erde nass.
//Pumpe-Relais definieren (Digital-Pin 13)//
#define Pumpe 13
//Feuchtesensor Variablen definieren//
int feuchteSensor1 = 0;
int feuchteSensor1_val;
int feuchteSensor2 = 1;
int feuchteSensor2_val;
//Lcd initialisieren / Pins festlegen//
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//Pins festlegen - Lcd-begin//
void setup() {
pinMode (Pumpe, OUTPUT);//Pumpe-Pin
Serial.begin (9600);//Serial-Begin
lcd.begin(16, 2);//Lcd-begin
}
// Sensoren auslesen//
void loop () {
feuchteSensor1_val = analogRead(feuchteSensor1); //Feuchtesensor-Wert 1 auslesen
Serial.print("Lese Feuchtesensor 1 - Daten aus: ");
Serial.println( feuchteSensor1_val );
delay(2000);
lcd.setCursor(0, 0);//Lcd loeschen
lcd.print(" ");//Lcd loeschen
lcd.setCursor(0, 1);//Lcd loeschen
lcd.print(" ");//Lcd loeschen
delay(100);
lcd.setCursor(0, 0);//Sensordaten auf Lcd ausgeben
lcd.print("Messe Erde:");
lcd.setCursor(0, 1);
lcd.print("Sensor 1:");
lcd.setCursor(10, 1);
lcd.print(feuchteSensor1_val);
delay(3000);
feuchteSensor2_val = analogRead(feuchteSensor2);//Feuchtesensor-Wert 2 auslesen
Serial.print("Lese Feuchtesensor 2 -Daten aus: ");
Serial.println( feuchteSensor2_val );
delay(2000);
lcd.setCursor(0, 0);//Lcd loeschen
lcd.print(" ");//Lcd loeschen
lcd.setCursor(0, 1);//Lcd loeschen
lcd.print(" ");//Lcd loeschen
delay(100);
lcd.setCursor(0, 0); //Sensordaten auf Lcd ausgeben
lcd.print("Messe Erde:");
lcd.setCursor(0, 1);
lcd.print("Sensor 2: ");
lcd.setCursor(10, 1);
lcd.print(feuchteSensor2_val);
delay(3000);
//Pumpe anhand von Messergebnissen an / oder ausschalten//
if (feuchteSensor1_val < 250 && feuchteSensor2_val < 250) //Wenn Sensor1 & Sensor2 Wert unter 300 - Starte Bewässerung!
{
lcd.setCursor(0, 0);//Lcd loeschen
lcd.print(" ");//Lcd loeschen
lcd.setCursor(0, 1);//Lcd loeschen
lcd.print(" ");//Lcd loeschen
delay(100);
lcd.setCursor(0, 0);//Auf Lcd ausgeben
lcd.print("Erde zu trocken:");
lcd.setCursor (0,1);
lcd.print("Pumpe ist an!");
Serial.println("Erde zu trocken, starte Giessvorgang!");
digitalWrite (Pumpe, LOW); //Pumpe Starten
delay(1000);
}
if (feuchteSensor1_val > 250 && feuchteSensor2_val > 250) //Wenn Sensor1 und Sensor2 Wert über 300 - Keine Bewässerung!
{
lcd.setCursor(0, 0);//Lcd loeschen
lcd.print(" ");//Lcd loeschen
lcd.setCursor(0, 1);//Lcd loeschen
lcd.print(" ");//Lcd loeschen
delay(100);
lcd.setCursor(0, 0);
lcd.print("Erde in Ordnung:");
lcd.setCursor(0, 1);
lcd.print("Pumpe ist aus! ");
Serial.println("Erde in Ordnung, keine Bewaesserung noetig!"); //Pumpe abschalten oder abgeschaltet lassen
digitalWrite (Pumpe, HIGH);
delay(5000);
}
else //alle anderen Werte (z.b ein Sensor unter 300, aber anderer Sensor über 300)
{
lcd.setCursor(0, 0);//Lcd loeschen
lcd.print(" ");//Lcd loeschen
lcd.setCursor(0, 1);//Lcd loeschen
lcd.print(" ");//Lcd loeschen
lcd.setCursor(0, 0);
lcd.print(" ");//Lcd loeschen
lcd.print("Erde in Ordnung:");
lcd.setCursor(0, 1);
lcd.print("Pumpe ist aus! ");
Serial.println("Erde in Ordnung, keine Bewaesserung noetig!"); //Pumpe abschalten oder abgeschaltet lassen
digitalWrite (Pumpe, HIGH);
delay(5000);
}
}