#define PIN_LED_RED 13
#define PIN_LED_GREEN 12
#define PIN_LED_BLUE 11
#define PIN_BUTTON_RED 5
#define PIN_BUTTON_GREEN 4
#define PIN_BUTTON_BLUE 3
#define OFF 0
#define RED 1
#define GREEN 2
#define BLUE 3
// Functions
void checkTimePassed(unsigned long start, unsigned long time, byte PIN_LED);
void turnOff();
// Variables
byte ledState = 0;
unsigned long startRed = 0;
unsigned long timeRed = 3000;
unsigned long startGreen = 0;
unsigned long timeGreen = 2000;
unsigned long startBlue = 0;
unsigned long timeBlue = 1000;
void setup() {
Serial.begin(9600);
pinMode(PIN_LED_RED, OUTPUT);
pinMode(PIN_LED_GREEN, OUTPUT);
pinMode(PIN_LED_BLUE, OUTPUT);
pinMode(PIN_BUTTON_RED, INPUT);
pinMode(PIN_BUTTON_GREEN, INPUT);
pinMode(PIN_BUTTON_BLUE, INPUT);
digitalWrite(PIN_LED_RED, LOW);
digitalWrite(PIN_LED_GREEN, LOW);
digitalWrite(PIN_LED_BLUE, LOW);
}
void loop() {
if (!digitalRead(PIN_BUTTON_RED)) {
startRed = millis();
ledState = RED;
turnOff();
}
if (!digitalRead(PIN_BUTTON_GREEN)) {
startGreen = millis();
ledState = GREEN;
turnOff();
}
if (!digitalRead(PIN_BUTTON_BLUE)) {
startBlue = millis();
ledState = BLUE;
turnOff();
}
switch (ledState) {
case RED:
checkTimePassed(startRed,timeRed,PIN_LED_RED);
break;
case GREEN:
checkTimePassed(startGreen,timeGreen,PIN_LED_GREEN);
break;
case BLUE:
checkTimePassed(startBlue,timeBlue,PIN_LED_BLUE);
break;
case OFF:
turnOff ();
break;
default:
break;
}
}
void turnOff() {
digitalWrite(PIN_LED_RED, LOW);
digitalWrite(PIN_LED_GREEN, LOW);
digitalWrite(PIN_LED_BLUE, LOW);
}
void checkTimePassed(unsigned long start, unsigned long time, byte PIN_LED) {
/* als tijd voorbij, dan gaat led uit
start = startred, startgreen of startblue
time = timered, timegreen of timeblue
*/
if ((millis() - start) > time) {
ledState = OFF;
} else {
digitalWrite(PIN_LED, HIGH);
}
}