Hallo,
ich bin blutiger Anfänger und komme einfach nicht weiter.
Ich habe diesen Code, damit blinkt eine LED gesoftet.
Aber nach 10 Minuten soll das blinken aufhören und die LED dauernd an sein.
Wie komme ich nach Zeit aus der Schleife raus ?
Vielen Dankl
Was bedeutet was UL? Manchmal sehe ich auch andere Buchstaben hinter einer Zahl und ich habe noch nicht gelesen, was diese bewirken.
Danke für die Beantwortung der Zwischenfrage.
Man kann loop() mittels return verlassen. Ich habe das von einem RFID-Beispiel gelernt, das immer mal wieder hier durch das Forum geistert und mich nervt. Auf dieses Thema und for angewendet, sieht das so aus:
Damit die Berechnung gleich zu Anfang von int nach uint32_t wechselt, verwende ich 10UL. Das ist nicht notwendig, lenkt aber hoffentlich die Aufmerksamkeit weg von der Konstanten hin zur Berechnung.
Ohne Berechnung versteht der Compiler auch eine Zahl ohne UL:
Ich würde 2 millis() Kontrollen machen.
Eine die kontrolliert ob 10 minuten vorbei sind und somit von Blinken zu Dauerein Umschaltet und eine 2. Millis() Kontrolle das den zustand der LEd regelmäßig umschaltet = blinken.
digitalWrite(LED_Pin,HIGH);
Wäre ein Versuch wert :o
So, Scherz beiseite - Du prüfst UNUNTERBROCHEN, ob Du noch in der Blink-Zeit bist - wenn Ja, blinkst Du.
Was hindert Dich daran, im anderen Fall - Du bist dann offensichtlich NICHT mehr in der Blinkzeit, die LED auf Dauer-AN zu stellen?
Da der arme Arduino nach der Startphase nichts mehr macht außer auf Reset zu warten, könnte man das auch ganz anders lösen. Man könnte auch sicherstellen , dass es nach 49 Tagen nicht kurz wieder blinkt, falls das relevant wäre.
michael_x:
Man könnte auch sicherstellen , dass es nach 49 Tagen nicht kurz wieder blinkt, falls das relevant wäre.
Jetzt machst du mich aber neugierig.
Ich dachte, dass auch beim Überlauf die Abfrage korrekt sei.
Siehe Arduino Referenz Seite 58.
Also: Auch bei einem Überlauf funktioniert der Vergleich korrekt, es gibt keine Fehlberechnungen.
Die angegebene Verfahrensweise gilt analog auch bei micros().
geht auch wenn millis() gerade über 0 gekommen ist und startzeit knapp vor dem Überlauf steht.
Das kannst du mit einem kleineren Datentyp leicht überprüfen:
byte alt = 250;
byte neu = 1;
Serial.println(neu-alt); // Ausgabe: 7
Hier ist es was anderes, ausnahmsweise wird der Wert von millis() direkt verwendet.
michael_x:
Hier ist es was anderes, ausnahmsweise wird der Wert von millis() direkt verwendet.
Es ist nicht wirklich anders, hier ist nur der Startzeipunkt 0 Millisekunden und das -0 wurde weggelassen.
Die Abfrage ist aber alle 49 Tage wahr, um es wirklich nur einmal zu machen,
könnte man noch einen Schalter einbauen, @wie michael_x ja schon vorschlug.