/* CVO De Verdieping
Object georiënteerd programmeren - looplicht versie 3
De eerste versie implementeert een looplichtje van 4 LEDs dat aangestuurd
kan worden met behulp van twee drukknoppen. Iedere drukknop laat het loop-
licht een stap in een andere richting bewegen.
Drukknoppen en LED's worden voorgesteld door een structure
We maken gebruik van een enumeratie voor de drukknoptoestand en er is een
functie om de toestand te bepalen.
Davy Wolfs
2024
*/
#include "knop.h"
#include "led.h"
// CONSTANTEN
const int PIN_LED0 = 9;
const int PIN_LED1 = 10;
const int PIN_LED2 = 11;
const int PIN_LED3 = 12;
const int PIN_KNOP_L = 4;
const int PIN_KNOP_R = 3;
const unsigned long DENDER_TIJD = 40; //ms
// Objecten
LedT led0 = { PIN_LED0 };
/*Je declareert hiermee een object (dus GEEN klasse) dat led0 zal heten volgens de structuur die beschreven is in led.h.
Daarna vul je de eigenschap PIN -zie led.h- met de waarde van PIN_LED1 of met andere woorden met 9 want de constante PIN_LED0 heeft de waarde 9.
Simpel gezegd: De waarde van led0.PIN is vanaf nu 9*/
LedT led1 = { PIN_LED1 };// Idem als hierboven maar dan pin 10
LedT led2 = { PIN_LED2 };// Idem als hierboven maar dan pin 11
LedT led3 = { PIN_LED3 };// Idem als hierboven maar dan pin 12
/* Dus... vanaf nu kan je bijvoorbeeld dit doen: led3.PIN = led3.PIN - led2.PIN en dan zal led3.PIN de waarde 1 bevatten omdat 12 min 11 is 1.
Drukknop knopL(PIN_KNOP_L);// Omdat "knop.h" is included kent hij de opbouw van knopL.
/* */
Drukknop knopR(PIN_KNOP_R);
// (GLOBALE) VARIABELEN
int loopLichtPositie = 0;
// VOORBEREIDING
void setup() {
pinMode(led0.PIN, OUTPUT);
pinMode(led1.PIN, OUTPUT);
pinMode(led2.PIN, OUTPUT);
pinMode(led3.PIN, OUTPUT);
}
// UITVOERING
void loop() {
// INVOER
knopL.lees();
knopR.lees();
// VERWERKING
if (knopL.getToestand() == STIJGENDE_FLANK) {
loopLichtPositie++;
loopLichtPositie %= 4;
}
if (knopR.getToestand() == STIJGENDE_FLANK) {
loopLichtPositie--;
if (loopLichtPositie < 0) {
loopLichtPositie = 3;
}
}
switch (loopLichtPositie) {
case 0:
led0.waarde = HIGH;
led1.waarde = LOW;
led2.waarde = LOW;
led3.waarde = LOW;
break;
case 1:
led0.waarde = LOW;
led1.waarde = HIGH;
led2.waarde = LOW;
led3.waarde = LOW;
break;
case 2:
led0.waarde = LOW;
led1.waarde = LOW;
led2.waarde = HIGH;
led3.waarde = LOW;
break;
case 3:
led0.waarde = LOW;
led1.waarde = LOW;
led2.waarde = LOW;
led3.waarde = HIGH;
break;
default:
led0.waarde = HIGH;
led1.waarde = HIGH;
led2.waarde = HIGH;
led3.waarde = HIGH;
break;
}
// UITVOER
digitalWrite(led0.PIN, led0.waarde);
digitalWrite(led1.PIN, led1.waarde);
digitalWrite(led2.PIN, led2.waarde);
digitalWrite(led3.PIN, led3.waarde);
delay(DENDER_TIJD);
}
// FUNCTIES