Mellanliggande Arduino: Ingångar och utgångar (7 / 9 steg)
Steg 7: Skicka byte till en multiplexade ledde matrisen
Så långt är den kod vi har använt att skicka data ut till LED lite krångligt att skriva. Det har med uttryckligen tilldela varje Arduino stiften ansluten till en kolumn en hög eller låg stat. Om vi ville programmera matrisen att visa olika mönster för varje 8 rader, får vi skriva en massa kodrad. Här är ett sätt att organisera saker:
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 pinNum = 6; pinNum < 14; pinNum ++) {
om (pinNum == 8) {
setStates(56);
} annat {
setStates(0);
}
digitalWrite (pinNum, låg);
digitalWrite (pinNum, hög);
}
}
void setStates (byte staterna) {
zeroStates (); //first tur alla stift av
titta på varje bit av binärt tal och vid behov ställa höga
om (staterna & 1) digitalWrite (A0, hög), //check den första biten (minst signifikanta biten)
om (staterna & 2) digitalWrite (A1, hög), //check den andra biten
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); //check den mest signifikanta biten
}
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).
}
Minns hur vi brukade ett tal mellan 0 och 255 (en byte) ställa in staterna i 8 lysdioder ansluten till 595? Jag har nu lagt till en funktion som kallas setStates() som låter oss som påstår av 8 lysdioder i varje rad i den ledde matrisen med hjälp av en byte. Det första setStates gör ligger alla stiften ansluten LED matriskolumnerna låg att stänga av alla lysdioder som kan vara på. Sedan kontrollerar varje binär siffra i den 8-siffriga byten med hjälp av operatorn &; om någon av siffrorna är 1, ställer motsvarande pin HIGH.
Koden ovan anger raden ansluten till digital stift 8 med hjälp av nummer 56. I binärt representeras 56:
00111000
Och resulterande LED utdata visas i den första bilden ovan, kan du se att varje 1 i det binära talet motsvarar en upplyst LED i matrisen.
Nästa försök programmering varje rad i matrisen LED att visa antalet digitala klämma fast den är ansluten till:
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 pinNum = 6; pinNum < 14; pinNum ++) {
setStates(pinNum);
digitalWrite (pinNum, låg);
digitalWrite (pinNum, hög);
}
}
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).
}
Resultatet visas i den andra bilden ovan.