int button_blink = 18; //knop oranje/rood
int button_toggle = 19; // knop wit
int led_info = 21; // led blauw
int nz_rood = 14; // nz=richting N/Z;
int nz_oranje = 27;
int nz_groen = 26;
int ow_rood = 25; //ow=richting O/W;
int ow_oranje = 33;
int ow_groen = 32;
const int time_cycle = 6000;
//int time_cycle_fast = time_cycle_normal / 2;
// int blink_time; // snelheid blauw licht = snelheid time_cycle
void setup() {
Serial.begin(115200);
// // Besturing
pinMode(button_blink, INPUT_PULLUP);
pinMode(button_toggle, INPUT_PULLUP);
pinMode(led_info, OUTPUT);
// Verkeerslichten
pinMode(nz_rood, OUTPUT);
pinMode(nz_oranje, OUTPUT);
pinMode(nz_groen, OUTPUT);
pinMode(ow_rood, OUTPUT);
pinMode(ow_oranje, OUTPUT);
pinMode(ow_groen, OUTPUT);
digitalWrite(nz_rood, HIGH);
digitalWrite(nz_oranje, LOW);
digitalWrite(nz_groen, LOW);
digitalWrite(ow_rood, HIGH);
digitalWrite(ow_oranje, LOW);
digitalWrite(ow_groen, LOW);
digitalWrite(led_info,HIGH);
}
void loop() {
static bool state_toggle_before = 1;
bool state_toggle = digitalRead(button_toggle);
static bool fast;
static bool state_orange_before = 1;
bool state_orange = digitalRead(button_blink);
static bool orange;
int orange_time = 150;
static unsigned long orange_timestamp = 0;
static bool state_nz_orange;
static bool state_ow_orange;
static bool state_led_info = 1;
static unsigned long timestamp_led_info = 0;
// knipperlichten (enkel oranje lichten)
if (state_orange != state_orange_before) {
state_orange_before = state_orange;
if (state_orange == 0) {
orange = !orange;
}
delay(5);
}
switch (orange) {
case 0 :
// toggle tussen normaal en snel
if (state_toggle != state_toggle_before) {
state_toggle_before = state_toggle;
//Serial.println("toggle veranderd");
if (state_toggle == 0) {
fast = !fast;
}
delay(5);
}
switch (fast)
{
case 0:
if (millis() - timestamp_led_info > 400) {
timestamp_led_info = millis();
state_led_info = !state_led_info;
digitalWrite(led_info, state_led_info);
}
all_lights();
break;
case 1 :
if (millis() - timestamp_led_info > 200) {
timestamp_led_info = millis();
state_led_info = !state_led_info;
digitalWrite(led_info, state_led_info);
}
all_lights_fast();
break;
}
break;
// ENKEL ORANJE LICHTEN
case 1 :
// groene,rode lichten uit; led_info uit
digitalWrite(nz_rood, LOW);;
digitalWrite(nz_groen, LOW);
digitalWrite(ow_rood, LOW);
digitalWrite(ow_groen, LOW);
digitalWrite(led_info,LOW);
// oranje licht knippert
if (millis() - orange_timestamp > orange_time) {
orange_timestamp = millis();
state_nz_orange = !state_nz_orange;
state_ow_orange = !state_ow_orange;
digitalWrite(nz_oranje, state_nz_orange);
digitalWrite(ow_oranje, state_ow_orange);
}
break;
}
}
void all_lights() {
// int time_cycle = 6000;
// int time_cycle_normal = 6000;
// time_cycle = time_cycle_normal;
static unsigned long timestamp = 0;
static long counter_cycle = ceil(time_cycle / 6);
Serial.println("counter cycle " + String(counter_cycle));
if (millis() - timestamp > time_cycle) {
timestamp = millis() - 1;
Serial.println("time cycle " + String(time_cycle));
}
if (millis() - timestamp <= counter_cycle * 2) {
Serial.println("cycle 1");
digitalWrite(nz_rood, HIGH);
digitalWrite(nz_oranje, LOW);
digitalWrite(nz_groen, LOW);
digitalWrite(ow_rood, LOW);
digitalWrite(ow_oranje, LOW);
digitalWrite(ow_groen, HIGH);
}
if (millis() - timestamp <= counter_cycle * 3 && millis() - timestamp > counter_cycle * 2 ) {
Serial.println("cycle 2");
digitalWrite(nz_rood, HIGH);
digitalWrite(nz_oranje, LOW);
digitalWrite(nz_groen, LOW);
digitalWrite(ow_rood, LOW);
digitalWrite(ow_oranje, HIGH);
digitalWrite(ow_groen, LOW);
}
if (millis() - timestamp <= counter_cycle * 5 && millis() - timestamp > counter_cycle * 3 ) {
Serial.println("cycle 3");
digitalWrite(nz_rood, LOW);
digitalWrite(nz_oranje, LOW);
digitalWrite(nz_groen, HIGH);
digitalWrite(ow_rood, HIGH);
digitalWrite(ow_oranje, LOW);
digitalWrite(ow_groen, LOW);
}
if (millis() - timestamp <= counter_cycle * 6 && millis() - timestamp > counter_cycle * 5 ) {
Serial.println("cycle 4");
digitalWrite(nz_rood, LOW);
digitalWrite(nz_oranje, HIGH);
digitalWrite(nz_groen, LOW);
digitalWrite(ow_rood, HIGH);
digitalWrite(ow_oranje, LOW);
digitalWrite(ow_groen, LOW);
}
}
void all_lights_fast() {
//time_cycle = time_cycle_fast;
int time_cycle = 500;
static unsigned long timestamp = 0;
static long counter_cycle = ceil(time_cycle / 6);
if (millis() - timestamp > time_cycle) {
timestamp = millis() - 1;
// state_led_info = !state_led_info;
// digitalWrite(led_info, state_led_info);
}
if (millis() - timestamp <= counter_cycle * 2) {
// Serial.println("cycle 1");
digitalWrite(nz_rood, HIGH);
digitalWrite(nz_oranje, LOW);
digitalWrite(nz_groen, LOW);
digitalWrite(ow_rood, LOW);
digitalWrite(ow_oranje, LOW);
digitalWrite(ow_groen, HIGH);
}
if (millis() - timestamp <= counter_cycle * 3 && millis() - timestamp > counter_cycle * 2 ) {
// Serial.println("cycle 2");
digitalWrite(nz_rood, HIGH);
digitalWrite(nz_oranje, LOW);
digitalWrite(nz_groen, LOW);
digitalWrite(ow_rood, LOW);
digitalWrite(ow_oranje, HIGH);
digitalWrite(ow_groen, LOW);
}
if (millis() - timestamp <= counter_cycle * 5 && millis() - timestamp > counter_cycle * 3 ) {
digitalWrite(nz_rood, LOW);
digitalWrite(nz_oranje, LOW);
digitalWrite(nz_groen, HIGH);
digitalWrite(ow_rood, HIGH);
digitalWrite(ow_oranje, LOW);
digitalWrite(ow_groen, LOW);
}
if (millis() - timestamp <= counter_cycle * 6 && millis() - timestamp > counter_cycle * 5 ) {
digitalWrite(nz_rood, LOW);
digitalWrite(nz_oranje, HIGH);
digitalWrite(nz_groen, LOW);
digitalWrite(ow_rood, HIGH);
digitalWrite(ow_oranje, LOW);
digitalWrite(ow_groen, LOW);
}
}