// Pin configuraties
const int buttonPin1 = 2; // Knop 1 (mode wijzigen)
const int buttonPin2 = 3; // Knop 2 (andere acties)
const int ledPin = 9; // LED (PWM pin voor fade)
int mode = 0; // Modusvariabele om de huidige modus te volgen
bool ledState = false; // Houdt bij of de LED aan of uit staat
// Voor debounce
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
bool lastButtonState = LOW;
// Setup-functie
void setup() {
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600); // Serial monitor instellen voor modusselectie
}
// LED aan- en uitschakelen
void setLED(bool state) {
digitalWrite(ledPin, state ? HIGH : LOW);
}
// Fade functie voor de LED
void fadeLED() {
for (int brightness = 0; brightness <= 255; brightness++) {
analogWrite(ledPin, brightness);
delay(10);
if (digitalRead(buttonPin1) == HIGH) return; // Stop als knop wordt ingedrukt
}
for (int brightness = 255; brightness >= 0; brightness--) {
analogWrite(ledPin, brightness);
delay(10);
if (digitalRead(buttonPin1) == HIGH) return;
}
}
// Functie om van kleur te wisselen (simulatie)
void colorChangeLED() {
analogWrite(ledPin, random(0, 256)); // Willekeurige helderheid als "kleur"
delay(500);
}
// Modus 1: LED aan
void mode1() { setLED(true); }
// Modus 2: LED uit
void mode2() { setLED(false); }
// Modus 3: Fade modus
void mode3() { fadeLED(); }
// Modus 4: Kleurwisseling
void mode4() { colorChangeLED(); }
// Wissel tussen de vier modussen
void switchMode() {
mode = (mode + 1) % 4;
Serial.print("Modus veranderd naar: ");
Serial.println(mode);
}
// Controleer knop met debounce
bool checkButton() {
bool buttonState = digitalRead(buttonPin1);
if (buttonState != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (buttonState != ledState) {
ledState = buttonState;
if (ledState == HIGH) {
return true; // Keer terug als knop werd ingedrukt
}
}
}
lastButtonState = buttonState;
return false;
}
void loop() {
// Wissel modus bij knopdruk of via Serial
if (checkButton()) switchMode();
if (Serial.available() > 0) {
char command = Serial.read();
if (command == '1') mode = 0;
else if (command == '2') mode = 1;
else if (command == '3') mode = 2;
else if (command == '4') mode = 3;
Serial.print("Serial Modus veranderd naar: ");
Serial.println(mode);
}
// Meerdere knoppen logica
if (digitalRead(buttonPin1) == HIGH && digitalRead(buttonPin2) == HIGH) {
mode3(); // Beide knoppen ingedrukt -> Fade modus
} else if (digitalRead(buttonPin1) == HIGH) {
mode1(); // Enkel knop 1 ingedrukt
} else if (digitalRead(buttonPin2) == HIGH) {
mode2(); // Enkel knop 2 ingedrukt
} else {
// Kies de modus en voer uit
switch (mode) {
case 0: mode1(); break;
case 1: mode2(); break;
case 2: mode3(); break;
case 3: mode4(); break;
}
}
}