Danke für die Antworten!
Ist dein gezeigter Code vollständig?
... Ja, der komplette Blinkteil des Programmes, mit dem Inkrementalgeber bin ich ja fertig geworden.
Die Phasen 2 und 3 sollten dann WHILE-Konstrukte sein mit der jeweils negierten Bedingung
... in dem Falle bleib ich beim If.
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.
... DANKE! Werde Ich mich in Zukunft ganz bestimmt drann halten.
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.
... 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.
Ich habe dem µC jetzt mehr Zeit zum erkennen gegeben. So ... genug gelabert! Hier mein derzeitiger Code.
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;
__}
}
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.
Viele Grüße, Green
Lesezeichen