Hi,
ohne das Programm jetzt testen zu können:
Du setzte Startzeit bei jedem Aufruf der Funktion SummerKurzOn neu.
Dann kommen die Testmarker Aufrufe von denen ich nicht weiß was sie machen und wie lange die Ausführung dauert.
Wenn sie aber kombiniert nicht über 500ms dauern wird eine if Bedingung nie true werden. Ich vermute der Summer ist dauerhaft an?
Dann wird dein delay in loop ausgeführt.
Wenn du in der Funktion keinen delay verwenden willst jedoch alle 500ms den Summer ein/aus schalten möchtest solltest Du den delay in der Loop überdenken. Dieser dauert ja schon eine Sekunde, somit bleibt dein Summer immer diese Zeit an, wenn er nicht vor Erreichen des delay abgeschaltet wurde, was er nicht wird da ja kein delay verwendet werden soll usw usf.
Ich nehme an, deine Funktion LEDumschalt soll mit der alle eine Sekunde aufgerufen werden?
ich bin mir nicht ganz sicher was DU erreichen willst.
Ich versuche mal etwas zu schreiben ohne es zu testen, und es ist eher Pseudocode, habe auch lange keinen Arduino mehr programmiert:
gegebenenfalls musst Du die Bedingungen erweitern, jenachdem was beim ersten Durchlauf mit startzeit = 0 passieren soll, sonst startet der Summer vor den LEDs.Code:unsigned long startzeit_led = 0; unsigned long startzeit_summer = 0; unsinged long dauer_led = 1000; unsigned long dauer_summer = 500; bool summer_an = false; loop(){ if (startzeit_led + dauer_led<= millis()){ LEDumschalt(); startzeit_led = millis(); } if (startzeit_summer + dauer_summer <= millis()){ if (summer_an) summer_aus(); else summer_an(); startzeit_summer = millis(); } }
Die variable summer_an muss entsprechend in den Funktionen die den Summer an/aus machen gesetzt werden.
Ich hab nochmal kurz gegoogled: diese Seite erläutert es gut.
https://starthardware.org/timer-mit-...ive-zu-delays/
Crypi
Lesezeichen