Arduino målövning (4 / 5 steg)
Steg 4: Display
I detta avsnitt har vi använt fyra 8 x 8 ledde matriser från OOLOUT.com. Alla har 128 lysdioder. Det är 512 lysdioder. Koppla av; Vi använder endast hälften av dessa. Matriserna är bi-färgad med röda och gröna lysdioder. Vi valde att använda röda. En annan stor sak är att raderna och kolumnerna har gjorts gemensamt. Kolumnen rälsen beter sig som anoden och rad rälsen fungerar som katod. För ljus ansluta en enda LED rad järnväg krävs att 5Volts via motståndet och motsvarande kolumn järnväg till marken. Till exempel ledde ljus i rad 2- och 6.
När matrisen är vände över i motsvarar ena hörnet en liten 1 finns som stift 1 på matrisen.
"matrixone.jpg" visar matrisen, dess pin-koder och där 1 är tryckt under matrisen. Den andra schematiskt i bilden beskriver vilken pin kontrollerar varje järnväg. Observera att vi har valt den röda lysdioden så vi använder stift 2,5,8,11,14,17,20,23 för kolumner. Om vi använder den gröna lysdioden vi skulle använda stift 1,4,7,10,13,16,19,22 men rad järnväg förblir densamma.
Som sett i schematiskt har varje kolumn och rad en utsedda pin. I "matrixtwo.jpg" har kolumnerna och raderna varit numrerade för att förhindra ytterligare förvirring. Därför om du ville tända lampan i kolumn 6 och rad Anslut 2 krets in"step3.jpg".
Enkel matris guide finns på OOMLOUT hemsida. I guiden har de ansluten matris rad stiften via 1K motstånd till Arduino I/O stift och direkt ansluten kolumnerna till Arduino stiften. I programmet prov som de har använt en funktion kallad "showsprite" som tänds alla lampor i en kolumn ett vänder sig dem alla. Det sedan upprepas processen för nästa kolumn, och så vidare. Detta kan verka dumt men detta görs för att minska den nuvarande från Arduino. Sett som bearbetar den så snabbt, trots att lysdioderna lyser kolumnvis, händer allt så snabbt att det mänskliga ögat bild visas så konstant.
I föregående exempel för en matris vi använde sammanlagt 16 stift, och så om vi skulle använda 4 matriser skulle vi använda 64 stift. Som vi inte har, så den enda lösningen är att använda SKIFT register.
Skifta register: (74HC595) "step5.jpg"
Exempel program som finns tillgängliga på webbplatsen Arduino att få en grundläggande förståelse för hur SKIFT register arbete men jag ska göra mitt bästa för att sammanfatta det.
Skiftregister godkänner data som en puls tåg av 8 bitar. För att tillåta skiftregister att acceptera uppgifter skickar vi en låg ingång till dess spärren stift. Data skickas till data stift och sedan låset stängs med ett högt till spärr stiftet. För att synkronisera Arduino och SKIFT registrerar register skickar vi Arduinos klocka till SKIFT klockan pin. Allt detta kommer att täckas igen under förklaringen av koden.
Visar på en matris med 2 SKIFT register:
Nu när vi kan skicka data till ett skiftregister kan vi använda den för att köra matrisen. Från våra tidigare förståelse vi skicka en ingång till raden och en låg ingång till kolumnen Aktivera en LED.
Registren har 8 utgångar kan varje vi välja en kolumn genom att ange andra 1 och kolumnen krävs till 0. Sedan skicka data specifika till kolumnen till de rad SKIFT register. Till exempel om du ville ha följande mönster: 10101101 (visas i bilden) du kan skicka mönstret till rad skiftregister och 11011111 till kolumnen SKIFT register.
Nu när vi har tittat på hur SKIFT registret fungerar med en matris, kan vi titta på hur till använda den för att köra 4 skärmar. Skiftregister har 8 utgångar och därmed dess utgång kan direkt anslutas till matrisen.
Vi kom fram till två sätt att göra detta
1) har en rad och en kolumn SKIFT register för varje 4 skärmar. Data linjen är gemensam för alla som bara ett skiftregister data ska tas emot på en gång. Klockan är gemensamma för alla SKIFT register och de måste alla vara synkroniserad, men alla behöver separata lås så att de kan aktiveras separat. Vi behöver därför totalt 10 stift (8 lås, 1 klocka och 1 Data).
2) det andra alternativet att minska antalet stift används är att ha en gemensam kolumn SKIFT register för alla skärmar och har enskild rad register för varje matris. Detta är den metod vi valde eftersom det krävs ett mindre antal stift (5 spärren stift 1 data och 1 klocka).
Så i grunden kan vi skicka data till varje raden registrera och sedan aktivera motsvarande kolumn, för att Visa 1 kolumnvisning varje av matriserna. Denna process är cyklade och data visas på varje skärm i höga hastigheter och därmed bilden visas konstant på alla 4 skärmar.
I Arduino programmeringsspråk är en speciell typ av heltal tillgänglig kallas en Bitmask som tillåter dig att skriva en rad i binärt, till exempel "int binary_integer = B11001010". Här kan du skriva vad varje rad av skärmen skulle se ut. Genom att göra en matris av dessa för varje kolumn kan du definiera vad en skärm ser ut för varje tecken som måste visas. För att lagra varje tecken och dess kolumner använder vi en matris med pekare som pekar på där i minnet är karaktär, så att det är lättare att få tillgång.
Vi behöver skicka data till önskat SKIFT register med hjälp av fördefinierade Arduino-funktionen för att visa på en skärm:
"digitalwrite (latchrow, låg); Att ange den obligatoriska skiftregister spärren låg.
shiftOut (datapin, clockpin, MSBFIRST, Rowmsk1); “
Skiftet ut funktionen skickar data till skiftregister. Den första ingången är pin-kod från vilken data skickas från arduino, då pin av arduino att klockan är skickade på, nästa format i vilka data som skickas, i detta fall är det den mest signifikanta biten först. Sist ingång är ett heltal (i antingen normala eller bitmask format) 8 bitar i längd som är data som skickas till skiftregister.
"digitalWrite (latchrowone, hög); Denna funktionen in spärren tillbaka till hög när data har skickats."
Vi behöver Visa tid för att träffa ett mål och vi behöver därför få tiden som en lång heltal ingång, konvertera det till sträng så att vi kan hitta motsvarande tecken ska visas på varje skärm.
Detta görs med konstruktorn sträng, en funktion tillgänglig som omvandlar ett långt heltal till en sträng som innehåller varje siffra. Strängen "timeString = String(123456,DEC);"
gör! timeString = {1,2,3,4,5,6}; ".
Vi använder en switch fall för att välja vilken mask bitmatris till Visa och sedan skicka det till funktionen display att mata den för skärmen.