For Schleife geht nicht

Hallo,

das abspielen kann nur blockierend arbeiten, sonst würde das mit dem delay nicht funktionieren. Wenn man das delay nicht blockierend umbaut, würde es den ersten Sound nochmals abspielen, die Funktion würde immer aufgerufen solange der Button gedrückt ist. Der Button muss bei dem hier aber gedrückt werden, sonst läuft das alles nicht durch. Katze beißt sich in den Schwanz. Deswegen mein Favorit switch case, weil damit kannste dir klare Zustände bauen ohne dich in einem wilden if elseif Wollknäul zuverfitzen.

fehlende Variablen und Lib ergänzen ...

const byte pin_Taster = 2;
const byte pin_LED13 = 13;

void setup() {
  pinMode(pin_Taster, INPUT_PULLUP);
  pinMode(pin_LED13, OUTPUT);
}

void loop() {

  steuerung();

}


void steuerung ()
{
  enum state {NICHTS, SOUND, WAIT_FIRE, FIRE, AUS};
  static state zustand = NICHTS;
  static unsigned long zeitmerker = 0;

  switch (zustand) {
    case NICHTS:
                if (update_Taster() ) {         // Tasterabfrage
                  zustand = SOUND;
                }
                break;

    case SOUND:
                digitalWrite(pin_LED13, HIGH);
                myDFPlayer.playMp3Folder(5);
                zeitmerker = millis();          // Zeit merken für nächsten Vergleich
                zustand = WAIT_FIRE;
                break;

    case WAIT_FIRE:   
                if ( millis() - zeitmerker > 1500) {
                  zustand = FIRE;
                }
                break;          

    case FIRE:
                buttonDownTime = millis();
                torpedoTime = millis();
                torpedoPushes++;
                ignoreUp = true;
                myDFPlayer.playMp3Folder(1);
                zustand = AUS;
                break;

    case AUS:
                digitalWrite(pin_LED13, LOW);
                zustand = NICHTS;
                break;

    default:    zustand = AUS;
                break;
  }

}


bool update_Taster()
{
  static unsigned long last_ms = 0;
  static bool state = false;

  if (millis() - last_ms > 30) {
    last_ms = millis();
    state = !(digitalRead(pin_Taster));
  }
  return state;
}