//PedalSwitch UNI © 2023 by Robin Pe is licensed under CC BY-NC-SA 4.0
#include <EEPROM.h>
// Adressen im EEPROM, an denen die Schalterstatus gespeichert werden
int switchStatusAddress = 0; // EEProm Adressse wo der letzte Status gespeichert wird
int buttonState = 0; // Aktuellen Zustand des Tasters
int buttonState2 = 0; // Aktuellen Zustand des Tasters für den Beep
const int ledPin1 = 25; // Ausgangspin für LED 1
const int ledPin2 = 27; // Ausgangspin für LED 2
const int safetyPin = 41; // Eingangspin für den Sicherheitseingang
const int buttonPin = 47; // Taster L
const int buttonPin2 = 49; // Taster R
const int AuswahlL = 7; // Linke Pedal
const int AuswahlR = 8; // Rechts Pedal
bool safetyEnabled = true; // Sicherheit ist standardmäßig aktiviert
bool directionForward = true; // Überbleibsel als nur ein Taster benutzt werden sollte
void setup() {
pinMode(safetyPin, INPUT_PULLUP);
pinMode(buttonPin, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(AuswahlL, OUTPUT);
pinMode(AuswahlR, OUTPUT);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(AuswahlL, LOW);
digitalWrite(AuswahlR, LOW);
// Laden des zuvor gespeicherten Schalterstatus aus dem EEPROM
directionForward = EEPROM.read(switchStatusAddress);
//Anzeige des aktuellen Status nach Neustart durch setzen der LEDs
if (directionForward) {
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, LOW);
digitalWrite(AuswahlL, HIGH); // linkes Pedal aktivieren
digitalWrite(AuswahlR, LOW);
delay(200); //200ms HIGH um Relais sicher zu setzen
digitalWrite(AuswahlL, LOW); // Da bistabiles Relais kann der Pin nach setzen wieder LOW
} else {
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
digitalWrite(AuswahlL, LOW);
digitalWrite(AuswahlR, HIGH); // rechts Pedal aktivieren
delay(200); //200ms HIGH um Relais sicher zu setzen
digitalWrite(AuswahlR, LOW); // Da bistabiles Relais kann der Pin nach setzen wieder LOW
}
}
void loop() {
// Lesen Sie den Zustand des Sicherheitseingangs (HIGH oder LOW)
int safetyState = digitalRead(safetyPin);
if (safetyState == HIGH) {
safetyEnabled = false;
} else {
safetyEnabled = true;
}
// Nur wenn die Sicherheit aktiviert ist, können wir zwischen Signal 1 und Signal 2 umschalten
if (safetyEnabled) {
// Lesen des aktuellen Zustands der Taster
buttonState = digitalRead(buttonPin); //Links
buttonState2 = digitalRead(buttonPin2); //Rechts
if (buttonState == HIGH && buttonState2 == HIGH) {
delay(500); // Entprellen des Tasters
}
else {
if (buttonState == HIGH) { //Links
delay(500); // Entprellen des Tasters
directionForward = true;
// Speichern des aktuellen Schalterstatus im EEPROM
EEPROM.write(switchStatusAddress, directionForward);
digitalWrite(ledPin1, HIGH); // Schalte LED 1 ein, um anzuzeigen, dass linke Pedal aktiviert ist
digitalWrite(ledPin2, LOW); // Schalte LED 2 aus
digitalWrite(AuswahlL, HIGH); // linkes Pedal aktivieren
digitalWrite(AuswahlR, LOW);
delay(200);
digitalWrite(AuswahlL, LOW); // Da bistabiles Relais kann der Pin nach setzen wieder LOW
}
if (buttonState2 == HIGH) { //Rechts
delay(500); // Entprellen des Tasters
directionForward = false;
// Speichern des aktuellen Schalterstatus im EEPROM
EEPROM.write(switchStatusAddress, directionForward);
digitalWrite(ledPin1, LOW); // Pin 9 = rechts Schalte LED 1 aus
digitalWrite(ledPin2, HIGH); // HIGH Schalte LED 2 ein, um anzuzeigen, dass rechte Pedal aktiviert ist
digitalWrite(AuswahlL, LOW);
digitalWrite(AuswahlR, HIGH); // rechts Pedal aktivieren
delay(200);
digitalWrite(AuswahlR, LOW); // Da bistabiles Relais kann der Pin nach setzen wieder LOW
}
}
} else { //Zündung an = keine Änderung am Schalter möglich
}
// Eine kleine Verzögerung, um Stabilität sicherzustellen
delay(10);
}