en enda LED kan vara praktiskt att testa Arduino projekt. Men när du lägger till en LED-matris kan du bli riktigt kreativ, stava ut bokstäver, siffror och symboler. Det är också ett praktiskt sätt att lära sig hur mer komplexa skärmar – som den du läser detta på jobbet. I den här guiden visar vi dig hur du ställer in en grundläggande 8 msk 8 LED-matris.
hur LED-matriser fungerar
en grundläggande LED-matris som den vi kommer att använda har ett 8-8-rutnät av lysdioder som kan användas för att rita tecken, grundläggande bilder och mer. I tidigare guider har vi visat hur Arduino kan styra en enda LED. Denna komponent sträcker det konceptet över en rad 64 lysdioder som alla kan styras med en enda Arduino.
LED-matris
i en LED-matris körs en ström genom rader av lysdioder. För att slutföra kretsen och aktivera ett individuellt ljus är en kolonn ansluten till marken. Där kraft-och markledningarna skärs, aktiveras lysdioder. Du kan tänka på det lite som brädspelet Battleship. Till exempel, om strömmen körs till raderna A, B och C, men endast kolumn 1 är ansluten till jord, tänds lamporna vid A1, B1 och C1. Resten blir mörkt.
Detta är ett praktiskt sätt att slå på flera lysdioder samtidigt, men det skapar ett problem om du bara vill att vissa lysdioder i en kolumn ska slås på. Säg istället att du ville ha lampor A1, B2 och C3 för att lysa upp och skapa en diagonal linje. Att aktivera alla tre raderna och kolumnerna skulle aktivera hela rutnätet, vilket inte är vad vi vill ha.
för att lösa detta problem kan en Arduino springa genom en slinga och aktivera endast en enda rad lysdioder åt gången. På så sätt kan du aktivera så många kolumner du vill utan att påverka nästa rad. Utan en lång fördröjning () – funktion aktiveras raderna i så snabb följd att det mänskliga ögat inte kommer att kunna berätta. Men vi kommer att visa hur man lägger till en fördröjning så att du kan se hur det fungerar ändå.
vad du behöver
vi använder en mer komplicerad metod för att styra LED – matrisen för utbildningsändamål – andra komponenter kan minska antalet stift som krävs-och så kommer det att ta en hel del fler stift och ledningar än de flesta av våra andra guider. Av den anledningen använder vi en Arduino Mega 2560, istället för den vanliga Arduino Uno, för att styra denna matris. Du behöver också följande:
Arduino Mega 2560 | |
8×8 LED-matris | |
8 x 220ohm motstånd
de flesta lysdioder kommer att brinna ut om du ansluter dem direkt till 5V-utgången på en Arduino. Placera ett motstånd från ditt kit mellan utgångsstiftet och lysdioden. |
|
ett par brödskivor | |
Arduino IDE |
du behöver också en USB-kabel och en hel del ledningar – minst 32!
det finns ett antal sätt att organisera ledningarna för detta projekt, men eftersom det kan bli komplext rekommenderar vi att du använder ett par brödbrädor som är låsta ihop, en för att hantera LED-matrisen och en annan för ledningar i motstånden. Det är möjligt att åstadkomma samma sak genom att använda ledningar med kvinnliga ändar som går till LED-matrisen, men det kommer att sitta åt sidan istället för stillastående, vilket kan vara lite mer besvärligt.
koden
koden för detta projekt kommer att använda loopar och matriser för att skriva varje LED individuellt. Resultatet blir en matris högst upp i ditt skript som du enkelt kan ändra för att ändra bilden som din LED-matris visar. Klistra först in hela koden i Arduino IDE och ladda upp den till din Arduino Mega.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
int toDisplay = {
{1,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0},
{1,0,0,0,0,0,1,0},
{1,0,0,0,0,0,0,0},
{1,1,1,1,0,0,1,0},
{1,0,0,1,0,0,1,0},
{1,0,0,1,0,0,1,0},
{1,0,0,1,0,0,1,0}
};
void setup () {
för (int i = 2; i& lt; = 9; i++) {
pinMode (i, utgång);
pinMode (i + 44, utgång);
digitalWrite(i, låg);
digitalWrite(i + 44, hög);
}
pinMode (A0, ingång);
}
void loop () {
för (int i = 0; i& lt; 8; i++) {
om (i==0) {
digitalWrite (9, låg);
}
annars {
digitalWrite (i + 1, låg);
}
för (int j=0; j<8; j++) {
om (toDisplay == 1) {
digitalWrite (j + 46, låg);
}
annars {
digitalWrite (j + 46, hög);
}
}
digitalWrite (i + 2, hög);
fördröjning(1);
}
}
|
Låt oss sedan gå igenom hur var och en av dessa avsnitt fungerar.
1
2
3
4
5
6
7
8
9
10
|
int toDisplay = {
{1,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0},
{1,0,0,0,0,0,1,0},
{1,0,0,0,0,0,0,0},
{1,1,1,1,0,0,1,0},
{1,0,0,1,0,0,1,0},
{1,0,0,1,0,0,1,0},
{1,0,0,1,0,0,1,0}
};
|
innan någon av huvudslingorna i skissen kommer denna flerdimensionella array att definiera vilka lysdioder som ska tändas och vilka som ska vara mörka. Det finns åtta rader med åtta värden vardera, vilket motsvarar de åtta raderna av lysdioder på matrisen. Genom att lägga ut dem i ett rutnät i skissen gör det det lättare att visualisera vilken form lysdioderna kommer att göra.
1
2
3
4
5
6
7
8
9
|
void setup () {
för (int i = 2; i& lt; = 9; i++) {
pinMode (i, utgång);
pinMode(i+44, utgång);
digitalWrite(i, låg);
digitalWrite(i+44, hög);
}
pinMode (A0, ingång);
}
|
i avsnittet setup () initierar vi stiften vi behöver för matrisen. Eftersom det finns sexton olika stift kan vi göra det mer effektivt än en i taget. Stiften som går till marken kommer att anslutas till stiften 2 till 9. Stiften som skickar ström till matrisen går till stiften 46 till 53. Det här avsnittet använder en slinga för att initiera båda uppsättningarna stift.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
void loop () {
för (int i = 0; i& lt; 8; i++) {
om (i==0) {
digitalWrite (9, låg);
}
annars {
digitalWrite (i + 1, låg);
}
för (int j=0; j<8; j++) {
om (toDisplay == 1) {
digitalWrite (j + 46, låg);
}
annars {
digitalWrite (j + 46, hög);
}
}
digitalWrite (i + 2, hög);
fördröjning(1);
}
}
|
i huvudslingan () i skissen finns det en flerstegslinga. Det första if-uttalandet återställer den senast använda raden till låg, vilket hindrar strömmen från att strömma till den.
nästa kapslade för loop kommer att kontrollera data i matrisen. Om en cell är listad som 1, kommer den att ställa jordledningen för den kolumnen till låg, så att strömmen kan strömma ut. Annars kommer det att ställa in stiftet till högt vilket förhindrar att en krets slutförs längs den kolumnen. Det kommer att göra detta för alla åtta celler i en given rad.
slutligen, den sista digitalWrite() uttalande kommer att vända hela raden på. Alla kolumner som är inställda på låg tänds. Resten blir mörkt. När skissen slingrar igen börjar den omedelbart genom att stänga av den raden.
det sista kommandot är en fördröjning () uttalande som anger fördröjningen mellan varje rad. Den är inställd på 1 millisekund i vårt exempel, för när uttalandet inte finns där blir lysdioderna lite för svaga. Du kan dock öka förseningen för att se vad skissen gör långsammare. Du bör se varje rad lysa upp en i taget innan du stänger av när nästa rad slås på.
ledningarna
för detta projekt är ledningarna relativt enkla, det finns bara mycket av det. Eftersom det finns många stift beskriver vi vad du vill göra för varje komplett krets, snarare än att lista varje enskild tråd som vi brukar göra.
Stift 2 till 9 bör vara din makt stift, och stift 46 till 53 bör vara din marken stift. Kör en tråd från strömstiftet till LED – matrisen (kontrollera för mer information om vilka stift nedan-det här är viktigt), från LED-matrisen till ett 220 ohm motstånd och kör sedan en tråd tillbaka till en stift på Arduino. Stift 2 bör så småningom leda till stift 46, stift 3 bör leda till stift 47 och så vidare.
den viktigaste komplikationen här är med LED-matrisen själv. Kontraintuitivt är stiften på vardera sidan av matrisen inte i en sammanhängande ordning alls. Till exempel vill vi ha stift 2 för att driva vad vi kallar rad A. ändå är stiftet för detta den fjärde stiftet från vänster på toppen av LED-matrisen. Den andra änden av denna krets – som borde leda till Kolumn 1 – är den första stiftet till höger på matrisens botten.
eftersom denna beställning är ganska komplicerad kommer vi att stava ut vilka stift på matrisen varje Arduino-stift ska kopplas till direkt.
längs toppen av matrisen (sidan med numret tryckt på det) finns åtta stift. Från vänster till höger, dessa bör kopplas till följande stift på Arduino:
- stift 7
- Stift 4
- stift 49
- Stift 2
- stift 51
- stift 52
- stift 3
- stift 5
därefter ska den nedre raden med åtta stift på matrisen (sidan utan siffror) kopplas till följande stift (från vänster till höger, med siffrorna fortfarande vända uppåt):
- stift 9
- stift 50
- stift 48
- stift 6
- stift 53
- stift 8
- stift 47
- stift 46
när alla ledningar är anslutna kan du slå på ditt projekt så ser du din LED-matris tändas. Försök ändra arrangemanget av 1s i den ursprungliga matrisen och ladda upp skriptet igen för att skapa olika former. Du kan också justera längden på kommandot delay () för att se varje rad lysa upp en i taget.