Hallo wiedermal
Ich hatte Zeit, an meinem Projekt weiterzupröbeln, dank den beiden Antworten hat das auch gut geklappt!
Nun stellt sich aber das Problem, dass sich die beiden Taster gegenseitig beeinflussen... Vor allem, wenn länger gedrücklt wird.
Sprich, beim drücken der einen Taste (Licht) beginnt auch die Blitzerei für einen Moment, oder, wenn die Blitzerei an ist und gestoppt werden soll, geht auch das Licht aus, oder aus und an...
Dies lässt sich aber nicht gleich reproduzieren.
Ist es möglich genau einen Tastimpuls einzulesen und den Taster dann für einen Moment zu "sperren"? Also egal wie lange gedrückt wird, nur beim jeweiligen Betätigen eine Aktion ausgelöst wird.
Das Programm startet auch nicht selbstständig, wenn ich es hochgeladen habe, und dann die Batterie (9V) ab und wieder anhänge (ausschalten/ einschalten), ich muss es jedesmal neu einlesen...
den verwendeten Code hab ich diesmal angehängt..
#define taster1 2   //Beleuchtung
#define taster2 7   //Blitzerei
#define led_weiss 11 //pwm pin
#define led_rot 4   //Rücklicht
#define led_blau 8
#define x 50
#define y 255
#define debounce_delay 28
bool taster_wert;
bool taster_wert_alt;
bool taster2_wert;
bool taster2_wert_alt;
uint8_t taster_count;
uint8_t taster2_count;
byte ledPin1 = 3; // 1. LED liegt an Pin 3
byte ledPin2 = 10; // 2. LED liegt an Pin 10
byte ledPin3 = 5; // 3. LED liegt an Pin 5
byte ledPin4 = 6; // 4. LED liegt an Pin 6
boolean value1 = HIGH; // Startwert der 1. LED
boolean value2 = LOW; // Startwert der 2. LED
boolean value3 = LOW; // Startwert der 3. LED
boolean value4 = LOW; // Startwert der 4. LED
unsigned long previousMillis1 = 0; // speichert, wie viele Sekunden seit 
der letzten Änderung vergangen sind
unsigned long previousMillis2 = 0; // wie vor für 2. Blaulicht
unsigned long previousMillis3 = 120; // wie vor für 3. Blaulicht
unsigned long previousMillis4 = 0; // wie vor für Flasher
unsigned long interval1 = random(200, 500); // Interval zwischen zwei 
Änderungen für LED 1
unsigned long interval2 = random(50, 400); // wie vor für LED 2
unsigned long interval3 = 120; // wie vor für LED 3
unsigned long interval4 = 80;  // wie vor für LED 4/5
void setup() {
 pinMode (taster1, INPUT_PULLUP);
 pinMode (taster2, INPUT_PULLUP);
 pinMode (led_rot, OUTPUT);
 pinMode (led_blau, OUTPUT);
 pinMode(ledPin1, OUTPUT); // Setzt den ledPin1 (Pin 3) als Ausgang
 pinMode(ledPin2, OUTPUT); // Setzt den ledPin2 (Pin 4) als Ausgang
 pinMode(ledPin3, OUTPUT); // Setzt den ledPin3 (Pin 5) als Ausgang
 pinMode(ledPin4, OUTPUT); // Setzt den ledPin4 (Pin 6) als Ausgang
// int randomSeed(analogRead(0));//
}
void loop()
{
 static uint32_t debounce_time;
 if (millis() - debounce_time > debounce_delay)
 { taster_wert = digitalRead(taster1);
   if (taster_wert != taster_wert_alt)
   { debounce_time = millis();
     taster_wert_alt = taster_wert;
     if (!taster_wert)
     { taster_count++;
       if (taster_count > 2) taster_count = 0;
     }
   }
 }
 if (taster_count == 0) funktion3();
 if (taster_count == 1) funktion1();
 if (taster_count == 2) funktion2();
 if (millis() - debounce_time > debounce_delay)
 { taster_wert = digitalRead(taster2);
   if (taster_wert != taster_wert_alt)
   { debounce_time = millis();
     taster2_wert_alt = taster2_wert;
     if (!taster2_wert)
     { taster2_count++;
       if (taster2_count > 1) taster2_count = 0;
     }
   }
 }
 if (taster2_count == 0) funktion5();
 if (taster2_count == 1) funktion4();
}
void funktion1() //Abblendlicht mit PWM Wert X, Rücklichter ein
{
 analogWrite(led_weiss, x);
 digitalWrite(led_rot, 1);
}
void funktion2() //Vollicht mit PWM Wert Y, Rücklichter bleiben ein
{
 analogWrite(led_weiss, y);
 digitalWrite(led_rot, 1);
}
void funktion3() //alles aus
{
 analogWrite(led_weiss, 0);
 digitalWrite(led_rot, 0);
}
void funktion4() //Blitzerei
{
 if (millis() - previousMillis1 > interval1)
 {
   previousMillis1 = millis(); // aktuelle Zeit abspeichern
   // LED Zustand wecheln.
   value1 = !value1;
   // Intervall zwischen 200 und 299 ms jedesmal neu setzen
   unsigned long interval1 = random(200, 300);
   // Wert auf den Ausgang schreiben
   digitalWrite(ledPin1, value1);
 }
 if (millis() - previousMillis2 > interval2)
 {
   previousMillis2 = millis(); // aktuelle Zeit abspeichern
   // LED Zustand wecheln.
   value2 = !value2;
   // Intervall zwischen 280 und 379ms neu setzen
   unsigned long interval2 = random(280, 380);
   // Wert auf den Ausgang schreiben
   digitalWrite(ledPin2, value2);
 }
 if (millis() - previousMillis3 > interval3)
 {
   previousMillis3 = millis(); // aktuelle Zeit abspeichern
   // LED Zustand wechseln
   value3 = !value3;
   // Wert auf den Ausgang schreiben
   digitalWrite(ledPin3, value3);
 }
 if (millis() - previousMillis4 > interval4)
 {
   previousMillis4 = millis(); // aktuelle Zeit abspeichern
   // LEDs Zustand wechseln
   value4 = !value4;
   // Interval zwischen 30 und 79ms neu setzen
   unsigned long interval4 = random(30, 80);
   // Wert auf den Ausgang schreiben
   digitalWrite(ledPin4, value4);
 }
}
void funktion5()
{
 digitalWrite(ledPin1, 0);
 digitalWrite(ledPin2, 0);
 digitalWrite(ledPin3, 0);
 digitalWrite(ledPin4, 0);
}
Ambulance_all_orig.ino (4.27 KB)