/* Volkomen rood kruispunt
Sketch voor een kruispunt met 1 verkeerslicht voor auto's
en 1 verkeerslicht voor fietsers
*/
const int autoRood = 2; // rood licht autoweg
const int autoOranje = 3; // oranje licht autoweg
const int autoGroen = 4; // groen licht autoweg
const int fietsRood = 5; // rood licht fietspad
const int fietsOranje = 6; // oranje licht fietspad
const int fietsGroen = 7; // groen licht fietspad
const int lichtDrempel = 100; // de grens donker/licht
const int accel = 5; // vermenigvuldigingsfactor om testen sneller te doen
// variabele voor de LDR-ingang
int sensorPin = A1;
// variabele voor de waarde van de LDR
int sensorLevel = 0;
void setup(){
// initialiseer alle gebruikte poorten
pinMode(autoRood,OUTPUT);
pinMode(autoOranje,OUTPUT);
pinMode(autoGroen,OUTPUT);
pinMode(fietsRood,OUTPUT);
pinMode(fietsOranje,OUTPUT);
pinMode(fietsGroen,OUTPUT);
pinMode(sensorPin, INPUT);
// begin met alle lichten op oranje
digitalWrite(autoRood, LOW);
digitalWrite(autoOranje, HIGH);
digitalWrite(autoGroen, LOW);
digitalWrite(fietsRood, LOW);
digitalWrite(fietsOranje, HIGH);
digitalWrite(fietsGroen, LOW);
delay(35*accel); // wacht 3.5 seconden voor alle lichten op rood gaan
digitalWrite(autoRood, HIGH);
digitalWrite(autoOranje, LOW);
digitalWrite(autoGroen, LOW);
digitalWrite(fietsRood, HIGH);
digitalWrite(fietsOranje, LOW);
digitalWrite(fietsGroen, LOW);
delay(30*accel); // wacht 3 seconden en geef de auto's groen licht
digitalWrite(autoRood, LOW);
digitalWrite(autoOranje, LOW);
digitalWrite(autoGroen, HIGH);
digitalWrite(fietsRood, HIGH);
digitalWrite(fietsOranje, LOW);
digitalWrite(fietsGroen, LOW);
}
void loop(){
// lees de waarde van de LDR:
sensorLevel = analogRead(sensorPin);
// controleer of het lichtniveau boven de drempelwaarde ligt
if (sensorLevel > lichtDrempel){
// cyclus start; het is licht, of er komt een fiets aan
digitalWrite(autoRood, LOW);
digitalWrite(autoOranje, HIGH); // auto op oranje
digitalWrite(autoGroen, LOW);
digitalWrite(fietsRood, HIGH); // fiets nog rood
digitalWrite(fietsOranje, LOW);
digitalWrite(fietsGroen, LOW);
delay(35*accel); // wacht 3.5 seconden
digitalWrite(autoRood, HIGH); // auto op rood
digitalWrite(autoOranje, LOW);
digitalWrite(autoGroen, LOW);
digitalWrite(fietsRood, HIGH); // fiets nu ook rood
digitalWrite(fietsOranje, LOW);
digitalWrite(fietsGroen, LOW);
delay(10*accel); // 1 seconde alles rood om kruispunt vrij te maken
digitalWrite(autoRood, HIGH); // auto op rood
digitalWrite(autoOranje, LOW);
digitalWrite(autoGroen, LOW);
digitalWrite(fietsRood, LOW);
digitalWrite(fietsOranje, LOW);
digitalWrite(fietsGroen, HIGH); // fiets nu groen
delay(200*accel); // wacht 20 seconden
digitalWrite(autoRood, HIGH); // auto op rood
digitalWrite(autoOranje, LOW);
digitalWrite(autoGroen, LOW);
digitalWrite(fietsRood, LOW);
digitalWrite(fietsOranje, HIGH); // fiets nu oranje
digitalWrite(fietsGroen, LOW);
delay(35*accel); // wacht 3.5 seconden
digitalWrite(autoRood, HIGH); // auto op rood
digitalWrite(autoOranje, LOW);
digitalWrite(autoGroen, LOW);
digitalWrite(fietsRood, HIGH); // fiets nu ook rood
digitalWrite(fietsOranje, LOW);
digitalWrite(fietsGroen, LOW);
delay(10*accel); // 1 seconde alles rood om kruispunt vrij te maken
digitalWrite(autoRood, LOW);
digitalWrite(autoOranje, LOW);
digitalWrite(autoGroen, HIGH); // auto op groen
digitalWrite(fietsRood, HIGH); // fiets nu rood
digitalWrite(fietsOranje, LOW);
digitalWrite(fietsGroen, LOW);
delay(1200*accel); // wacht 2 minuten voor de volgende ronde
} else {
// het is donker, geef auto groen
digitalWrite(autoRood, LOW);
digitalWrite(autoOranje, LOW);
digitalWrite(autoGroen, HIGH); // auto op groen
digitalWrite(fietsRood, HIGH); // fiets nu rood
digitalWrite(fietsOranje, LOW);
digitalWrite(fietsGroen, LOW);
}
}