Voor een orientatieonderdeel op mijn opleiding wordt er gewerkt met Arduino.
Onderstaand heb ik een opstelling gemaakt + Code.
De opdracht is als volgt:
9.1.1 Sluit drie LED’s (of één RGB LED) aan en maak een programma zodat de LED’s één
voor één oplichten. Na LED nummer drie licht LED nummer één weer op enz. Maak
hierbij handig gebruik van een variabele!
9.1.2 Voeg een button toe aan de vorige challenge en zorg dat met elke druk op de button
de volgende LED of kleur gaat branden (dus niet meer automatisch). Na LED nummer
drie licht LED nummer één weer op. De volgorde is dus 1 – 2 – 3 – 1 – 2 enz.
LET OP! Deze challenge is misschien lastiger dan je denkt. Het kan zijn dat je nog
eens moet kijken naar challenges 8.1 hierboven.
Tot en met hier werkt het prima. 9.1.3 is de uitbreiding van deze opdracht.
9.1.3 Uitbreiding van de vorige challenge: voeg nog een button toe en zorg ervoor dat bij
een druk op deze button de richting van het oplichten van de LED’s telkens omkeert.
Na de eerste druk op de ‘omkeer’ button wordt de volgorde dus 3 – 2 – 1 – 3 – 2 enz.
Na nóg een druk op de ‘omkeer’ button is de volgorde weer 1 – 2 – 3 – 1 – 2 enz.
Tip:
Gebruik een extra variabele waarin je de richting opslaat.
De linkerbutton moet er voor gaan zorgen dat de richting wordt omgekeerd.
Zijn er bepaalde manieren om dit simpel en effectief uit te voeren?
Ik heb op veel verschillende manieren gezocht maar het niveau is dan te gevorderd om het te begrijpen
const int buttonPin = 4; // the number of the pushbutton pin
const int buttonPin2 = 2;
const int GreenLed = 13; // the number of the LED pin
const int YellowLed = 12;
const int RedLed = 8;
// variables will change:
int initial = 0; //hold current initial
int oldstate = 0; //hold last initial
int buttonstate = 0; // variable for reading the pushbutton status
void setup() {
pinMode(GreenLed, OUTPUT); // initialize the LED pin as an output:
pinMode(YellowLed, OUTPUT);
pinMode(RedLed, OUTPUT);
pinMode(buttonPin, INPUT); // initialize the pushbutton pin as an input:
}
void loop() {
//debouncing routline to read button
buttonstate = digitalRead(buttonPin); //state the initial of button
buttonstate = digitalRead(buttonPin2);
if (buttonstate == HIGH) { //check if it has been pressed
delay(50);
buttonstate = digitalRead(buttonPin);//state button again
if (buttonstate == LOW) { //if it is 0 considered one press
initial = oldstate + 1; //increase initial by 1
if (buttonstate == HIGH) { //check if it has been pressed
delay(50);
buttonstate = digitalRead(buttonPin2);//state button again
if (buttonstate == LOW) { //if it is 0 considered one press
initial = oldstate - 1; //decrease initial by 1
}
} else { //check if it has been NOT pressed
delay(100);
}
switch (initial) { //react to button press a initial
case 1: //if initial is 1
digitalWrite(GreenLed, HIGH);//on
digitalWrite(YellowLed, LOW);//off
digitalWrite(RedLed, LOW);//off
oldstate = initial; //set oldstate initial as current initial
break;
case 2:
digitalWrite(GreenLed, LOW);
digitalWrite(YellowLed, HIGH);
digitalWrite(RedLed, LOW);
oldstate = initial;
break;
case 3:
digitalWrite(GreenLed, LOW);
digitalWrite(YellowLed, LOW);
digitalWrite(RedLed, HIGH);
oldstate = initial;
break;
default: //if initial is not 1 2 3
digitalWrite(GreenLed, LOW); //off
digitalWrite(YellowLed, LOW);
digitalWrite(RedLed, LOW);
oldstate = 0; //reset to all off/initial 0
break;
}
}
}
}