Hallo zusammen,
irgendwie hänge ich gedanklich fest...
Alle, z.B. 7-8std soll etwas für z.B. 15min angehen, soweit kein Problem.
Aber wenn es dann an ist, soll etwas anderes für z.B. 3min angehen, und dann ausbleiben, bis die 3std wieder vorbei sind.
Hintergrund:
Alle z.B. 3std schaltet der Arduino für ca 15min via SSR 230V ein, an denen ein Ladegerät für eine Powerbank und ein Trafo für eine kleine Pumpe hängt. Ich möchte nicht die ganze Zeit den Trafo ungenutzt unter Spannung halten.
Wenn dann die 3std vorbei sind, also alles Spannung hat, auch der 12V Trafo, sollen 4 Bodenfeuchtesensoren eingelesen werden, und bei Bedarf die Pumpe (via IRLZ) für eine definierte Zeit (z.B. 3 min) laufen.
Wenn die 3min vorbei sind, soll die Messung NICHT mehr ausgeführt werden, bis wiederum die 3std vorbei sind, und 5V und 12V wieder eingeschaltet sind.
In den "restlichen 12min wird dann einfach nur die kleine Powerbank geladen.
Ich hoffe, ich konnte halbwegs nachvollziehbar erklären, was die Schaltung machen soll?
Die Zeiten stimmen natürlich nicht, sondern sind wesentlich kürzer, damit ich alles schnell an 2 LED's sehen kann.
Ich habe diverse Versuche in Anlehnung an Blink without delay gemacht, die kläglich gescheitert sind, daher fehlt dieser Teil im Programm z.Zt. völlig.
Ich möchte das Messen und ggf pumpen gerne in ein Unterprogramm packen, welches dann, wenn die 15min beginnen, aufgerufen wird.
Messen und Mittelwert bilden habe, das ist kein Problem. Es würde mir reichen, einen Anfänger-lesbaren Tipp zu bekommen, für die "PumpZeit" LED2 einzuschalten, und dass sie nicht nochmal in der "AnZeit" aufgerufen wird.
Besten Dank im Voraus
Basis ist folgender Code:
const byte led1 = 9; // pin
const byte led2 = 10; // pin
unsigned long previousMillis_1 = 0l;
unsigned long previousMillis_2 = 0l;
const unsigned long AnZeit = 5000l; //ms
const unsigned long Intervall = 10000l; //ms
const unsigned long PumpZeit = 2000l; //ms
void setup()
{
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
}
void loop()
{
if (millis() - previousMillis_1 > AnZeit)
{
digitalWrite(led1, LOW);
}
if (millis() - previousMillis_1 > Intervall)
{
previousMillis_1 = millis();
digitalWrite(led1, HIGH);
MeinProgramm();
}
}
void MeinProgramm() //Pseudocode
{
Messen,
If (MittelWert_Messungen < Schwelle)
{
PumpZeit pumpen
}