Stap 8: Met behulp van een Array op te slaan en de Staten van een LED-Matrix instellen
In de laatste stap zagen we hoe met behulp van bytes vereenvoudigd het proces van het opzetten van de Staten van elke rij in de matrix LED. We nemen nu een blik op een strategie voor het opslaan van die informatie in een matrix. Een array is een plek waar we kunnen het opslaan van een verzameling van verwante variabelen, in dit geval, zal ik een matrix gebruiken voor het opslaan van de Staten van elke rij in de matrix. Aangezien we die de lidstaten van elke rij in de matrix met behulp van een byte bent vertegenwoordigt, en er 8 rijen zijn, zal ik moeten een matrix van 8 bytes voor het opslaan van de Staten voor alle 64 LEDs in de LED-matrix. Hier is hoe de matrix wordt gemaakt
byte ledStates [8] = {0, 15, 0, 0, 0, 84, 0, 0};
Ik heb de array met een reeks bytes geïnitialiseerd, ik gooide in sommige niet-nul bytes om te zien hoe ze worden weergegeven op de LED-matrix. Hier is hoe de matrix wordt gebruikt:
byte ledStates[8] = {0, 15, 0, 0, 0, 84, 0, 0}; void setup(){ //set pins 6-13 as outputs and initialize HIGH for (int pinNum=6;pinNum<14;pinNum++){ pinMode(pinNum, OUTPUT); digitalWrite(pinNum, HIGH); } //set pins A0-A6 as outputs for (int pinNum=A0;pinNum<A6;pinNum++){ pinMode(pinNum, OUTPUT); } //set pins 2 and 3 as outputs for (int pinNum=2;pinNum<4;pinNum++){ pinMode(pinNum, OUTPUT); } } void loop(){ for (int i=0;i<8;i++){ setStates(ledStates[i]); int pinNum = getPinNumForLEDIndex(i); digitalWrite(pinNum, LOW); digitalWrite(pinNum, HIGH); } } int getPinNumForLEDIndex(int index){ return index+6; } void setStates(byte states){ zeroStates();//first turn all pins off //look at each bit of binary number and set HIGH if need if (states & 1) digitalWrite(A0, HIGH); if (states & 2) digitalWrite(A1, HIGH); if (states & 4) digitalWrite(A2, HIGH); if (states & 8) digitalWrite(A3, HIGH); if (states & 16) digitalWrite(A4, HIGH); if (states & 32) digitalWrite(A5, HIGH); if (states & 64) digitalWrite(2, HIGH); if (states & 128) digitalWrite(3, HIGH); } void zeroStates(){ digitalWrite(A0, LOW); digitalWrite(A1, LOW); digitalWrite(A2, LOW); digitalWrite(A3, LOW); digitalWrite(A4, LOW); digitalWrite(A5, LOW); digitalWrite(2, LOW); digitalWrite(3, LOW); }
Om een variabele opgeslagen in een matrix, gebruikt u de volgende syntaxis:
arrayName [variableIndex]
waar is variableIndex de locatie van de variabele in de matrix. Bijvoorbeeld:
ledStates [0] gelijk is aan 0
ledStates [1] is gelijk aan 15
omdat de eerste (index = 0) element in de matrix is 0 en de tweede (index = 1) element in de matrix is 15.
Aangezien ik niet langer ben doorlopen over de pinNums in mijn for-lus, die ik heb gemaakt een helper functie die converteert tussen mijn iterator variabele "i" en de pin van de Arduino aangesloten op de rij van belang:
int getPinNumForLEDIndex (int index) {}
terugkeer index + 6;
}
Probeer te veranderen van de bytes in de matrix ledStates om te zien hoe ze van invloed zijn op de output van de matrix. Ook probeer te veranderen de variabelen die zijn opgeslagen in de ledStates als de runs van de sketch, gebruik de volgende syntaxis:
ledStates [indexNum] = newValue
U kunt ook de Staten van de LED's instellen met behulp van de bytes die worden geschreven met de volgende manier:
B11011011
De B laat Arduino weet dat het een binair getal mogen verwachten, dan de volgende 8 nummers zijn de 8 cijfers in binaire die u wilt weergeven. Dit maakt het een beetje makkelijker om een 2D patroon op de LED-matrix te ontwerpen. Probeer deze array:
byte ledStates [8] = {B0111100, B01000010, B10110101, B10000101, B10000101, B10110101, B01000010, B0111100};