Stap 8: Project 3 [pt 2]: '2 draad' 4 x 4 led matrix beeldscherm
bit 1 = kolom 1 (meest rechtse)
bit 2 = kolom 2
bit 3 = kolom 3
bit 4 kolom 4 =
bit 5 = rij 1 (bovenste)
bit 6 = rij 2
bit 7 = rij 3
8-bits = rij 4
Om een afbeelding uit een vierkant 4 x 4 op ruitjespapier tekenen en vul in welke u weergeven wilt, vervolgens een YX-tabel te maken. Hieronder ziet u een toewijzing voor een simile, goed zo goed als men kan doen op de 4 x 4 "pixels"
Voor elk ingevuld sectie die ik welke kolom (Y opschrijven) is het in, dan welke rij in (X is)
Nu open het _4x4.pde bestand in de arduino IDE ziet u onze oude 2 vrienden
#define gegevens 2
#define klok 3
vervolgens een matrix van gehele getallen
int img [] = {1,1,4,1,1,3,4,3,2,4,3,4};
Als je zijn enkel kijkt een lijst van mijn schriftelijke neer YX coördineert, zou het een grote pijn in de kont waarden om te zetten die met de hand, en we hebben een computer... laat het doen!
Void setup waar we onze klok maken en gegevens stiften uitgangen verplaatsen op daar is
VOID Setup
{
pinMode (klok, uitvoer); Maak de pin van een output klok
pinMode (gegevens, OUTPUT); de data pin een output3 maken
}
En een verwarrend uitziende nietig lus, om te beginnen met dingen uit we moeten sommige lokale variabelen declareren
void loop
{
int Y;
int X;
byte
Dan een for-lus, deze lus moet worden, zolang het bedrag van de inzendingen in de img-matrix, voor dit beeld alleen gebruikte ik 6 pixels, dus dat maakt 12 YX coördinaten. Ik maak het overslaan, elk ander nummer met behulp van ik += 2, omdat we 2 coördinaten per lus lezen
voor (int i = 0; ik < 12; ik += 2) / / het aantal punten in de img-matrix, deze zaak 12
{
Nu we lezen de Y entery bij [i] in de matrix, en aftrekken van de waarde ervan, want bytes niet bij één beginnen, ze bij nul beginnen, maar we gerekend vanaf 1
krijgen de eerste paar YX koorden
Y = (img [i] - 1); een aftrekken omdat de bits-telling bij 0 begint
Volgende we lezen de X entery op [i + 1] in de matrix, en aftrekken van de waarde ervan, vanwege dezelfde reden
X = (img [i + 1] - 1);
Nadat we de YX-waarden van de pixel hebben, we doen sommige bitsgewijze of wiskunde en verschuiven naar links.
Allereerst moeten we lezen de X-waarde, en wat de waarde ervan is het dat veel plaatsen shift + 4 links, zo als X 4 en 4 is het toevoegen (MSB), 8 bit kijkend naar de grafiek weer...
bit 1 = kolom 1 (meest rechtse)
bit 2 = kolom 2
bit 3 = kolom 3
bit 4 kolom 4 =
bit 5 = rij 1 (bovenste)
bit 6 = rij 2
bit 7 = rij 3
8-bits = rij 4
8-bit is de laatste rij
Vervolgens de Y-waarde is ook verschoven naar links, dit keer gewoon door haar zelf, niets toegevoegd op.
Tot slot de twee zijn or'ed samen in 1 byte in plaats van 2 halve bytes (nibbles), met behulp van bitwise of (het symbool | ) neemt twee bytes en basicly hen worden opgeteld, laat veronderstellen
X = 10000000
Y = 00000001
--------------------
OF = 10000001
rij 4, kolom 1
uit = 1 << (X + 4) | 1 << Y;
En ten slotte shiftOut voor het weergeven van de huidige afbeelding, en dat blijven doen totdat we geen meer gegevens in de array hebben... eventjes vertragen en eeuwig, want we gegevens naar links verschuiven werden, en we moeten de MSB uit te zijn op de laatste output-pin van de shift register verzenden het eerste.
shiftOut (data, klok, MSBFIRST, out); verschuiving van de byte uit naar onze register
delay(1); vertragen het abit, dus het is een kans om te vertrekken van een vlek van licht in je ogen
Voel je vrij om uw eigen beelden en effecten, zijn er 3 voorbeeldbestanden, het smileygezicht en een dambord (die ziet er meer als strepen), en tenslotte een willekeurige sparkle maker