#include <Servo.h>
// Aan welke pin is de drukknop verbonden die het aankomen van de trein simuleert
int Aankomst_pin = 2;
// Aan welke pin is de drukknop verbonden die het vertrekken van de trein simuleert
int Vertrek_pin = 3;
// De pinnen waar de LEDjes aan verbonden zijn
int LEDr1 = 12;
int LEDr2 = 13;
int LEDy = 8;
// De pin waar de servomotor (slagboom) aan verbonden is
int Servo_pin = 4;
// Je moet een object van het type Servo aanmaken om de bibliotheek Servo.h
// te kunnen gebreuken
Servo Slagboom;
//Deze boolean maak je aan om bij te houden dat de slagboom open of dicht is
boolean Slagboom_open = true;
//De instructies die moeten uitgevoerd worden wanneer een interrupt gebeurd
// worden opgeslagen in een functie. Deze functie moet gekoppeld worden aan
//de interrupt die hoort bij de aankomst knop
//
void Naar_beneden (){
//Als de trein eraankomt moet de slagboom sluiten
Slagboom_open = false;
//Dit zorgt ervoor dat de positie van de servomotor sluit (0°)
Slagboom.write(0);
// Dit zorgt voor de initiale status van de LEDs als de slagboom gesloten is
digitalWrite(LEDy, LOW);
digitalWrite(LEDr1, LOW);
digitalWrite(LEDr2, HIGH);
}
//Deze functie moet gekoppeld worden aan
//de interrupt die hoort bij de vertrek knop
void Naar_boven (){
//Als de trein vertrekt moet de slagboom open gaan
Slagboom_open = true;
//Dit zorgt ervoor dat de positie van de servomotor open gaat (90°)
Slagboom.write(90);
// Dit zorgt voor de initiale status van de LEDs als de slagboom open is
digitalWrite(LEDy, HIGH);
digitalWrite(LEDr1, LOW);
digitalWrite(LEDr2, LOW);
}
void setup()
{
//instellen van de juiste inputs en outputs
pinMode(Aankomst_pin, INPUT);
pinMode(Vertrek_pin, INPUT);
pinMode(LEDr1, OUTPUT);
pinMode(LEDr2, OUTPUT);
pinMode(LEDy, OUTPUT);
// Deze instructie stelt in dat je de Servo_pin gebruikt om een Servomotor aan te sturen
Slagboom.attach(Servo_pin);
// Deze instructie zorgt ervoor dat de servomotor draait naar positie 90°
Slagboom.write(90);
// Deze instructie stelt de interrupt in voor pin 2
// Als er aan pin 2 een falling edge wordt gedetecteerd
// zal de interrupt er voor zorgen dat de code in de functie Naar_beneden wordt uitgevoerd
attachInterrupt(0, Naar_beneden, FALLING);
// Deze instructie stelt de interrupt in voor pin 3
// Als er aan pin 3 een falling edge wordt gedetecteerd
// zal de interrupt er voor zorgen dat de code in de functie Naar_boven wordt uitgevoerd
attachInterrupt(1, Naar_boven, FALLING);
}
void loop()
{
// Dit wordt uitgevoerd wanneer de slagboom open staat
if(Slagboom_open) {
//deze instructie leest eerst wat de status is van pin LEDy (HIGH of LOW) keert deze om met ^1 (van HIGH naar LOW en van LOW naar HIGH),
// en schrijft deze weg naar pin LEDy
// dit zorgt voor het pinken van de LEDjes
digitalWrite(LEDy, (digitalRead(LEDy))^1);
delay(1000);
}
//Dit wordt uitgevoerd wanneer de slagboom dicht staat
else {
//Gelijkaardig als hierboven
digitalWrite(LEDr1, (digitalRead(LEDr1))^1);
digitalWrite(LEDr2, (digitalRead(LEDr2))^1);
delay(1000);
}
}