// Verkeerslichten pinnen
#define LED_PIN_ROOD1 22
#define LED_PIN_ORANJE1 15
#define LED_PIN_GROEN1 2
#define LED_PIN_ROOD2 4
#define LED_PIN_ORANJE2 16
#define LED_PIN_GROEN2 17
// Drukknoppen pinnen
#define button1 5
#define button2 18
// Blauwe LED pin
#define LED_PIN_BLAUW 19
// Variabelen voor verkeerslichtmodi
bool isFast = false; // Houdt de snelheid van het verkeerslicht bij (snel/traag)
bool isBlinking = false; // Houdt de knippermodus van het verkeerslicht bij (aan/uit)
int x;
void setup()
{
// Initialiseer pinnen
pinMode(LED_PIN_ROOD1, OUTPUT);
pinMode(LED_PIN_ORANJE1, OUTPUT);
pinMode(LED_PIN_GROEN1, OUTPUT);
pinMode(LED_PIN_ROOD2, OUTPUT);
pinMode(LED_PIN_ORANJE2, OUTPUT);
pinMode(LED_PIN_GROEN2, OUTPUT);
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
pinMode(LED_PIN_BLAUW, OUTPUT);
Serial.begin(115200);
// vrij maken van kruispunt
Serial.println("initialiseren van de verkeerslichten");
Serial.println("lichten ROOD actief maken om kruispunt vrij te maken");
digitalWrite(LED_PIN_ROOD1, HIGH);
digitalWrite(LED_PIN_ROOD2,HIGH);
delay(3000);
}
void loop()
{
// Controleer de status van drukknop 1 (snelheid)
if (digitalRead(button1) == LOW)
{
isFast = !isFast;
digitalWrite(LED_PIN_BLAUW, isFast ? HIGH : LOW);
delay(20); // Debouncing delay
dubbeleSnelheid();
}
// Controleer de status van drukknop 2 (knippermodus)
if (digitalRead(button2) == LOW)
{
isBlinking = !isBlinking;
delay(20); // Debouncing delay
knipperen();
}
// Schakel tussen knippermodus en gewone werking
if (isBlinking)
{
knipperen();
}
else
{
if (isFast)
{
dubbeleSnelheid();
}
else
{
gewoneWerking();
}
}
}
void gewoneWerking()
{
Serial.println("Gewone werking");
//step 1
Serial.println("Step 1");
digitalWrite(LED_PIN_ROOD1, HIGH);
digitalWrite(LED_PIN_ORANJE1, LOW);
digitalWrite(LED_PIN_GROEN1, LOW);
digitalWrite(LED_PIN_ROOD2, LOW);
digitalWrite(LED_PIN_ORANJE2, LOW);
digitalWrite(LED_PIN_GROEN2, HIGH);
Serial.println("Einde Step1");
delay(1000);
//step 2
Serial.println("Step 2");
digitalWrite(LED_PIN_ROOD1, HIGH);
digitalWrite(LED_PIN_ORANJE1, LOW);
digitalWrite(LED_PIN_GROEN1, LOW);
digitalWrite(LED_PIN_ROOD2, LOW);
digitalWrite(LED_PIN_ORANJE2, HIGH);
digitalWrite(LED_PIN_GROEN2, LOW);
Serial.println("Einde Step2");
delay(1000);
//step 3
Serial.println("Step 3");
digitalWrite(LED_PIN_ROOD1, LOW);
digitalWrite(LED_PIN_ORANJE1, LOW);
digitalWrite(LED_PIN_GROEN1, HIGH);
digitalWrite(LED_PIN_ROOD2, HIGH);
digitalWrite(LED_PIN_ORANJE2, LOW);
digitalWrite(LED_PIN_GROEN2, LOW);
Serial.println("Einde Step3");
delay(1000);
//step 4
Serial.println("Step 4");
digitalWrite(LED_PIN_ROOD1, LOW);
digitalWrite(LED_PIN_ORANJE1, HIGH);
digitalWrite(LED_PIN_GROEN1, LOW);
digitalWrite(LED_PIN_ROOD2, HIGH);
digitalWrite(LED_PIN_ORANJE2, LOW);
digitalWrite(LED_PIN_GROEN2, LOW);
Serial.println("Einde Step4");
delay(1000);
//step 5
Serial.println("Step 5");
digitalWrite(LED_PIN_ROOD1, HIGH);
digitalWrite(LED_PIN_ORANJE1, LOW);
digitalWrite(LED_PIN_GROEN1, LOW);
digitalWrite(LED_PIN_ROOD2, HIGH);
digitalWrite(LED_PIN_ORANJE2, LOW);
digitalWrite(LED_PIN_GROEN2, LOW);
Serial.println("Einde Step5");
delay(2000);
}
void trageSnelheid()
{
Serial.println("tragesnelheid");
//step 1
digitalWrite(LED_PIN_ROOD1, HIGH);
digitalWrite(LED_PIN_ORANJE1, LOW);
digitalWrite(LED_PIN_GROEN1, LOW);
digitalWrite(LED_PIN_ROOD2, LOW);
digitalWrite(LED_PIN_ORANJE2, LOW);
digitalWrite(LED_PIN_GROEN2, HIGH);
delay(2000);
//step 2
digitalWrite(LED_PIN_ROOD1, HIGH);
digitalWrite(LED_PIN_ORANJE1, LOW);
digitalWrite(LED_PIN_GROEN1, LOW);
digitalWrite(LED_PIN_ROOD2, LOW);
digitalWrite(LED_PIN_ORANJE2, HIGH);
digitalWrite(LED_PIN_GROEN2, LOW);
delay(2000);
//step 3
digitalWrite(LED_PIN_ROOD1, LOW);
digitalWrite(LED_PIN_ORANJE1, LOW);
digitalWrite(LED_PIN_GROEN1, HIGH);
digitalWrite(LED_PIN_ROOD2, HIGH);
digitalWrite(LED_PIN_ORANJE2, LOW);
digitalWrite(LED_PIN_GROEN2, LOW);
delay(2000);
//step 4
digitalWrite(LED_PIN_ROOD1, LOW);
digitalWrite(LED_PIN_ORANJE1, HIGH);
digitalWrite(LED_PIN_GROEN1, LOW);
digitalWrite(LED_PIN_ROOD2, HIGH);
digitalWrite(LED_PIN_ORANJE2, LOW);
digitalWrite(LED_PIN_GROEN2, LOW);
delay(2000);
//step 5
digitalWrite(LED_PIN_ROOD1, HIGH);
digitalWrite(LED_PIN_ORANJE1, LOW);
digitalWrite(LED_PIN_GROEN1, LOW);
digitalWrite(LED_PIN_ROOD2, HIGH);
digitalWrite(LED_PIN_ORANJE2, LOW);
digitalWrite(LED_PIN_GROEN2, LOW);
delay(4000);
}
void dubbeleSnelheid()
{
Serial.println("dubbele snelheid");
//step 1
digitalWrite(LED_PIN_ROOD1, HIGH);
digitalWrite(LED_PIN_ORANJE1, LOW);
digitalWrite(LED_PIN_GROEN1, LOW);
digitalWrite(LED_PIN_ROOD2, LOW);
digitalWrite(LED_PIN_ORANJE2, LOW);
digitalWrite(LED_PIN_GROEN2, HIGH);
delay(500);
//step 2
digitalWrite(LED_PIN_ROOD1, HIGH);
digitalWrite(LED_PIN_ORANJE1, LOW);
digitalWrite(LED_PIN_GROEN1, LOW);
digitalWrite(LED_PIN_ROOD2, LOW);
digitalWrite(LED_PIN_ORANJE2, HIGH);
digitalWrite(LED_PIN_GROEN2, LOW);
delay(500);
//step 3
digitalWrite(LED_PIN_ROOD1, LOW);
digitalWrite(LED_PIN_ORANJE1, LOW);
digitalWrite(LED_PIN_GROEN1, HIGH);
digitalWrite(LED_PIN_ROOD2, HIGH);
digitalWrite(LED_PIN_ORANJE2, LOW);
digitalWrite(LED_PIN_GROEN2, LOW);
delay(500);
//step 4
digitalWrite(LED_PIN_ROOD1, LOW);
digitalWrite(LED_PIN_ORANJE1, HIGH);
digitalWrite(LED_PIN_GROEN1, LOW);
digitalWrite(LED_PIN_ROOD2, HIGH);
digitalWrite(LED_PIN_ORANJE2, LOW);
digitalWrite(LED_PIN_GROEN2, LOW);
delay(500);
//step 5
digitalWrite(LED_PIN_ROOD1, HIGH);
digitalWrite(LED_PIN_ORANJE1, LOW);
digitalWrite(LED_PIN_GROEN1, LOW);
digitalWrite(LED_PIN_ROOD2, HIGH);
digitalWrite(LED_PIN_ORANJE2, LOW);
digitalWrite(LED_PIN_GROEN2, LOW);
delay(1000);
}
void knipperen()
{
Serial.println("knipperen");
for (x = 0; x < 10; x++)
{
digitalWrite(LED_PIN_ORANJE1, HIGH);
digitalWrite(LED_PIN_ORANJE2, HIGH);
digitalWrite(LED_PIN_ROOD1, LOW);
digitalWrite(LED_PIN_GROEN1, LOW);
digitalWrite(LED_PIN_ROOD2, LOW);
delay(500);
digitalWrite(LED_PIN_ORANJE1, LOW);
digitalWrite(LED_PIN_ORANJE2, LOW);
delay(500);
}
}