Hey Leute,
ich bin im moment dabei, für meine Gartenbewässerung und "Wasserwirtschaft" eine Steuerung zu entwickeln und die dazu notwendige Software zusammen zu bauen. Nur leider stoße ich schon relativ zu Beginn auf ein Problem.
Hier erstmal der Code:
#include "PCF8574.h"
PCF8574 m1(0x20);
PCF8574 m2(0x24);
// Ausgänge definieren
int Tank_1_100 = P0;
int Tank_2_025 = P1;
int Tank_2_050 = P2;
int Tank_2_100 = P3;
int Tank_IBC = P4;
int Reserve = P5; // Pin noch unbenutzt
int Tank_1_025 = P6;
int Tank_1_050 = P7;
// Eingänge definieren
int Pumpe_1 = P0;
int Pumpe_2 = P1;
int Ventil_1 = P2;
int IBC_Voll = P3;
int Reserve2 = P4; // Pin noch unbenutzt
int Voll_1 = P5;
int Voll_2 = P6;
int WLAN = P7;
// Zustände definieren
char z_Tank_1 = 0;
char z_Tank_2 = 0;
char z_Tank_IBC = 0;
void setup() {
Serial.begin (9600);
Serial.println ("Wassertanksteuerung");
m1.begin();
m2.begin();
// Ausgänge setzen
m1.pinMode(Pumpe_1, OUTPUT);
m1.pinMode(Pumpe_2, OUTPUT);
m1.pinMode(Ventil_1, OUTPUT);
m1.pinMode(IBC_Voll, OUTPUT);
m1.pinMode(Voll_1, OUTPUT);
m1.pinMode(Voll_1, OUTPUT);
m1.pinMode(WLAN, OUTPUT);
// Eingängesetzen
m2.pinMode(Tank_1_100, INPUT);
m2.pinMode(Tank_2_025, INPUT);
m2.pinMode(Tank_2_050, INPUT);
m2.pinMode(Tank_2_100, INPUT);
m2.pinMode(Tank_IBC, INPUT);
m2.pinMode(Tank_1_025, INPUT);
m2.pinMode(Tank_1_050, INPUT);
Serial.begin (9600);
Serial.println ("Wassertanksteuerung");
}
void loop() {
Sensoren_abfragen();
Serial.println("Empfange Daten");
Serial.println(z_Tank_1);
delay(1000);
}
void Sensoren_abfragen() {
if (m2.digitalRead(Tank_1_100) && m2.digitalRead(Tank_1_050) && m2.digitalRead(Tank_1_025)){
z_Tank_1 = 3;
}
if (!m2.digitalRead(Tank_1_100) && m2.digitalRead(Tank_1_050) && m2.digitalRead(Tank_1_025)){
z_Tank_1 = 2;
}
if (!m2.digitalRead(Tank_1_100) && !m2.digitalRead(Tank_1_050) && m2.digitalRead(Tank_1_025)){
z_Tank_1 = 1;
}
if (!m2.digitalRead(Tank_1_100) && !m2.digitalRead(Tank_1_050) && !m2.digitalRead(Tank_1_025)){
z_Tank_1 = 0;
}
}
Das Problem ist in der Funktion "Sensoren_abfragen". Mein Plan war es die Variable z_Tank_1 mit einem Wert zwischen 0 und 3 zu füllen, je nachdem welcher Zustand aktuell ansteht. Klar ich kann nur auf einen Wert abfragen, aber ich spiele mit dem Gedanken daran, falls mal ein Sensor "klemmt" oder so eine Fehlermeldung raus kommt. Sprich wenn Eingänge "Tank_1_025" und "Tank_1_100" HIGH sind, aber Eingang "Tank_1_050" LOW ist, dann ist irgendwas nicht richtig.
Noch zur Erklärung, der Eingang "Tank_1_100" gibt an, dass der Tank voll ist, "Tank_1_050" zu hälfte und "Tank_1_025" das er zu einem viertel gefüllt ist. Ich weiß nicht, ob ich das mir da ggf. zu einfach mache oder einfach zu kompliziert denke.
Nur zur Erklärung, sobald die Variable > 0 ist, soll parallel zur Anzeige eine Pumpe angehen um Wasser von Tank_1 in Tank_IBC um zu pumpen. Ich muss das Wasser leider umpumpen, da ich Tank_1 und Tank_IBC nicht direkt miteinander verbinden kann. Hängt baulich zusammen, falls jemand das wissen möchte.
Vielleicht kann mir jemand dabei helfen?
Michael
PS:
Das mit der Abfrage hatte ich mir zumindest so gedacht, da ein Digitaler Eingang ja nur HIGH oder LOW haben kann und über das ! wird dieser "invertiert", soweit ich das richtig verstanden habe. Vielleicht gibt es aber auch eine Möglichkeit das "schöner" zu gestalten, da eine identische Abfrage noch für Tank_2 ansteht.