Lauflicht zurück laufen lassen

Gast #2390882
Lesenswert?

Hallo,

ich möchte mein Lauflicht nach einem Durchgang wieder rückwärts laufen 
lassen.
Das "hochlaufen" funktionier auch nur habe ich -keine- Ahnung wie ich es 
in die entgegen gesetzte Richtung bewege?!

for(i=0;i<8;i++)
{
PORTD =~(1 << i);
_delay_ms(50);
}

Wer kann helfen?

Danke
Gast #2390891
Lesenswert?

Benjamin schrieb:
> Das ist klar aber er soll ja erst hoch zählen, dann runter, wieder hoch
> etc.
> Wie schreib ich das?

Uhm, erst eine for-Schleife, die hochzählt, dann eine, die runterzählt?

Übrigens: Von (1 << i) würde ich allgemein eher abraten, falls es sich 
um einen AVR handeln sollte. Dieser muß das als Schleife ausführen, weil 
seine Schiebe-Instruktion nur um genau ein Bit schieben kann. Spielt bei 
diesem Programm vermutlich keine große Rolle, aber es ist gut, das im 
Hinterkopf zu behalten.
Gast #2390903
Lesenswert?

Die fehlt weil ich meine kläglichen versuche nicht veröffentlichen 
wollte ;)

Verdammt nochmal das hatte ich eben fast alles so wie du nun 
schreibst...

Bis auf das i>=0 , dafür stand bei mir i<7 was wohl nicht so schlau 
war...

DANKE!
Gast #2390916
Lesenswert?

Da gibt's aber noch zwei Dinge anzumerken:

Zum einen funktioniert das nur, wenn i ein vorzeichenbehafteter Typ ist. 
Wenn es das nicht ist, bekommt man eine Endlosschleife, weil eine 
vorzeichenlose Variable natürlich immer >= 0 ist.

Zweitens werden so die LEDs an den Enden doppelt so lange leuchten, weil 
sie in beiden Schleifen enthalten sind. Ob das so sein soll, mußt du 
natürlich selbst entscheiden, aber wenn nicht, kannst du die zweite 
Schleife auch so hinschreiben:
1
     for(i=6;i>0;i--)
Gast #2392832
Lesenswert?

Samuel K. schrieb:
> Warum nicht gleich so:
> for(float i=0;i<PI;i += PI / 16)
> {
>     PORTD = ~(1 << ((uint8_t)(sin(i)*8)));
>     if(PORTD)
>         _delay_ms(50);
>     else
>         i += PI / 16;
> }
>
> PS: Am elegantesten sind 2 Schleifen welche eine 1 vor und
> zurückschieben.

Weil man sehr schlecht mit diesem Beispiel die Vorgänge nachverfolgen 
kann und es recht unübersichtlich ist (für einen Anfänger).

Kannst du einmal beschreiben wie dieser Code genau abläuft?

(Auch Anfänger).
Gast #2392863
Lesenswert?

Michael D. schrieb:
> Weil man sehr schlecht mit diesem Beispiel die Vorgänge nachverfolgen
> kann und es recht unübersichtlich ist (für einen Anfänger).

Ich würde ja jetzt nicht meine Hand ins Feuer legen, aber mein Eindruck 
ist, daß das die Idee des Postings war, als ironische Antwort auf dessen 
Vorposting.
Gast #2392936
Lesenswert?

Rolf Magnus schrieb:
> Ich würde ja jetzt nicht meine Hand ins Feuer legen, aber mein Eindruck
> ist, daß das die Idee des Postings war, als ironische Antwort auf dessen
> Vorposting.

Spinnt ihr? Wie könnt ihr eine so kompetente Antwort, wie die von MaWin, 
durch ironische Kommentare lächerlich machen??? Die kommt schließlich 
von MaWin und der hat doch IMMER recht!


P.S. Manchmal ironiere ich bis zu Sarkasmus ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren