#include <EEPROM.h> //QC
// Adressen im EEPROM, an denen die Schalterstatus gespeichert werden
int switchStatusAddress = 0; //QC
const int ledPin1 = 25; // Digitaler Ausgangspin für LED 1
const int ledPin2 = 27; // Digitaler Ausgangspin für LED 2
const int safetyPin = 41; // Digitaler Eingangspin für den Sicherheitseingang
const int buttonPin = 49; // Pin-Nummer des Tasters L
const int buttonPin2 = 47; // Pin-Nummer des Tasters R
const int buzzerPin = 23; // Pin-Nummer des Piepers
int buttonState = 0; //QC // Variable, um den aktuellen Zustand des Tasters zu speichern
int buttonState2 = 0;
int analogValue1 = 0;
int analogValue2 = 0;
int analogValue3 = 0;
int analogValue4 = 0;
int Pedal1_1 = A0;
int Pedal1_2 = A1;
int Pedal1_3 = A2;
int Pedal1_4 = A3;
int Pedal2_1 = A4;
int Pedal2_2 = A5;
int Pedal2_3 = A6;
int Pedal2_4 = A7;
const int Ausgang1 = A8;
const int Ausgang2 = A9;
const int Ausgang3 = A10;
const int Ausgang4 = A11;
bool safetyEnabled = true; // Sicherheit ist standardmäßig aktiviert
bool directionForward = true; //QC // Variable, um die Richtung des Wechsels zu speichern (false = vorwärts, true = rückwärts)
bool buzzerBeep = true; //BUZZERBEEP QC
bool buzzerBeep2 = true; //BUZZERBEEP QC
void setup() {
pinMode(safetyPin, INPUT_PULLUP); //QC
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); //QC
//Anzeige des aktuellen Status nach Neustart durch setzen der LEDs und abspielen der Tonausgabe
if (directionForward) { //QC
tone(buzzerPin, 262, 25); //EMU
digitalWrite(ledPin1, HIGH); //QC
digitalWrite(ledPin2, LOW); //QC
} else { //QC
tone(buzzerPin, 262, 25); //EMU
delay(250);
tone(buzzerPin, 262, 25); //EMU
digitalWrite(ledPin1, LOW); //QC
digitalWrite(ledPin2, HIGH); //QC
}
}
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); //QC
}
if (buttonState2 == HIGH) {
delay(500); // Entprellen des Tasters
directionForward = false;
buzzerBeep = directionForward;
// Speichern des aktuellen Schalterstatus im EEPROM
EEPROM.write(switchStatusAddress, directionForward); //QC
}
}
if (directionForward == buzzerBeep) {
if (buzzerBeep2 == buzzerBeep) {
tone(buzzerPin, 262, 25); //EMU
buzzerBeep2 = buzzerBeep;
buzzerBeep = !buzzerBeep;
} else {
tone(buzzerPin, 262, 25); //EMU
delay(250);
tone(buzzerPin, 262, 25); //EMU
buzzerBeep = !buzzerBeep;
buzzerBeep2 = buzzerBeep;
}
}
// Lesen Sie den Zustand des Auswahlpins (HIGH oder LOW)
int selectState = directionForward;
// Je nach Zustand des Auswahlknopfs, schalte entweder Signal 1 oder Signal 2 auf den DAC-Ausgang
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);
analogValue4 = analogRead(Pedal1_4);
analogWrite(Ausgang1, analogValue1);
analogWrite(Ausgang2, analogValue2);
analogWrite(Ausgang3, analogValue3);
analogWrite(Ausgang4, analogValue4);
} 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);
analogValue4 = analogRead(Pedal2_4);
analogWrite(Ausgang1, analogValue1);
analogWrite(Ausgang2, analogValue2);
analogWrite(Ausgang3, analogValue3);
analogWrite(Ausgang4, analogValue4);
}
} 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);
analogValue4 = analogRead(Pedal1_4);
analogWrite(Ausgang1, analogValue1);
analogWrite(Ausgang2, analogValue2);
analogWrite(Ausgang3, analogValue3);
analogWrite(Ausgang4, analogValue4);
} 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);
analogValue4 = analogRead(Pedal2_4);
analogWrite(Ausgang1, analogValue1);
analogWrite(Ausgang2, analogValue2);
analogWrite(Ausgang3, analogValue3);
analogWrite(Ausgang4, analogValue4);
}
}
// Eine kleine Verzögerung, um Stabilität sicherzustellen
delay(10);
}