Steun onze actie WeGoSTEM

Voor onze actie WeGoSTEM zoeken we nog vrijwilligers. Doe mee via WeGoSTEM.be/meedoen

Een Knight Rider programmeren op de LED's

In deze tutorial breiden we de installatie-tutorial waarin je een knipperend LED'je maakte, uit tot een Knight Rider. Hiervoor zullen we verschillende concepten van de programmeertaal C++ gebruiken.


Benodigdheden

  1. Een Dwenguino-bord
  2. De bijgeleverde USB-kabel

Knight Rider

Start met een nieuwe Arduino schets en voeg er de volgende bibliotheken aan toe of ga meteen naar het Knight Rider voorbeeld in de Arduino IDE (Arduino IDE > File > Examples > Dwenguino).

  1. #include <LiquidCrystal.h>
  2. #include <Wire.h>
  3. #include <Dwenguino.h>

We starten de code met het initialiseren van de pinnen in de setup-functie. Dit deel van de code wordt maar enkel de eerste keer bij het opstarten van het Dwenguino-bord uitgevoerd.

  1. void setup() {
  2. // put your setup code here, to run once:
  3. initDwenguino();
  4. LEDS = 0b00000001;
  5. }

Wij roepen de functie initDwenguino() op om de pinnen voor de LED's te configureren als digitale outputs. Deze functie initialiseert ook alle andere functionaliteiten van het Dwenguino-bord zoals het LCD-scherm dat we in deze tutorial niet zullen gebruiken.

Daarna initialiseren we de variabele LEDS met de waarde 0b00000001. Deze zal LED met nummer LD0 op het Dwenguino-bord doen oplichten.

Daarna schrijven we de hoofdbrok van het programma, de main-functie. Deze lus bevat de eigenlijke logica van het programma en zal blijvend herhaald worden tot je het Dwenguino-bord uitschakelt of reset.

  1. void loop() {
  2. for (unsigned char i=0; i<7; i++) {
  3. LEDS <<= 1; // Rotate to the right
  4. delay(50);
  5. }
  6. for (unsigned char i=0; i<7; i++) {
  7. LEDS >>= 1; // Rotate to the left
  8. delay(50);
  9. }
  10. }

In deze lus maken we eerst de variabele "i" die we zullen gebruiken als teller. We kiezen een "unsigned char" als datatype voor deze variabele. Dit is het kleinste datatype in onze microcontroller. Het kan alle getallen opslaan tussen 0 tot en met 255. In dit voorbeeld zal "i" enkel tellen van 0 tot en met 6, dus dat is meer dan voldoende.

De hoofdlus bevat twee "for" lussen. De code in elk van die lussen wordt 7 keer uitgevoerd — i=0 tot en met i=6 — voor we naar de volgende lus springen. In de eerste lus zullen we de inhoud van LEDS naar links opschuiven met 1 bit per keer met de binaire shift-operator "<<". Elke keer als de inhoud 1 bit naar links opschuift, wordt er een 0 toegevoegd langs rechts. En omgekeerd in de andere lus. In de wiskunde komt deze operatie overeen met een vermenigvuldiging met 2. We gebruiken ook de functie "delay(50)" om telkens 50 milliseconden te wachten voor we een volgende bit opschuiven.

In de tweede lus doen we net het omgekeerde dan in de eerste lus. Elke iteratie schuiven we de LEDS 1 bit op naar rechts. Dit komt overeen met een deling door 2. Op het bord komt dit er op neer dat de LEDs zullen oplichten van rechts naar links (van LD7 tot en met LD0).

Omdat de twee "for" elke keer afwisselend herhaald worden, lijkt het alsof de LEDs van de ene kant naar de andere kant bewegen. Net zoals de echte Knight Rider uit de film!