74HC164 SKIFT Register och din Arduino (8 / 9 steg)
Steg 8: Project 3 [pt 2]: "2 tråd" 4 x 4 led matrisskärm
bit 1 = kolumn 1 (längst till höger)
bit 2 = kolumn 2
bit 3 = kolumn 3
bit 4 = kolumn 4
bit 5 = rad 1 (översta)
bit 6 = rad 2
bit 7 = rad 3
bit 8 = rad 4
För att göra en bild dra ut en 4 x 4 kvadrat på rutat papper och fylla i vilka som du vill ska visas, nästa gör en YX-tabell. Nedan kan du se en mappning för en liknelse, väl så gott man kan göra på 4 x 4 "pixlar"
För varje fylld i avsnitt jag skriver ner vilken kolumn (Y) är det i, så där rad är det i (X)
Nu öppen upp den _4x4.pde arkivera i arduino IDE kommer du att se våra gamla 2 vänner
#define data 2
#define klockan 3
sedan en matris av heltal
int [img] = {1,1,4,1,1,3,4,3,2,4,3,4}.
Om du ser det bara en lista över min skriftliga ner YX samordnar, det skulle vara en stor smärta i baken att konvertera dessa värden för hand och vi har en dator... Låt det göra det!
Flytta på där är utan laga kraft setup där vi gör vår klocka och data stift utgångar
void setup()
{
pinMode (klocka, OUTPUT); gör klockan pin en utgång
pinMode (data, produktionen); göra data stift en output3
}
Och en förvirrande letar ogiltig loop, att starta saker vi måste deklarera några lokala variabler
void loop()
{
int Y;
int X;
byte ut;
En for-loop, denna slinga behöver så länge som antalet transaktioner i matrisen img, för denna bild jag bara använt 6 pixlar, så det gör 12 YX koordinater. Jag gör det hoppa över alla andra nummer med jag += 2, eftersom vi läser 2 koordinater per slinga
för (int jag = 0; jag < 12; jag += 2) / / antalet poäng i matrisen img, detta fall 12
{
Nu vi läsa Y entery på [i] i matrisen och subtrahera en från dess värde, eftersom byte inte börjar på en, de börjar på noll, men vi räknade från 1
få det första paret YX sladdar
Y = (img [i] - 1); subtrahera ett eftersom antalet bitars börjar vid 0
Nästa vi läser X entery [i + 1] i matrisen, och subtrahera en från dess värde, på grund av samma anledning
X = (img [jag + 1] - 1);
Efter vi har YX värdena för pixel, vi gör några bitvis eller matematik och flytta till vänster.
Först måste vi läsa X-värde, och vad dess värde är skifta det att många platser + 4 kvar, så om X är 4 och tillsätt 4 är det lite 8 (MSB), titta på diagrammet igen...
bit 1 = kolumn 1 (längst till höger)
bit 2 = kolumn 2
bit 3 = kolumn 3
bit 4 = kolumn 4
bit 5 = rad 1 (översta)
bit 6 = rad 2
bit 7 = rad 3
bit 8 = rad 4
Bit 8 är den sista raden
Nästa läggs Y-värde också flyttas till vänster, denna gång bara genom sin egen, inget på.
Slutligen är två or'ed tillsammans i 1 byte istället för 2 halva byte (nibbles), med bitvis eller (symbolen |) tar två byte och i princip lägger dem ihop, låt oss anta att
X = 10000000
Y = 00000001
--------------------
ELLER = 10000001
rad 4 kolumn 1
ut = 1 << (X + 4) | 1 << Y;
Och slutligen shiftOut att visa den aktuella bilden, och fortsätt med det tills vi har inga mer data i matrisen... Dröj en stund och slinga för evigt, eftersom vi flytta data till vänster och vi behöver MSB att vara på det sista produktionen stiftet i skift register skicka det ut först.
shiftOut (data, klocka, MSBFIRST, ut); flytta byten ut till vårt register
Delay(1); fördröja det abit så det har en chans att lämna en plats av ljus i dina ögon
Känn dig fri att göra dina egna bilder och effekter, det finns 3 exempelfilerna, smileyn och en checkerboard (som ser ut mer som ränder) och slutligen en random sparkle maker