#define led1 A0
#define led2 A1
#define led3 A2
#define led4 A3
#define lightSensor 5
#define lightTaster 6
// Enumeration
enum Status {
OFF,
BLINK,
TURN
};
Status status;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(lightSensor, INPUT);
pinMode(lightTaster, INPUT);
}
void loop() {
offLoop();
}
void offLoop() {
status = OFF;
while (true) {
lightTasterWithDelay(50);
}
}
void lightTasterWithDelay(int delayMs) {
if (digitalRead(lightTaster) == HIGH) {
delay(50); // Kurze Verzögerung, um Flackern auszuschließen
if (digitalRead(lightTaster) == HIGH) {
analogWrite(led1, 0);
analogWrite(led2, 0);
analogWrite(led3, 0);
analogWrite(led4, 0);
delay(1300);
if (digitalRead(lightTaster) == HIGH) {// Der Knopf wurde lang gedrückt
if (status == OFF || status == BLINK) {
turnLoop();
} else {
delay(2000); //Zeit um Knopf loszulassen
offLoop();
}
} else { // Der Knopf wurde kurz gedrückt
if (status == BLINK || status == TURN) {
offLoop();
} else {
blinkLoop();
}
}
} else {
delay(delayMs - 50);
}
} else {
delay(delayMs);
}
}
void blinkLoop() {
status = BLINK;
for (int i = 0; i < 500; i++) {
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
lightTasterWithDelay(100);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
delay(100);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
lightTasterWithDelay(100);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
delay(100);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
lightTasterWithDelay(100);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(100);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
lightTasterWithDelay(100);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(100);
}
}
void turnLoop() {
status = TURN;
// 3 mal drehen ohne Knopfprüfung (Zeit zum Knopf loslassen)
for (int i = 0; i < 3; i++) {
digitalWrite(led1, HIGH);
delay(100);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
delay(100);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
delay(100);
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
delay(100);
digitalWrite(led4, LOW);
}
// Drehen mit Knopfprüfung
for (int i = 0; i < 1000; i++) {
digitalWrite(led1, HIGH);
delay(100);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
lightTasterWithDelay(100);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
delay(100);
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
lightTasterWithDelay(100);
digitalWrite(led4, LOW);
}
offLoop();
}