// Verschillende aan en uit tijd via millis.
#define ledGroen 8 // Groene led.
const long aanTijdGroen = 80; // Aantijd ledGroen.
const long uitTijdGroen = 920; // Uittijd ledGroen.
long intervalTijd = 0; // Wordt gebruikt in millis-code.
int ledState = HIGH; // Status van de groene led.
// fade in en uit via millis.
#define ledRood 10 // Rode led.
int knipperIntervalLed = 5; // Dit is de snelheid van het in of uit faden.
unsigned long resetLed = 0; // Wordt gebruikt in millis-code.
int brigthness = 0; // Dit is de waarde gestuurt naar de led. 0 tot 255 tot 0 enz.
int fadeamount = 5; // Dit is de grote van de stap waarmee de waarde op of afteld.
// Ledstate machine met millis.
#define roodLed 5 // Rode led.
#define yellowLed 7 // Gele led.
#define groenLed 6 // Groene led.
#define button 3 // Drukknop.
int intervalIf = 50; // Intervaltijd if-functie.
unsigned long reset = 0; // Wordt gebruikt in millis-code.
int state = 0; // debounce drukknop.
bool flag = true;
void setup() {
Serial.begin(115200);
pinMode(ledRood, OUTPUT); // Rode led fade in en uit.
pinMode(ledGroen, OUTPUT); // Groene led aan en uit via millis.
pinMode(roodLed, OUTPUT); // Groene led Ledstate machine.
pinMode(yellowLed, OUTPUT); // Gele led Ledstate machine.
pinMode(groenLed, OUTPUT); // Gele led Ledstate machine.
pinMode(button, INPUT); // lezen van drukknop.
digitalWrite(roodLed, LOW); // set initial als off.
digitalWrite(yellowLed, LOW); // set initial als off.
digitalWrite(groenLed, LOW); // set initial als off.
}
void loop() {
if (digitalRead(button) == 1) {
if (millis() - reset >= intervalIf && flag) { // let hier op de dubbele conditie!
state ++;
flag = false;
}
} else {
reset = millis();
flag = true;
}
// Ledstate machine.
switch (state) { //
case 1: // Als state = 1
digitalWrite(roodLed, HIGH); // zet roodLed off.
digitalWrite(yellowLed, LOW); // zet yellowLed off.
digitalWrite(groenLed, LOW); // zet groenLed off.
break;
case 2: // Als state = 2.
digitalWrite(roodLed, LOW); // zet roodLed off.
digitalWrite(yellowLed, LOW); // zet yellowLed off.
digitalWrite(groenLed, HIGH); // zet groenLed off.
break;
case 3: // Als state = 3.
digitalWrite(roodLed, LOW); // zet roodLed off.
digitalWrite(yellowLed, HIGH); // zet yellowLed off.
digitalWrite(groenLed, LOW); // zet groenLed off.
break;
case 4: // Als state is niet 1, 2, 3,
digitalWrite(roodLed, HIGH); // zet roodLed off.
digitalWrite(yellowLed, HIGH); // zet yellowLed off.
digitalWrite(groenLed, HIGH); // zet groenLed off.
break;
case 5: // Als state is niet 1, 2, 3, 4
digitalWrite(roodLed, LOW); // zet roodLed off.
digitalWrite(yellowLed, LOW); // zet yellowLed off.
digitalWrite(groenLed, LOW); // zet groenLed off.
break;
case 6:
state = 1 ;
break;
default:
// is voor fouten op te vangen
break;
}
// fade in en uit via millis.
if (millis() - resetLed > knipperIntervalLed) {
analogWrite(ledRood, brigthness);
brigthness = brigthness + fadeamount ;
resetLed = millis();
//Serial.println(brigthness);
if (brigthness == 0 || brigthness == 255) { // OR - Functie
fadeamount = -fadeamount;
}
}
// Verschillende aan en uit tijd via millis.
if (ledState == HIGH) {
if (millis() - intervalTijd >= aanTijdGroen) {
ledState = LOW;
intervalTijd = millis();
}
}
else {
if (millis() - intervalTijd >= uitTijdGroen) {
ledState = HIGH;
intervalTijd = millis();
}
}
digitalWrite(ledGroen, ledState);
}