Arduino™ LED Matrix

Deze Arduino™ les word gelijk iets complexer, we gaan namelijk multiplexen..

Als we een LED 10 milliseconden aanzetten dan zien we ongeveer 20 milliseconden licht. Als we een LED laten knipperen om de 10 milliseconden, dan is met het blote oog niet te zien dat de LED knippert.
// Deze LED lijkt gewoon aan te zijn.

 void loop(){
 digitalWrite(ledPin,HIGH);
 delay(10);
 digitalWrite(ledPin,LOW);
 delay(10);
 }

In de bovenstaande code zie je dat de LED de helft van de tijd uit is, deze LED verbruikt dus ook minder stroom. In de tijd dat de LED uit is kunnen we deze PIN ook gebruiken voor een ander doel zoals in dit voorbeeld:

Twee LED’s aangesloten, 1 tussen Pin 2(+) en Pin 3(-) en de andere LED tussen dezelfde Pin 2(-) en Pin 3(+). Als we nu de + en – wisselen om de 10 milliseconden dan lijken beide leds aan te zijn.

 void loop(){
 digitalWrite(Pin2,HIGH);
 digitalWrite(Pin3,LOW);
 delay(10);
 digitalWrite(Pin2,LOW);
 digitalWrite(Pin3,HIGH);
 delay(10);
 }

De LED doet nu hetzelfde als in het eerste voorbeeld, alleen kunnen we nu multiplexen. Voor 1, 2 of 4 LED heeft dit als enigste voordeel dat het energie bespaard, maar als we nu eens 25 LEDS aan gaan sluiten met 10 Pinnen van de Arduino™. Het idee is om de LEDS te verdelen in 5 rijen(-) en 5 kolommen(+) zoals in de onderstaande afbeelding.

Hardware Setup

De LED’s moeten gesoldeerd worden volgens de bovenstaande afbeelding. De pluszijde van alle LED’s buig je kort in de ene richting en de minzijde laad je iets verder uitsteken dan de plus-zijdes en buig ze dan 90 graden de andere kant op. Zorg dat de plussen en minnen elkaar niet kunnen raken. Leg de matrix zo neer dat de plussen de kolommen zijn en de minnen de rijen met aan elke rij een weerstand.

Probeer de onderstaande code om de letter X te maken:

 int kolPin1 = 2;
 int kolPin2 = 3;
 int kolPin3 = 4;
 int kolPin4 = 5;
 int kolPin5 = 6;
 
 int rijPin1 = 7;
 int rijPin2 = 8;
 int rijPin3 = 9;
 int rijPin4 = 10;
 int rijPin5 = 11;
 
 vertragingstijd = 2;
 
 void setup() {
 pinMode(kolPin1, OUTPUT);
 pinMode(kolPin2, OUTPUT);
 pinMode(kolPin3, OUTPUT);
 pinMode(kolPin4, OUTPUT);
 pinMode(kolPin5, OUTPUT);
 
 pinMode(rijPin1, OUTPUT);
 pinMode(rijPin2, OUTPUT);
 pinMode(rijPin3, OUTPUT);
 pinMode(rijPin4, OUTPUT);
 pinMode(rijPin5, OUTPUT);
 }
 
 void loop()
 {
 // ###################################### STAP 1 #######################################
 // Om de letter X te schrijven moeten de volgende leds op kolom 1 aan zijn.
 //
 // A U U U A
 // U A U A U
 // U U A U U
 // U A U A U
 // A U U U A
 // 
 // Stap 1, Kolom 1 is de plus dus die moet hoog zijn. Rij 1 en 5 moeten aan dus die moeten laag zijn.
 digitalWrite(kolPin1, HIGH); digitalWrite(kolPin2, LOW); digitalWrite(kolPin3, LOW); digitalWrite(kolPin4, LOW);digitalWrite(kolPin5, LOW);
 
 digitalWrite(rijPin1, LOW);
 digitalWrite(rijPin2, HIGH);
 digitalWrite(rijPin3, HIGH);
 digitalWrite(rijPin4, HIGH);
 digitalWrite(rijPin5, LOW);
 delay(vertragingstijd);
 
 // ###################################### STAP 2 #######################################
 // Om de letter X te schrijven moeten de volgende leds op kolom 2 aan zijn.
 //
 // A U U U A
 // U A U A U
 // U U A U U
 // U A U A U
 // A U U U A
 // 
 // Stap 2, Kolom 2 is de plus dus die moet hoog zijn. Rij 2 en 4 moeten aan dus die moeten laag zijn.
 digitalWrite(kolPin1, LOW); digitalWrite(kolPin2, HIGH); digitalWrite(kolPin3, LOW); digitalWrite(kolPin4, LOW);digitalWrite(kolPin5, LOW);
 
 digitalWrite(rijPin1, HIGH);
 digitalWrite(rijPin2, LOW);
 digitalWrite(rijPin3, HIGH);
 digitalWrite(rijPin4, LOW);
 digitalWrite(rijPin5, HIGH);
 delay(vertragingstijd);
 
 // ###################################### STAP 3 #######################################
 // Om de letter X te schrijven moeten de volgende leds op kolom 3 aan zijn.
 //
 // A U U U A
 // U A U A U
 // U U A U U
 // U A U A U
 // A U U U A
 // 
 // Stap 3, Kolom 3 is de plus dus die moet hoog zijn. Rij 3 moet aan dus die moet laag zijn.
 digitalWrite(kolPin1, LOW); digitalWrite(kolPin2, LOW); digitalWrite(kolPin3, HIGH); digitalWrite(kolPin4, LOW);digitalWrite(kolPin5, LOW);
 
 digitalWrite(rijPin1, HIGH);
 digitalWrite(rijPin2, HIGH);
 digitalWrite(rijPin3, LOW);
 digitalWrite(rijPin4, HIGH);
 digitalWrite(rijPin5, HIGH);
 delay(vertragingstijd);
 
 // ###################################### STAP 4 #######################################
 // Om de letter X te schrijven moeten de volgende leds op kolom 4 aan zijn.
 //
 // A U U U A
 // U A U A U
 // U U A U U
 // U A U A U
 // A U U U A
 // 
 // Stap 4, Kolom 4 is de plus dus die moet hoog zijn. Rij 2 en 4 moeten aan dus die moeten laag zijn.
 digitalWrite(kolPin1, LOW); digitalWrite(kolPin2, LOW); digitalWrite(kolPin3, LOW); digitalWrite(kolPin4, HIGH);digitalWrite(kolPin5, LOW);
 
 digitalWrite(rijPin1, HIGH);
 digitalWrite(rijPin2, LOW);
 digitalWrite(rijPin3, HIGH);
 digitalWrite(rijPin4, LOW);
 digitalWrite(rijPin5, HIGH);
 delay(vertragingstijd);
 
 // ###################################### STAP 5 #######################################
 // Om de letter X te schrijven moeten de volgende leds op kolom 5 aan zijn.
 //
 // A U U U A
 // U A U A U
 // U U A U U
 // U A U A U
 // A U U U A
 // 
 // Stap 5, Kolom 5 is de plus dus die moet hoog zijn. Rij 1 en 5 moeten aan dus die moeten laag zijn.
 digitalWrite(kolPin1, LOW); digitalWrite(kolPin2, LOW); digitalWrite(kolPin3, LOW); digitalWrite(kolPin4, LOW);digitalWrite(kolPin5, HIGH);
 
 digitalWrite(rijPin1, LOW);
 digitalWrite(rijPin2, HIGH);
 digitalWrite(rijPin3, HIGH);
 digitalWrite(rijPin4, HIGH);
 digitalWrite(rijPin5, LOW);
 delay(vertragingstijd);
 
 }

Door te spelen met de variabele “vertragingstijd” kan je uitvinden bij welke vertraging je gaat zien dat er door de rijen heen gelopen word.

Wil je meer letters achter elkaar weergeven dan kan je een teller toevoegen. Je laat dan dit deel van de code bijvoorbeeld 100 keer afspelen (is 1 seconden) en daarna schrijf je de volgende letter.

 // Voor de code
 teller = 0;
 
 // setup blijft gelijk.
 
 // in de loop:
 
 if (teller < 100) { 
 // de code voor de eerste letter
 teller++
 }
 
 // tweede letter
 if (teller >= 100) { 
 // de code voor de tweede letter
 teller++
 }
 
 if (teller == 200){teller = 0;}

Geef een reactie