const byte led01 = 13;

const byte Taster01 = 11;      // Pin 11 wird Constant als Taster01 bezeichnet
bool Tasterstatus01 = 0;       // Zum Abfragen des Tatsenpins

unsigned long Sekundenablauf01 = 5000;
unsigned long Pausezeit01 = 5000; // Zeit wenn Taster gedrückt 5000ms Pause
byte funktion01 = 0;

unsigned long Sekundenablauf02 = 0; // leuchtzeit led01 300ms aussetzen
unsigned long Pausezeit02 = 1000;
byte funktion02 = 0;

unsigned long Sekundenablauf03 = 0; // Serialprint Ausgabe auf 3000ms aussetzen
unsigned long Pausezeit03 = 100;
byte funktion03 = 0;

unsigned long startzeit = 0;
unsigned long endzeit = 0;

void setup() {
  pinMode(led01, OUTPUT);
  pinMode(Taster01, INPUT_PULLUP);

  Serial.begin(9600);
}

void loop() {
  //startzeit = micros();
  // Block 01 >>>>>>>>>>>>>>>
  // Ist Taste gedrückt?------------------------------------------------------------------------
  if (millis() - Sekundenablauf01 >= Pausezeit01)
  {
    Tasterstatus01 = digitalRead(Taster01); // Pin von Taster01 abfragen
    if (Tasterstatus01 == LOW)
    {
      Serial.println(F("Taste gedrückt"));//
      funktion01 = 1;
      Sekundenablauf01 = millis();      // Der 5000ms Timer01 wird gestartet
      digitalWrite (led01, funktion01);
    }
    else {
      funktion01 = 0;
    }
  }
  // Block 01 Ende <<<<<<<<<<<<

  // Wenn die Taste gedrückt wurde, bleibt die LED 5 Sekunden an, -------------------------------
  // weil die nächsten die Blocks 2+3 5Sek. lang übersprungen werden -------------------------------
  if (funktion01 == 0)
  { // Taste wurde gedrückt
    // Block 02 Anfang >>>>>>>>>>>>>>
    // Alle 1000ms LED13 an / aus--------------------------------------------------------------
    if (millis() - Sekundenablauf02 >= Pausezeit02)
    {
      funktion02 = !funktion02;
      digitalWrite (led01, funktion02);
      Sekundenablauf02 = millis();      // Der 1000ms Time02 wird gestartet
    }
    // Block 02 Ende <<<<<<<<<<<<
    // Block 03 Anfang >>>>>>>>>>>>>>>>>
    // Wenn LED13 für 1000ms aus ist, dann LED13 im 100ms Tackt an / aus----------------------
    if ((millis() - Sekundenablauf03 >= Pausezeit03) && (funktion02 == 0))
    {
      funktion03 = !funktion03;
      digitalWrite (led01, funktion03);
      Sekundenablauf03 = millis();      // Der 100ms Time03 wird gestartet
    }
    // Block 03 Ende <<<<<<<<<<<<
  } // Tastensteuerung Ende
  //endzeit = micros();
  //Serial.println(endzeit - startzeit);
}
// Loop Ende ----------------------------------------------------------------------------------