// 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
}
//-------------------------------------------------------------------------------------------
}