//  Variablen: Tastzähler, Zeitfenster
//  Impulse werden erzeugt
//  Impuls erkannt
//  Zählschleife startet
//  Zeitfenster startet
//  Impulse zählen (den ersten Impuls mitnehmen)
//  Zeitfenster abgelaufen
//  Impulszahl plus 1 in Zählvariable schreiben
//  Schleifenvariablen Zähler und Zeitfenster löschen
// einmal drücken toggle ein aus
// zweimal drücken einmal blinken
// dreimal drücken zweimal blinken

int buttonPin = 2; //Taster "buttonPin" an Pin 2 angeschlossen
int ledPin = 5; //LED "ledPin" an Pin 13 angeschlossen

//Variablen des Zwischenspeichers:
int buttonPushCounter = 0;   //Zählt Tastendrücke
int buttonState = 0;         //Aktueller Tastenstatus
int lastButtonState = 0;     //Vorheriger Tastenstatus
unsigned long previousMillis = 0; //Speichert vergangene Zeit
const long interval = 500; //Intervall wo Tasterdrücke registriert wurden

int ledState=LOW;

void setup() {
  
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);

buttonState = digitalRead(buttonPin);

}

void loop() {


//--------------------------------------------------------------------------------------
unsigned long currentMillis = millis(); //Zählt Millisekunden
  buttonState = digitalRead(buttonPin); //Taster an buttonPin wird gelesen und in Zwischenspeicher buttonState gespeichert
//---------------------------------------------------------------------------------------


//*****-----*****************************************
lastButtonState=buttonState;
buttonState=digitalRead(buttonPin);


//****------********************************************


//--------------------------------------------------------------------------------------

  if (buttonState != lastButtonState) { //Wenn buttonState nicht gleich lastButtonState, dann...
    
    if (buttonState == LOW) { //Wenn buttonState gleich gedrückt, dann...
      buttonPushCounter ++; //buttonPushCounter +1
      lastButtonState = buttonState; //Speichert buttonState in lastButtonState
      previousMillis = currentMillis; //Speichere jetzige Millisekunden in previousMillis
      delay(10);
    }
  else {
      lastButtonState = buttonState;
    }
  }

  if (currentMillis - previousMillis >= interval && buttonState == lastButtonState) { //Wenn gezählte Millisekunden minus vorherige Millisekunden (gespeicherte, vergangene Zeit) grösser/gleich interval ist und buttonState gleich lastButtonState ist, dann...


     if(buttonPushCounter == 2){

     ledState=!ledState;
     digitalWrite(ledPin,ledState);
     delay(150);

     }


    //Taster wird 1 Mal gedrückt:
    if (buttonPushCounter == 4) { //Wenn buttonPushCounter gleich 1, dann...
      digitalWrite(ledPin, HIGH); //Schalte ledPin an
      delay(200);
      digitalWrite(ledPin, LOW);
    }

    //Taster wird 2 Mal gedrückt:
    if (buttonPushCounter == 6) { //Wenn buttonPushCounter gleich 2, dann...
      digitalWrite(ledPin, HIGH); //Schalte ledPin an
      delay(200);
      digitalWrite(ledPin, LOW);
      delay(200);
      digitalWrite(ledPin, HIGH);
      delay(200);
      digitalWrite(ledPin, LOW);
    }

        buttonPushCounter = 0; //Setze buttonPushCounter auf 0

  }

//-------------------------------------------------------------------------------------------


}