// Pin-definities
int knop_1 = 19; // Drukknop snelheid
int knop_2 = 18; // Drukknop knippermodus
int led_blauw = 13;
int led_1_rood = 12;
int led_1_geel = 14;
int led_1_groen = 27;
int led_2_rood = 26;
int led_2_geel = 25;
int led_2_groen = 33;
// tijd snelle werking
unsigned long tijd_groen = 3000; // Groen tijd traag
unsigned long tijd_geel = 1000; // Geel tijd traag
unsigned long tijd_rood = 4000; // Rood tijd traag
bool snelle_modus = false;
bool knipper_modus = false;
unsigned long vorige_tijd = 0;
int fase = 0;
void setup() {
Serial.begin(115200);
pinMode(knop_1, INPUT_PULLUP); // Drukknop snelheid
pinMode(knop_2, INPUT_PULLUP); // Drukknop knippermodus
pinMode(led_blauw, OUTPUT);
pinMode(led_1_rood, OUTPUT);
pinMode(led_1_geel, OUTPUT);
pinMode(led_1_groen, OUTPUT);
pinMode(led_2_rood, OUTPUT);
pinMode(led_2_geel, OUTPUT);
pinMode(led_2_groen, OUTPUT);
}
void loop() {
bool knop_1_status = !digitalRead(knop_1);
bool knop_2_status = !digitalRead(knop_2);
// Toggle snelle modus wanneer knop_1 wordt ingedrukt
if (knop_1_status) {
snelle_modus = !snelle_modus;
digitalWrite(led_blauw, snelle_modus ? HIGH : LOW); // Gebruik led_blauw als statusindicator
delay(200); // Debounce
}
// Toggle knipper modus wanneer knop_2 wordt ingedrukt
if (knop_2_status) {
knipper_modus = !knipper_modus;
delay(200); // Debounce
}
// Knippermodus heeft voorrang
if (knipper_modus) {
knipperLichten();
} else {
normaleCyclus();
}
}
void knipperLichten() {
static bool knipperLichtenStatus = false;
if (millis() - vorige_tijd >= 500) { // Knipper elke 500ms
vorige_tijd = millis();
knipperLichtenStatus = !knipperLichtenStatus;
digitalWrite(led_1_geel, knipperLichtenStatus ? HIGH : LOW);
digitalWrite(led_2_geel, knipperLichtenStatus ? HIGH : LOW);
digitalWrite(led_1_groen, LOW);
digitalWrite(led_1_rood, LOW);
digitalWrite(led_2_groen, LOW);
digitalWrite(led_2_rood, LOW);
}
}
void normaleCyclus() {
unsigned long huidige_tijd = millis();
unsigned long factor = snelle_modus ? 1 : 2;
if (fase == 0) {
if (huidige_tijd - vorige_tijd >= tijd_groen * factor) {
fase = 1;
vorige_tijd = huidige_tijd;
}
digitalWrite(led_1_groen, HIGH);
digitalWrite(led_1_geel, LOW);
digitalWrite(led_1_rood, LOW);
digitalWrite(led_2_groen, LOW);
digitalWrite(led_2_geel, LOW);
digitalWrite(led_2_rood, HIGH);
}
else if (fase == 1) {
if (huidige_tijd - vorige_tijd >= tijd_geel * factor) {
fase = 2;
vorige_tijd = huidige_tijd;
}
digitalWrite(led_1_groen, LOW);
digitalWrite(led_1_geel, HIGH);
digitalWrite(led_1_rood, LOW);
digitalWrite(led_2_groen, LOW);
digitalWrite(led_2_geel, LOW);
digitalWrite(led_2_rood, HIGH);
}
else if (fase == 2) {
if (huidige_tijd - vorige_tijd >= tijd_rood * factor) {
fase = 3;
vorige_tijd = huidige_tijd;
}
digitalWrite(led_1_groen, LOW);
digitalWrite(led_1_geel, LOW);
digitalWrite(led_1_rood, HIGH);
digitalWrite(led_2_groen, HIGH);
digitalWrite(led_2_geel, LOW);
digitalWrite(led_2_rood, LOW);
}
else if (fase == 3) {
if (huidige_tijd - vorige_tijd >= tijd_geel * factor) {
fase = 0;
vorige_tijd = huidige_tijd;
}
digitalWrite(led_1_groen, LOW);
digitalWrite(led_1_geel, LOW);
digitalWrite(led_1_rood, HIGH);
digitalWrite(led_2_groen, LOW);
digitalWrite(led_2_geel, HIGH);
digitalWrite(led_2_rood, LOW);
}
}