if (Stunde == 0 && Minute == 0) {
// null
Serial.print("null");
}
if (Stunde == 1 && Minute == 0) {
// oans
Serial.print("oans");
}
if (Stunde == 2 && Minute == 0) {
// zwoa
Serial.print("zwoa");
}
if (Stunde == 3 && Minute == 0) {
// drei
Serial.print("drei");
}
if (Stunde == 4 && Minute == 0) {
Serial.print("viere");// viere
}
if (Stunde == 5 && Minute == 0) {
Serial.print("fünfe");// fünfe
}
// hier die Funktion die immer nur 1x laufen soll.
void SetFunk(){
//hier mein weiterer code
// der immer einmalig ausgeführt werden soll
}
Diese Abfragen laufen im Dauer Loop. Soweit alles gut.
Nun aber zum Problem. Wie man vielleicht erkennt, schaltet hier jede Stunde eine andere IF Schleife ein. Diese ist dann auch für 1 Stunde zutreffend.
Die Stunden berechne ich by the Way mit einer Millis() -Funktion, also kein Delay
Ich habe nun versucht, einmalig eine void SetFunk() aufzurufen, wenn der Code in eine IF Schleife eintritt.
Also jedes mal, wenn eine neue IF Schleife zutrifft soll exakt einmal die untenstehende Funktion ausgeführt werden.
Trifft die nächste IF zu, soll die Funktion wieder nur einmal durchlaufen werden.
Die If Abfragen sind ja immer genau 1 Stunde zutreffend, da erst nach 1 Stunde die nächste If zutrifft.
Leider finde ich einfach kein passenden Code. Habs mit Zählen versucht, mit Flanken, mit State-Änderungen und sogar mit mehreren entgegengesetzten Flanken.
Ich benutze häufig Flanken für einmalig ausführbare Dinge, jedoch ist das Problem leicht anders, da das ja immer wieder erneut einmalig ausgeführt werden muss und von mehreren "Parteien" aufgerufen wird (von den ganzen if schleifen).
Hat wer irgendeine Idee dazu? oder einen Denkanstoß? Wäre super dankbar
VG Franz
Und Hinweis: Du bist heute zum zweiten Mal verschoben worden - bitte gewöhne Dir an, das von vornherein zu vermeiden. Die Mods sind freiwillig unterwegs...
Thx @UKHeliBob
mach dir einen Merker.
merk dir im Merker die Stunde in der du etwas ausgeführt hast
Prüfe in deinen if Bedingungen auch auf die letzte gemerkte Stunde
Wie @my_xy_projekt schon geschrieben hat, weicht Deine Aussage
Diese ist dann auch für 1 Stunde zutreffend.
vom Sketch ab ... Wenn Du eine ganze Stunde lang mit maximaler Serial-Geschwindigkeit "oansoansoansoans..." auf dem Monitor sehen möchtest, könntest Du das so schreiben;
uint8_t lastStunde = 61;
uint8_t Stunde = 0;
void setup()
{
Serial.begin(115200);
Serial.println(F("Start..."));
}
void loop() {
if (lastStunde != Stunde) {
SetFunk();
lastStunde = Stunde;
}
switch (Stunde) {
case 0: Serial.print("null");
break;
case 1: Serial.print("oans");
break;
case 2: Serial.print("zwoa");
break;
case 3: Serial.print("drei");
break;
case 4: Serial.print("viere");
break;
case 5: Serial.print("fünfe");
break;
default:
break;
}
}
// hier die Funktion die immer nur 1x laufen soll.
void SetFunk() {
//hier mein weiterer code
// der immer einmalig ausgeführt werden soll
}
Soll die Uhrzeit auch nur einmal pro Stunde angezeigt werden, verschiebt man den switch(){} Anteil in die if-Bedingung, z.B. hinter lastStunde = Stunde;
So wie es oben steht (die erste Minute einer Stunde lang), sähe das so aus:
uint8_t lastStunde = 61;
uint8_t Stunde = 0;
void setup()
{
Serial.begin(115200);
Serial.println(F("Start..."));
}
void loop() {
if (lastStunde != Stunde) {
SetFunk();
lastStunde = Stunde;
}
if (minute == 0) {
switch (Stunde) {
case 0: Serial.print("null");
break;
case 1: Serial.print("oans");
break;
case 2: Serial.print("zwoa");
break;
case 3: Serial.print("drei");
break;
case 4: Serial.print("viere");
break;
case 5: Serial.print("fünfe");
break;
default:
break;
}
}
}
// hier die Funktion die immer nur 1x laufen soll.
void SetFunk() {
//hier mein weiterer code
// der immer einmalig ausgeführt werden soll
}