24 LED's über Schieberegister ansteuern

Hallo :slight_smile:

Ich bin noch ziemlich unerfahren in der Arduino Programmierung.

Ich stehe vor einer wahrscheinlich simplen Aufgabe und komme einfach nicht richtig weiter.

Ich habe bereits geschafft einen Timer zu erstellen, so dass die LED's den binären Zählwert anzeigen.

Nun wollte ich alle LED's der Reihe nach zuschalten (LED 1 an, LED 2 an, usw.) . Am Ende wenn LED 24 erreicht ist sollen dann alle LED's wieder abgeschaltet werden. Hat vielleicht jemand einen hilfreichen Tipp für mich ?

hi,

und herzlich willkommen im forum.

so als denkanstoß:
for (n = 0 bis 23)
LED(n) an
warte 1 sekunde
wenn n gleich 23 alle LEDs aus
ende for

gruß stefan

Ich habe bereits geschafft einen Timer zu erstellen, so dass die LED’s den binären Zählwert anzeigen

Vermutlich willst du uns mit dem Begriff “Timer” verwirren, aber trotzdem ist das doch eine deutlich anspruchsvollere Aufgabe.

Wenn du, wie im Titel angedeutet, Schieberegister verwenden willst, suchst du evtl das bitSet Makro ?

Ansonsten kann man in C leicht mit | Bits setzen und mit << Bits nach oben schieben ,

Vielen Dank für die schnelle Rückmeldung. Ich hab mich dazu entschlossen, mich doch erstmal noch ein wenig selbst mit der Materie zu beschäftigen .

Ich bin jetzt soweit das es so funktioniert wie es soll. Nur was genau passiert hier an diesem Punkt eigentlich. Das ist mir noch nicht ganz klar geworden.

shiftOut(dataPin, shiftPin, MSBFIRST, i>>16);
shiftOut(dataPin, shiftPin, MSBFIRST, i>>8);
shiftOut(dataPin, shiftPin, MSBFIRST, i);

Wenn ich das richtig verstehe handelt es sich bei dem ersten shiftOut um das 3. Register, bei dem 2. um das 2. Register und beim 3. um das 1. Register.

Jetzt muss ich mir das so vorstellen, dass bei i>>16 der Wert von i um 16 bit nach rechts verschoben wird ?

Jetzt muss ich mir das so vorstellen, dass bei i>>16 der Wert von i um 16 bit nach rechts verschoben wird ?

Erster Treffer bei Google

combie:
Erster Treffer bei Google

Ausserdem musst du beim BitShiften wissen, wie groß die Variablen sind.
Um 3 Byte zu speichern, musst du bei “normalen” Arduinos (atmega 8bit controller) schon einlong inehmen.