Hallo zusammen!
Das ist mein erster Post, also seid gnädig mit mir, wenn dieser Post oder auch der Code "holprig" sind.
Mein 11-jähriger Sohn hat zu Weihnachten unbedingt ein Arduino Starterset haben wollen und auch bekommen. Das letzte Mal, dass ich irgendwas programmiert habe, war vor ca. 25 Jahren im Studium, muss mich da also gerade mit ihm zusammen reinwurschteln.
Nach den ersten nachgebauten Tutorials will er nun eine Pflanzenbewässerung für 2 Pflanzen bauen. Wir habe das ganze in Teilen Relais ansteuern, Fühler auslesen, Fühlerwert auf deriellem Monitor und LCD Display ausgeben) gebaut und programmiert, und heute alles zusammengefügt.
Wenn einer der Feuchtefühler einen Schwellenwert (hier mal testweise 510) überschreitet, soll das dazugehörige Relais schalten.
Über Bewässerungsdauer etc und Abfrageintervalle machen wir uns später Gedanken...
Das Programm und unsere Schaltung funktioniert, wie gewünscht, aber nur an den digitalen Ausgängen 2&3 oder höher.
Nun haben wir folgendes Problem:
Schreibe ich das Programm um, auf Ausgänge 0&1, zieht Relais 1 nicht an und Relais 2 schaltet dauerhaft hin und her.
Kann man nicht gleichzeitig digitale Eingänge und Ausgänge mit der gleichen Ziffer nutzen?
Hier der Code:
// Kalibrieren der Erdfeuchtefühler
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//-----Hardware Adressierung-----
LiquidCrystal_I2C lcd(0x27,16,2);
// Definition der analogen Eingänge
#define Fuehler1 A0 //analoger Eingang 0 bekommt den Namen Fuehler1
#define Fuehler2 A1 //analoger Eingang 1 bekommt den Namen Fuehler2
void setup() {
// Seriellen Monitor starten
Serial.begin(9600);
// LCD 16x2 initialisieren
lcd.init();
pinMode (A0, INPUT);
pinMode (A1, INPUT);
pinMode (2, OUTPUT); //digitaler Ausgang Relais1 wird als Ausgabekanal definiert
pinMode (3, OUTPUT); //digitaler Ausgang Relais2 wird als Ausgabekanal definiert
digitalWrite(0,HIGH); //digitaler Ausgang Relais1 wird zum Start auf HIGH gesetzt, d.h. Relais ist ausgeschaltet
digitalWrite(3,HIGH); //digitaler Ausgang Relais2 wird zum Start auf HIGH gesetzt, d.h. Relais ist ausgeschaltet
}
void loop() {
// Analoge Eingänge auslesen
int Messwert1 = analogRead(A0); //der analoge Wert von Fuehler1 wird ausgelesen (max 1023)
int Messwert2 = analogRead(A1); //der analoge Wert von Fuehler1 wird ausgelesen (max 1023)
// Schreibt den Messwert auf den seriellen Monitor
Serial.print("Messwert1: ");
Serial.println(Messwert1);
Serial.print("Messwert2: ");
Serial.println(Messwert2);
lcd.backlight();
//Nachricht ausgeben
lcd.setCursor(0,0); //setzt den Cursor an die 1. Stelle der 1. Zeile des Displays
lcd.print("Fuehler 1: "); //schreibt das Wort "Fuehler1:" an diese Stelle
lcd.setCursor(11,0); //setzt den Cursor an die 11. Stelle der 1. Zeile des Displays
lcd.print(Messwert1); //schreibt den Messwert von Fühler1 an diese Stelle
lcd.setCursor(0,1); //setzt den Cursor an die 1. Stelle der 2. Zeile des Displays
lcd.print("Fuehler 2: "); //schreibt das Wort "Fuehler2:" an diese Stelle
lcd.setCursor(11,1); //setzt den Cursor an die 11. Stelle der 2. Zeile des Displays
lcd.print(Messwert2); //schreibt den Messwert von Fühler2 an diese Stelle
if (Messwert1 > 510) //wenn der Messwert von Fühler1 über 510 ist
{
digitalWrite(2,LOW); //wird das Relais1 eingeschaltet
}
if (Messwert1 <= 510) //wenn der Messwert von Fühler1 kleiner oder gleich 510 ist
{
digitalWrite(2,HIGH); //wird das Relais1 ausgeschaltet
}
if (Messwert2 > 510) //wenn der Messwert von Fühler2 über 510 ist
{
digitalWrite(3,LOW); //wird das Relais2 eingeschaltet
}
if (Messwert2 <= 510) //wenn der Messwert von Fühler2 kleiner oder gleich 510 ist
{
digitalWrite(3,HIGH); //wird das Relais2 ausgeschaltet
}
delay(5000);
}
Ich hoffe, Ihr versteht meine Frage und danke schon mal für Eure Mithilfe!
Grüße, Billa