Stap 4: Display
In deze sectie hebben we vier 8 x 8 LED matrices van OOLOUT.com gebruikt. Elk beschikt over 128 LED's. Dat is 512 LEDs. Ontspannen; Wij gebruiken alleen de helft hiervan. De matrices zijn bi-gekleurd met rode en groene LEDs. We kozen te gebruiken van de rode degenen. Een ander groot ding is dat de rijen en kolommen hebben geboekt gemeenschappelijk. De kolom rails gedragen zich als de anode en de rij-rails gedragen als kathoden. Om aan te steken een enkele LED sluit de rij spoor nodig is om te 5Volts via de weerstand en de overeenkomstige kolom spoor op grond. Bijvoorbeeld licht leidde in rij 2 en kolom 6.
Als de Matrix is omgedraaid een hoek, die een kleine 1 gevonden worden kunnen overeen met pin 1 op de matrix.
De "matrixone.jpg" bevat de matrix, de pin-codes en waarbij de 1 wordt afgedrukt onder de matrix. Het tweede schema in de afbeelding wordt beschreven welke pin controleert elk spoor. Merk op dat we de rode LED's hebt geselecteerd, dus we zijn met behulp van pennen 2,5,8,11,14,17,20,23 voor de kolommen. Als we de groene LED's gebruikten zouden we de pinnen 1,4,7,10,13,16,19,22 gebruiken maar de rij spoor blijft hetzelfde.
Zoals te zien in het schema heeft elke kolom en rij een aangewezen pin. In "matrixtwo.jpg" zijn de kolommen en de rijen genummerd, om eventuele verdere verwarring te voorkomen. Dus als je wilde licht de Led in kolom 6 en rij sluit 2 het circuit in"step3.jpg".
Een eenvoudige Matrix gids is beschikbaar op de website van de OOMLOUT. In de handleiding hebben ze de matrix rij pinnen via weerstanden van 1K met de Arduino i/o-pinnen verbonden en de kolommen direct aangesloten op de Arduino pinnen. Het steekproefprogramma geboden hebben ze een functie genaamd "showsprite", die op alle de LEDs in een kolom één voor één draait gebruikt de bochten hen allemaal af. Vervolgens wordt de procedure herhaald voor de volgende kolom, enzovoort. Dit lijkt misschien dom, maar dit wordt gedaan om het verminderen van de huidige getrokken van de Arduino. Gezien omdat het beeld zo snel, hoewel de LEDs zijn door de kolom kolom verlicht, het allemaal zo snel dat het beeld zo constant voor het menselijk oog verschijnt gebeurt.
In het vorige voorbeeld, voor een matrix hebben we een totaal van 16 pins gebruikt, en dus mochten we 4 matrices gebruiken we 64 pinnen zou gebruiken. Die we niet hebben, dus de enige oplossing is het gebruik van shift registers.
Verschuiving van registers: (74HC595) "step5.jpg"
Voorbeeld programma's zijn beschikbaar op de website van Arduino om een basiskennis van hoe shift werk registreert maar ik zal mijn best doen om samen te vatten het.
Het register verschuiving accepteert gegevens als een puls-trein van 8 bits. Het shift register om gegevens te accepteren zodat we sturen een lage input voor de klink pin. De gegevens worden verzonden naar de pin van de gegevens en vervolgens de hendel wordt afgesloten met een hoog op de klink stift. Om te synchroniseren van de Arduino en de verschuiving registreert registreren we sturen de verschuiving van de Arduino klok klok pin. Dit alles zal worden behandeld tijdens de uitleg van de code opnieuw.
Weergeven op een matrix met behulp van 2 shift registreert:
Nu kunnen we gegevens doorsturen naar een shift register we kunt gebruiken om te rijden de matrix. Van onze eerder begrijpen we sturen een hoge ingang naar de rij- en een lage input voor de kolom een LED inschakelen.
Zoals de registers 8 uitgangen hebben kan elke we één kolom selecteren door de anderen te stellen op 1 en de vereiste kolom op 0. Verzend de gegevens specifiek naar die kolom op de rij shift registers. Bijvoorbeeld als je wilde het volgende patroon: 10101101 (Zie de afbeelding) kunt u het patroon naar de rij shift register en 11011111 naar de kolom shift register.
Nu dat we hebben gekeken hoe het shift register met een matrix werkt, kunnen we kijken hoe toe te passen om te rijden 4 schermen. Het shift register heeft 8 uitgangen en vandaar de uitvoer rechtstreeks kan worden aangesloten op de matrix.
We kwamen met twee manieren om dit te doen
1) hebben een rij en kolom shift register voor elk van de 4 schermen. De data lijn is gemeenschappelijk voor iedereen als slechts één shift register gegevens tegelijk worden ontvangen. De klok is gebruikelijk om alle registers van de verschuiving als ze moeten allemaal worden gesynchroniseerd, maar zij allen hendels scheiden moeten zodat ze afzonderlijk kunnen worden geactiveerd. Daarom moeten we een totaal van 10 pins (8 sloten, 1 klok en 1 gegevens).
2) de andere optie voor het verminderen van het aantal pinnen gebruikt is om een gemeenschappelijke kolom verschuiving registreren voor alle schermen en hebben afzonderlijke rij registreert voor elke matrix. Dit is de methode die we hebben gekozen aangezien het vereist een mindere aantal pinnen (5 klink pins, 1 gegevens en 1 klok).
Dus in wezen kunnen wij sturen gegevens aan elk van de rij registreren en vervolgens inschakelen de corresponderende kolom weer te geven van 1 kolomweergave elk van de matrices. Dit proces is gefietst en data wordt getoond op elk scherm bij hoge snelheden en vandaar de afbeelding verschijnt op alle 4 schermen constant.
In de Arduino programmeertaal is een speciaal type van integer beschikbaar genaamd een bitmasker waarmee u een nummer schrijven in binary, bijvoorbeeld "int binary_integer B11001010 =". Dit kunt u schrijven hoe elke regel van het scherm eruitziet. Door een matrix van deze voor elke kolom die u kunt definiëren wat een scherm ziet eruit als voor elk teken dat moet worden weergegeven. Als u wilt opslaan van elk teken en zijn kolommen gebruiken we een serie van wijzers die verwijzen naar waar geheugen het teken is, zodat er gemakkelijker toegankelijk.
Als u wilt weergeven op een scherm moeten we voor het verzenden van gegevens naar de gewenste verschuiving registreren met behulp van de vooraf gedefinieerde Arduino-functie:
"digitalwrite (latchrow, laag); Aan het vereiste shift register van Klink laag ingesteld.
shiftOut (datapin, clockpin, MSBFIRST, Rowmsk1); “
De shift functie verzendt gegevens naar het register van de verschuiving. De eerste ingang is het pin-nummer waaruit gegevens worden verzonden van de arduino, dan de pin van de arduino dat de klok wordt verzonden, daarna het formaat waarin gegevens wordt verzonden, in dit geval zijn de meest significante bit eerst. De laatste ingang is een geheel getal (in normale of bitmasker formaat) lengte die de gegevens verzonden naar het register van de verschuiving van 8 bits.
"digitalWrite (latchrowone, hoge); deze functie de hendel terug op hoog ingesteld zodra de gegevens zijn verzonden."
We moeten weergeven van de tijd die nodig is om een doel te raken en daarom moeten we te ontvangen van de tijd als een lange integer input, converteren naar tekenreeks zodat we het bijbehorende teken wilt weergeven op elk scherm kunt vinden.
Dit wordt gedaan met behulp van de constructor van de string, een functie beschikbaar die converteert een lang geheel getal naar een tekenreeks van elk cijfer. Tekenreeks "timeString = String(123456,DEC);"
maakt! timeString = {1,2,3,4,5,6}; ".
We een gebruiksvoorbeeld schakelaar om te selecteren welke bits masker array weergeven, dan stuur het naar de display functie voor de uitvoer van het ook het scherm.