8x8 LED Matrix Animations (9 / 14 steg)
Steg 9: Ändra koden
Detta är min version av optimera vad jag har gjort. Det finns nog bättre sätt att göra det, men detta fungerar för mig och tillåter mig att snabbt skriva nya effekter.I föregående kod sprang jag koden för att vända på varje rad och kolumn en i taget. Detta är bra för en snabb test och visar nybörjare hur arduino fungerar. Men som du får mer komplexa sedan dess inte mycket effektivt och program storlek kommer att vara för stor att passa på en arduino.
För att göra det lättare att använda och expandera senare kommer vi att skapa några nya funktioner.
Den första funktionen kallas resetLEDS() när detta kallas sedan stänger av alla lysdioder på en gång. Detta är samma som den setup rutinen, men vi bara har inte man ställer in stiften som resultat. Detta for-slinga bara itererar igenom arrayer och stänger av alla lampor.
void resetLEDS() {
för (int thisPin = 0; thisPin < 8; thisPin ++) {
digitalWrite (col [thisPin], låg); Stänga av lysdioder
digitalWrite (rad [thisPin], hög);
}
Funktionen nästa skapar vi slå på en enda LED. Det kommer att vänta under en viss tid och sedan stänger av först måste vi lägga till en ny variabel ovan array definitionerna. Lägg till följande rad
int delayPin 1. Detta försenar koden innan den stängs led av
Sedan vi lägga till två nya funktioner
void resetLEDS() {
för (int thisPin = 0; thisPin < 8; thisPin ++) {
digitalWrite (rad [thisPin], hög);
digitalWrite (col [thisPin], låg);
}
}
void onLED (int colnum, int rownum) {
digitalWrite (col [colnum], hög);
digitalWrite (rad [rownum], låg);
Delay(delaypin);
digitalWrite (col [colnum], låg);
digitalWrite (rad [rownum], hög);
}
Den första funktionen bara går igenom varje LED och inaktiverar dem alla
Den andra funktionen fungerar genom att ta ett col och rad nummer som skickas till det med huvudprogrammet koden. Koden visar sedan kolumnen krävs (anod) hög och raden krävs (katod) till låga som lyser en särskild LED. En försening kallas då och då lampan är avstängd genom att vända påstår ovan.
Med denna funktion kan vi då ändra loop koden att läsa såhär
onLED(0,0);
onLED(1,1);
onLED(0,1);
onLED(1,0);
onLED(6,0);
onLED(7,1);
onLED(6,1);
onLED(7,0);
onLED(3,3);
onLED(4,3);
onLED(3,2);
onLED(4,2);
onLED(0,5);
onLED(1,6);
onLED(2,7);
onLED(3,7);
onLED(4,7);
onLED(5,7);
onLED(6,6);
onLED(7,5);
Detta bör ge dig en smiley face mönster på matrisen. Eftersom denna slinga går snabbt Lysdioderna kommer verkar bero på alla permanent på hjärnan tänka ser den alla LAMPORNA på samtidigt.
För att göra lysdioderna verkar flash kan du ändra loop funktion för att läsa detta
för (int x = 0, x < 500, x ++); {
onLED(0,0);
onLED(1,1);
onLED(0,1);
onLED(1,0);
onLED(6,0);
onLED(7,1);
onLED(6,1);
onLED(7,0);
onLED(3,3);
onLED(4,3);
onLED(3,2);
onLED(4,2);
onLED(0,5);
onLED(1,6);
onLED(2,7);
onLED(3,7);
onLED(4,7);
onLED(5,7);
onLED(6,6);
onLED(7,5);
}
resetLEDS();
Delay(500);
Ladda ner skissen (ChangedLEDTestFlash) nedan för att se ändringarna.