Derde oplossing
Je gebruikt momenteel shiftOut(dataPin, clockPin, MSBFIRST, shiftData);.
Onderstaande tabel probeert uit te leggen wat er gebeurt.
Eerste rij geeft de uitgangen van de 74HC595 aan.
De tweede rij de nummers van de LEDs (zevende LED is de meest linkse LED, eerste LED is de meest rechtse LED, nummers tellend vanaf één).
De Klok X geeft het aantal klok pulsen aan.
De data kolom geeft de data aan na iedere klok puls.
Voor het voorbeeld sturen we het getal 1 (B00000001) naar het schuifregister.
MSBFIRST geeft aan dat het (dan) meest significante bit wordt geklokt in het schuifregister.
Op Klok 0 is de data B00000001; dit is de data in je data variabele en in de shiftOut() functie. Bij de eerste klok puls wordt het meest significante bit in het schuifregister geklokt; dat is een 0 en de data in de shiftOut() functie wordt één plek naar links geschoven. Dit herhaalt zich een aantal keren en na de achtste klok is het minst significante bit in het schuifregister gezet.
Zoals je kunt zien zit dat minst significante bit nu op Q0 (en daar is geen LED op aangesloten
).
Je kunt MSBFIRST veranderen naar LSBFIRST. In dat geval wordt het (dan) minst significante bit (Least Significant Bit, LSB) geklokt in het schuifregister.
Onderstaande tabel probeert uit te leggen wat er gebeurt bij de opeenvolgende klokpulsen.
Na de eerste klokpuls is het minst significante bit geklokt en zit op Q0.
Bij de tweede klokpuls schuift Q0 naar Q1 en Q0 wordt vervangen door het minst significante bit (een 0). De data op de uitgangen is nu dus B00000010.
Dit herhaalt zich een aantal keer en uiteindelijk zal het originele minst significante bit (1) op Q7 staan.
Ik hoop dat dit een beetje duidelijk is.
Nu ligt het er maar net aan of je de linkse LED de eerste LED wilt maken of de rechtse LED de eerste LED wilt maken.
Zoals ik in mijn vorige antwoord gezegd wil ik graag dat je de twee andere software oplossingen probeert te vinden.
Daarna kun je besluiten of je de shiftOut() wilt aanpassen of de hardware wilt aanpassen of één van de andere software oplossing die je bedacht hebt wilt gebruiken.
Hint
De eerste software oplossing is om de data op een iets andere manier te bereken.
De tweede software oplossing is om de data in te lezen zoals je dat nu hebt en daarna aan te passen met een shift bewerking; je kunt niet de data zelf aanpassen maar je moet een extra variabele gebruiken die de aangepaste data bevat en die stuur je dan naar het schuifregister.
En de derde software oplossing is beschreven in dit antwoord.

