#include <EEPROM.h>
const int buttonPin = 2; // Pin für den Taster
const int s0 = 3; // Steuerpin S0 des CD74HC4067
const int s1 = 4; // Steuerpin S1 des CD74HC4067
const int s2 = 5; // Steuerpin S2 des CD74HC4067
const int s3 = 6; // Steuerpin S3 des CD74HC4067
const int en = 7; // Enable-Pin des CD74HC4067
const int sig = 8; // Signal-Pin des CD74HC4067
int ledState = 0; // Aktueller Zustand der LEDs
int buttonState = 0; // Aktueller Zustand des Tasters
int lastButtonState = 0; // Letzter Zustand des Tasters
void setup() {
Serial.begin(9600); // Starte die serielle Kommunikation
pinMode(buttonPin, INPUT); // Setze Taster-Pin als Eingang
pinMode(sig, OUTPUT); // Setze den Signal-Pin als Ausgang
pinMode(en, OUTPUT); // Setze den Enable-Pin als Ausgang
pinMode(s0, OUTPUT); // Setze Steuerpin S0 als Ausgang
pinMode(s1, OUTPUT); // Setze Steuerpin S1 als Ausgang
pinMode(s2, OUTPUT); // Setze Steuerpin S2 als Ausgang
pinMode(s3, OUTPUT); // Setze Steuerpin S3 als Ausgang
digitalWrite(en, LOW); // Aktiviere den CD74HC4067
// Lese den gespeicherten LED-Zustand aus dem EEPROM
EEPROM.get(0, ledState);
if (ledState < 0 || ledState > 12) { // Überprüfe, ob der EEPROM-Wert ungültig ist
ledState = 0; // Setze den Standardwert
}
Serial.print("Gespeicherter LED-Zustand: ");
Serial.println(ledState); // Zeige den gespeicherten LED-Zustand auf der seriellen Konsole an
updateLEDs(ledState);
}
void loop() {
buttonState = digitalRead(buttonPin); // Lese den Zustand des Tasters
if (buttonState != lastButtonState) { // Wenn sich der Zustand des Tasters geändert hat
if (buttonState == HIGH) { // Wenn der Taster gedrückt wurde
ledState = (ledState + 1) % 13; // Erhöhe den LED-Zustand und setze ihn zurück, wenn er 13 erreicht
EEPROM.put(0, ledState); // Speichere den neuen LED-Zustand im EEPROM
Serial.print("Neuer LED-Zustand gespeichert: ");
Serial.println(ledState); // Zeige den neuen LED-Zustand auf der seriellen Konsole an
updateLEDs(ledState); // Aktualisiere die LEDs basierend auf dem neuen Zustand
}
delay(50); // Entprellung des Tasters
}
lastButtonState = buttonState; // Speichere den aktuellen Zustand des Tasters
}
void updateLEDs(int state) {
// Schalte alle LEDs aus
digitalWrite(sig, LOW);
// Setze die Steuerpins des CD74HC4067 entsprechend dem Zustand
digitalWrite(s0, state & 0x01);
digitalWrite(s1, (state >> 1) & 0x01);
digitalWrite(s2, (state >> 2) & 0x01);
digitalWrite(s3, (state >> 3) & 0x01);
// Schalte die entsprechenden LEDs ein
switch (state) {
case 0: selectChannel(0); break; // LED1 an
case 1: selectChannel(1); break; // LED2 an
case 2: selectChannel(2); break; // LED3 an
case 3: selectChannel(3); break; // LED4 an
case 4: selectChannels(0, 1); break; // LED1 und LED2 an
case 5: selectChannels(0, 2); break; // LED1 und LED3 an
case 6: selectChannels(0, 3); break; // LED1 und LED4 an
case 7: selectChannels(1, 2); break; // LED2 und LED3 an
case 8: selectChannels(1, 3); break; // LED2 und LED4 an
case 9: selectChannels(2, 3); break; // LED3 und LED4 an
case 10: selectChannels(0, 1, 2); break; // LED1-3 an
case 11: selectChannels(1, 2, 3); break; // LED2-4 an
case 12: selectChannels(0, 1, 2, 3); break; // LED1-4 an
}
}