Danke für die Antworten!
... Ja, der komplette Blinkteil des Programmes, mit dem Inkrementalgeber bin ich ja fertig geworden.Ist dein gezeigter Code vollständig?
... in dem Falle bleib ich beim If.Die Phasen 2 und 3 sollten dann WHILE-Konstrukte sein mit der jeweils negierten Bedingung
... DANKE! Werde Ich mich in Zukunft ganz bestimmt drann halten.Ich fände es besser, die veröffentlichte ursprüngliche Programmversion nicht nachträglich zu verändern, weil dann die innere Stimmigkeit des Threads verloren geht.
Lieber durch jeweils aktuelle Versionen die sukkzessive Verbesserung des Programms erkennbar machen.
... soweit, dass der µC mal was übersringen könnte habe Ich noch gar nicht gedacht, DANKE! Und JA, tatsächlich scheint dort der Wurm drinn gewesen zu sein.Arduino Code ist etwas problematisch. Es läuft einiges im Hintergrund ab, ähnlich wie bei BASCOM. ... Problematisch betrachte ich allerdings dieses unsigned long.
Wenn das hier: if(millis() == (timer_2+time_off)) nicht genau erreicht wird, ist es vorbei und es gibt keinen Sicherheitsausstieg. Das unsigned long ist eine 8Byte Zahl. Wenn es da während der Addition und Vergleich eine Verschiebung gibt, ist es vorbei.
Ich bin mir sicher das hier irgendwo der Wurm steckt, auch wenn ich ihn nicht erkenne.
Ich habe dem µC jetzt mehr Zeit zum erkennen gegeben. So ... genug gelabert! Hier mein derzeitiger Code.
Das ganze ist jetzt doch deutlich länger als dieses Beispiel geworden. Hat noch jemand Ideeen zum verkürtzen des Codes? Wenn sonst keiner mehr Anregungen oder Fragen hat, makier Ich den Thread als Erledigt.Code:int LED_1=5; int tmp=0; unsigned long timer=0; long time_on=100; //Anzeit der LED in Millisekunden long time_off=5000; //Auszeit der LED in Millisekunden void setup() { __pinMode(LED_1, OUTPUT); } void loop() { __if(tmp==0) //Wenn Blinkvorgang beendet, von forn bginnen __{ ____digitalWrite(LED_1, HIGH); //LED anschalten ____timer=millis(); //erste Zeit nehmen ____tmp=1;_//dauerhaftes Zeitnehmen verhindern __} __if((millis() >= (timer + time_on)) && (millis() < (timer + time_on + time_off))) //wenn die vorher genommene Zeit PLUS der Anzeit mit der derzeitigen Zeit übereinstimmt UND kleiner als die Endzeit ist... __{ ____digitalWrite(LED_1, LOW); //...schalte LED aus __} __if(millis() >= (timer + time_on + time_off)) //Wenn Anzeit PLUS Auszeit abgelaufen ist, beginne von forn (jetzt mehr Sicherheit durch ">=") __{ ____tmp=0; __} }
Viele Grüße, Green







Zitieren


Lesezeichen