Arduino Taster Entprellung

Entprellung eines Tasters mit den Zeitoptionen Mindeste Druckzeit, Entprellzeit, Abtastrate (indirekte Entprellung).

int pin = 6;
int laststate = HIGH;
int state = HIGH;
boolean debouncing = false; //Entprellt?
boolean minimpuls = true; //Minimale Impulslänge für Aktion
unsigned long lastintervallmillis = millis();
unsigned long changestate = millis();
unsigned long lastdebounce = millis();
unsigned long lastminpulse = millis();

void setup() {
  Serial.begin(115200);
}

//Konfiguration:
int Abtastrate = 5;
int entprellzeit = 100;
int minpuls = 50; //Minimale Pulslänge


void loop() {
  long tempmillis = millis();
  if ((tempmillis - lastintervallmillis) >=  Abtastrate ) //Frühestens nach Abtastrate überprüfen, reicht manchmal schon als kleine Entprellung
  {
    lastintervallmillis = tempmillis; //Letzte Abtastung speichern
    int tempstate = digitalRead(pin); //Pin einlesen

    if (tempstate != laststate) //Pin hat sich geändert, hier ist egal in welche Richtung, im Prinzip Low und High Entprellung.
    {
      debouncing = true; //Entprellung aktivieren
      minimpuls=true;
      laststate = tempstate; //Buffer für temporären Pinstatus
      changestate = tempmillis; //Änderungszeitpunkt
    }
    if (debouncing) { 
      if ((tempmillis - changestate) >= entprellzeit && debouncing)
      {
        debouncing = false;
      }
    }
    if (tempmillis - changestate >= (entprellzeit + minpuls) && !debouncing )
    {
      minimpuls=false;
    }
    if(!debouncing && !minimpuls)
      state = laststate;
      debouncing = true;
      minimpuls = true;
      if (state == HIGH) {
        Serial.println("Alles erfüllt!");
      }
    }
  }
}

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Denkhilfe *

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.