//PedalSwitch UNI © 2023 by Robin Pe is licensed under CC BY-NC-SA 4.0
#include <EEPROM.h> //QC
// 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
int analogValue1 = 0; // Analoges Ein-/Ausgangssignal 1
int analogValue2 = 0; // Analoges Ein-/Ausgangssignal 2
//int analogValue3 = 0; // Analoges Ein-/Ausgangssignal 3
//int analogValue4 = 0; // Analoges Ein-/Ausgangssignal 4
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 = 49; // Taster L
const int buttonPin2 = 47; // Taster R
const int buzzerPin = 23; // Buzzer
const int Pedal1_1 = A0; // Eingangssignal 1 von Pedal 1
const int Pedal1_2 = A1; // Eingangssignal 2 von Pedal 1
//const int Pedal1_3 = A2; // Eingangssignal 3 von Pedal 1
//const int Pedal1_4 = A3; // Eingangssignal 4 von Pedal 1
const int Pedal2_1 = A4; // Eingangssignal 1 von Pedal 2
const int Pedal2_2 = A5; // Eingangssignal 2 von Pedal 2
//const int Pedal2_3 = A6; // Eingangssignal 3 von Pedal 2
//const int Pedal2_4 = A7; // Eingangssignal 4 von Pedal 2
const int Ausgang1 = A8; // Ausgangsignal 1 zu ECU
const int Ausgang2 = A9; // Ausgangsignal 2 zu ECU
//const int Ausgang3 = A10; // Ausgangsignal 3 zu ECU
//const int Ausgang4 = A11; // Ausgangsignal 4 zu ECU
bool safetyEnabled = true; // Sicherheit ist standardmäßig aktiviert
bool directionForward = true; // Überbleibsel als nur ein Taster benutzt werden sollte
bool buzzerBeep = true; // BUZZERBEEP
bool buzzerBeep2 = true; // BUZZERBEEP
void setup() {
pinMode(safetyPin, INPUT_PULLUP);
pinMode(buttonPin, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
// Laden des zuvor gespeicherten Schalterstatus aus dem EEPROM
directionForward = EEPROM.read(switchStatusAddress);
//Anzeige des aktuellen Status nach Neustart durch setzen der LEDs und abspielen der Tonausgabe
if (directionForward) {
tone(buzzerPin, 262, 25);
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, LOW);
} else {
tone(buzzerPin, 262, 25);
delay(250);
tone(buzzerPin, 262, 25);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
}
}
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);
buttonState2 = digitalRead(buttonPin2);
if (buttonState == HIGH && buttonState2 == HIGH) {
delay(500); // Entprellen des Tasters
}
else {
if (buttonState == HIGH) {
delay(500); // Entprellen des Tasters
directionForward = true;
buzzerBeep = directionForward;
// Speichern des aktuellen Schalterstatus im EEPROM
EEPROM.write(switchStatusAddress, directionForward);
}
if (buttonState2 == HIGH) {
delay(500); // Entprellen des Tasters
directionForward = false;
buzzerBeep = directionForward;
// Speichern des aktuellen Schalterstatus im EEPROM
EEPROM.write(switchStatusAddress, directionForward);
}
}
//Einmal Piepen für linkes Pedal, zweimal Piepen für rechtes Pedal
if (directionForward == buzzerBeep) {
if (buzzerBeep2 == buzzerBeep) {
tone(buzzerPin, 262, 25);
buzzerBeep2 = buzzerBeep;
buzzerBeep = !buzzerBeep;
} else {
tone(buzzerPin, 262, 25);
delay(250);
tone(buzzerPin, 262, 25);
buzzerBeep = !buzzerBeep;
buzzerBeep2 = buzzerBeep;
}
}
// Lesen Sie den Zustand des Auswahlpins (HIGH oder LOW)
int selectState = directionForward;
// Je nach Zustand des Auswahlknopfs, schalte entweder Pedal L oder Pedal R auf den Ausgang
if (selectState == HIGH) {
digitalWrite(ledPin1, HIGH); // Schalte LED 1 ein, um anzuzeigen, dass linke Pedal aktiviert ist
digitalWrite(ledPin2, LOW); // Schalte LED 2 aus
analogValue1 = analogRead(Pedal1_1);
analogValue2 = analogRead(Pedal1_2);
//analogValue3 = analogRead(Pedal1_3); //Reserve für Autos die mehr Signale brauchen
//analogValue4 = analogRead(Pedal1_4); //Reserve für Autos die mehr Signale brauchen
analogWrite(Ausgang1, analogValue1);
analogWrite(Ausgang2, analogValue2);
//analogWrite(Ausgang3, analogValue3); //Reserve für Autos die mehr Signale brauchen
//analogWrite(Ausgang4, analogValue4); //Reserve für Autos die mehr Signale brauchen
} else {
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
analogValue1 = analogRead(Pedal2_1);
analogValue2 = analogRead(Pedal2_2);
//analogValue3 = analogRead(Pedal2_3); //Reserve für Autos die mehr Signale brauchen
//analogValue4 = analogRead(Pedal2_4); //Reserve für Autos die mehr Signale brauchen
analogWrite(Ausgang1, analogValue1);
analogWrite(Ausgang2, analogValue2);
//analogWrite(Ausgang3, analogValue3); //Reserve für Autos die mehr Signale brauchen
//analogWrite(Ausgang4, analogValue4); //Reserve für Autos die mehr Signale brauchen
}
} else { //Zündung an = keine Änderung am Schalter möglich
int selectState = directionForward;
if (selectState == HIGH) {
digitalWrite(ledPin1, HIGH); // LOW Pin 8 = Links Schalte LED 1 ein, um anzuzeigen, dass linke Pedal aktiviert ist
digitalWrite(ledPin2, LOW); // Schalte LED 2 aus
analogValue1 = analogRead(Pedal1_1);
analogValue2 = analogRead(Pedal1_2);
//analogValue3 = analogRead(Pedal1_3); //Reserve für Autos die mehr Signale brauchen
//analogValue4 = analogRead(Pedal1_4); //Reserve für Autos die mehr Signale brauchen
analogWrite(Ausgang1, analogValue1);
analogWrite(Ausgang2, analogValue2);
//analogWrite(Ausgang3, analogValue3); //Reserve für Autos die mehr Signale brauchen
//analogWrite(Ausgang4, analogValue4); //Reserve für Autos die mehr Signale brauchen
} else {
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
analogValue1 = analogRead(Pedal2_1);
analogValue2 = analogRead(Pedal2_2);
//analogValue3 = analogRead(Pedal2_3); //Reserve für Autos die mehr Signale brauchen
//analogValue4 = analogRead(Pedal2_4); //Reserve für Autos die mehr Signale brauchen
analogWrite(Ausgang1, analogValue1);
analogWrite(Ausgang2, analogValue2);
//analogWrite(Ausgang3, analogValue3); //Reserve für Autos die mehr Signale brauchen
//analogWrite(Ausgang4, analogValue4); //Reserve für Autos die mehr Signale brauchen
}
}
// Eine kleine Verzögerung, um Stabilität sicherzustellen
delay(10);
}