Les 3: Programmeren verkeerslicht zonder voids

Een code met meerdere hardware componenten maken? Een interessante topic voor les 3. In les 1 hebben we gezien hoe we eenvoudig een ledje laten werken. Deze code werkt echter maar voor één en slechts één ledje. In les 3 tonen we hoe je meerdere ledjes kan combineren in één code. Meerdere ledjes… Een verkeerslicht programmeren is hiervan een geschikt voorbeeld!

Programmeren verkeerslicht:

Nu gaan we aan de slag met het programmeren van ons verkeerslicht of stoplicht. Zoals altijd zetten we onze woorden gelijk aan waardes die de Arduino-verwerker begrijpt. Zoals je ziet zullen we hier werken met drie ledjes: een groen, geel en rood ledje, de kleuren van een verkeerslicht. Elk van deze ledjes zijn geschakeld op een andere poort, respectievelijk 12, 11 en 10. 

const int lichtGroen = 12;
const int lichtGeel = 11;
const int lichtRood = 10;

We veranderden echter de vermelding van onze woorden. “int lichtGroen = 12;” is verandert naar “const int lichtGroen = 12;”. Dit verandert echter niets aan de grote van de overeenkomstige waardes, deze zijn nog steeds integers. “const” is slechts een extra voorwaarde. Het zorgt ervoor dat de waardes doorheen het programma constant blijven. Na het doorlopen van dit stukje code zijn ze dus niet meer “variabelen”, maar “constanten”.

Notities:

Constante variabelen. Is dat nu zo belangrijk? Wel, bij korte codes, die gemaakt worden door éénzelfde persoon en geen periodieke testen ondergaan, zeker niet. Dit laatste lijkt misschien dubieus, maar de kleine fouten, gemaakt door het niet gebruiken van constante variabelen, worden vaak opgemerkt bij de evaluatie van de volledige code. Bij periodieke testen is hier vaak geen tijd voor en wordt ook vaak niet de totale code getest.

Bovendien vergemakkelijkt deze extra voorwaarde ook het werken met meerdere personen aan eenzelfde code. Als je partner bijvoorbeeld een variabele, in zijn deel van de code, anders declareert dan bij jou, dan zou jouw programma nadat het eenmaal doorlopen werd niet meer werken, de void Setup, met jouw declaratie, word namelijk slecht eenmaal doorlopen. Dit zorgt voor problemen, codes die perfect zijn, kunnen hierdoor al vlug de mist in gaan. De fout wordt dan vaak gezocht op de verkeerde plaats en dit vergt tijd, werkt frustrerend en moet natuurlijk vermeden worden. Meer uitleg over ‘integers’ en ‘constanten’ vindt je in onze sectie programmeeromgeving.

Opbouw:

We gaan nu verder met het programmeren van het verkeerslicht, namelijk de code. We declareren onze drie ledjes als OUTPUT in onze void setup. Zo weet de arduino-verwerker dat hij op deze poorten geen data moet lezen, maar data moet sturen.

digitalWrite ( lichtGroen , HIGH);

We gebruiken steeds digitalWrite(); om data te sturen naar onze ledjes. De ledjes die we gebruiken, hebben namelijk maar twee standen, uit en aan. Daardoor kunnen we ons commando omzetten naar een binaire taal, respectievelijk 0 en 1.

digitalWrite ( lichtGroen , HIGH);
delay ( 2000);
digitalWrite ( lichtGroen , LOW);
digitalWrite ( lichtGeel , HIGH);
delay (500);
digitalWrite ( lichtGeel , LOW);

Eerst sturen we het commando om het ledje te laten werken. Daarna zorgen we voor een pauze van 2000 ms of 2 seconden om vervolgens het ledje weer te doven. Tussen deze commando’s is er bij het gele ledje een kortere pauze, net zoals de duur van het gele verkeerslicht korter is dan deze van het rode en groene licht.

Notities:

Zoals je kunt zien gebruiken we steeds dezelfde drie regels:

digitalWrite ( ledje , HIGH);
delay ( pauze);
digitalWrite ( ledje , LOW);

Meer uitleg over deze herhaling en hoe we deze vereenvoudigen vind je in les 4..

Code:

// Eerst zetten we onze woorden om in taal die arduino begrijpt.
const int lichtGroen = 12;
const int lichtGeel = 11;
const int lichtRood = 10;

void setup() {
// Aangezien dat deze ” loop ” slechts eenmaal doorlopen wordt, declareer je hier jouw poorten.
pinMode ( lichtGroen, OUTPUT);
pinMode ( lichtGeel , OUTPUT);
pinMode ( lichtRood , OUTPUT);
}

void loop() {
// Vervolgens zetten we hier de opdrachten die uitgevoerd moeten worden. Deze “loop” wordt dus steeds herhaald.
digitalWrite ( lichtGroen , HIGH);
delay ( 2000);
digitalWrite ( lichtGroen , LOW);
digitalWrite ( lichtGeel , HIGH);
delay (500);
digitalWrite ( lichtGeel , LOW);
digitalWrite ( lichtRood , HIGH);
delay ( 2000);
digitalWrite ( lichtRood , LOW); 
}

Schakeling:

De schakeling die bij deze code hoort bestaat uiteraard uit 3 ledjes, elk van deze ledjes schakelen we in serie met een weerstand van 220 ohm. Het groene, gele en rode ledjes zijn respectievelijk op poorten 12,11 en 10 geschakeld en met de ground verbonden.

programmeren verkeerslicht
Basislessen Arduino 25%

Ook raden we jou aan om bepaalde waardes of commando’s te vervangen of te veranderen. Zo wordt het snel duidelijke welke invloed een commando heeft op de werking van de schakeling.

Bij problemen met het programmeren van het verkeerslicht, zeker niet aarzelen om contact op te nemen.

Als je het werken met het ledjes voldoende beheerst, ga dan over naar les 4!

Geplaatst in Programmeren Arduino voor dummies.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *