Mellanliggande Arduino: Ingångar och utgångar (8 / 9 steg)
Steg 8: Använder en matris att lagra och ställa in staterna i ett LED-matris
I det sista steget såg vi hur byte förenklat processen att staterna i varje rad i matrisen LED. Nu ska vi ta en titt på en strategi för att lagra informationen i en matris. En array är en plats där vi kan lagra en samling relaterade variabler, i detta fall, jag kommer att använda en matris för att lagra påstår av varje rad i matrisen. Eftersom vi som företräder staterna i varje rad i matrisen med hjälp av en byte, och det finns 8 rader, behöver jag en matris på 8 byte att lagra påstår av alla 64 lysdioder i ledde matrisen. Här är hur matrisen skapas
byte ledStates [8] = {0, 15, 0, 0, 0, 84, 0, 0};
Jag har initiera arrayen med en uppsättning av byte, jag kastade i vissa icke-noll byte att se hur de dyker upp på LED matrix. Här är hur matrisen används:
byte ledStates [8] = {0, 15, 0, 0, 0, 84, 0, 0};
void setup() {
stift 6-13 som utgångar och initiera högt
för (int pinNum = 6; pinNum < 14; pinNum ++) {
pinMode (pinNum, produktionen);
digitalWrite (pinNum, hög);
}
ställa in stift A0-A6 som utgångar
för (int pinNum = A0; pinNum < A6; pinNum ++) {
pinMode (pinNum, produktionen);
}
ställa in stift 2 och 3 som utgångar
för (int pinNum = 2; pinNum < 4; pinNum ++) {
pinMode (pinNum, produktionen);
}
}
void loop() {
för (int jag = 0; jag < 8; i ++) {
setStates(ledStates[i]);
int pinNum = getPinNumForLEDIndex(i);
digitalWrite (pinNum, låg);
digitalWrite (pinNum, hög);
}
}
int getPinNumForLEDIndex (int index) {
Avkastningsindex + 6.
}
void setStates (byte staterna) {
zeroStates (); //first tur alla stift av
titta på varje bit av binärt tal och uppsättningen hög om
om (staterna & 1) digitalWrite (A0, hög);
om (staterna & 2) digitalWrite (A1, hög);
om (staterna & 4) digitalWrite (A2, hög);
om (staterna & 8) digitalWrite (A3, hög);
om (staterna & 16) digitalWrite (A4, hög);
om (staterna & 32) digitalWrite (A5, hög);
om (staterna & 64) digitalWrite (2, hög).
om (staterna & 128) digitalWrite (3, hög).
}
void zeroStates() {
digitalWrite (A0, låg);
digitalWrite (A1, låg);
digitalWrite (A2, låg);
digitalWrite (A3, låg);
digitalWrite (A4, låg);
digitalWrite (A5, låg);
digitalWrite (2, låg).
digitalWrite (3, låg).
}
För att få en variabel lagras i en matris måste använda du följande syntax:
arrayName [variableIndex]
där variableIndex är platsen för variabeln i matrisen. Till exempel:
ledStates [0] är lika med 0
ledStates [1] är lika med 15
eftersom först (index = 0) elementet i arrayen är 0, och andra (index = 1) elementet i arrayen är 15.
Eftersom jag inte längre iteration över pinNums i min for-loop, jag skapade en hjälpare funktion som konverterar mellan min iterator variabel "i" och den Arduino pin ansluten till raden av intresse:
int getPinNumForLEDIndex (int index) {
Avkastningsindex + 6.
}
Prova att ändra byte array ledStates att se hur de påverkar produktionen av matrisen. Också prova att ändra variabler lagras i ledStates som skiss går, använder du följande syntax:
ledStates [indexNum] = newValue
Du kan också ange påstår av lysdioderna byte som skrivs på följande sätt:
B11011011
B kan Arduino vet att det bör förvänta sig ett binärt tal, då nästa 8 siffrorna är de 8 siffrorna i binär du vill visa. Detta gör det lite lättare att utforma en 2D mönster på ledde matrisen. Prova att använda denna matris:
byte ledStates [8] = {B0111100, B01000010, B10110101, B10000101, B10000101, B10110101, B01000010, B0111100};