#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:
if (millis() - startRed > timeRed) {
ledState = OFF;
} else {
digitalWrite(PIN_LED_RED, HIGH);
}
break;
case GREEN:
if (millis() - startGreen > timeGreen) {
ledState = OFF;
} else {
digitalWrite(PIN_LED_GREEN, HIGH);
}
break;
case BLUE:
if (millis() - startBlue > timeBlue) {
ledState = OFF;
} else {
digitalWrite(PIN_LED_BLUE, HIGH);
}
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 of startgreen
time = timered of timegreen
*/
if ((millis() - start) > time) {
ledState = OFF;
} else {
digitalWrite(PIN_LED, HIGH);
}
}