Debouncer Library C++

Um Taster zu entprellen wurde diese Arduino Librarie geschrieben. Der jeweilige Pin, der verwendet wird, kann mit verschiedenen Parametern initialisiert werden. Pinnummer, ob Pullup eingeschaltet ist und ob gewartet wird bis der Schalter wieder losgelassen wird. Wichtig zu wissen ist das wenn der Pullup ausgeschaltet ist, angenommen wird dass der Pin highaktiv ist und durch einen entsprechenden Widerstand beschaltet ist. Mit dbRead() wird der Taster ausgelesen.
Mit den set_xxx Methoden können alle relevanten Variablen jederzeit geändert werden. Zusätzlich können die Variablen des Einleseloops geändert werden. Standardmässig wird der Schalter 20 mal eingelesen (_cycles = 20;), dies im Abstand von 100us (_dtus = 100;). Werden Schalter mit anderen Prellcharakteristiken verwendet können diese Werte angepasst werden. Alle verwendeten Variablen können durch die entsprechenden get_xxx Methoden ausgelesen werden.

Download Debouncer Library


Source Code

Debounce.h

/*
Debounce.h - Library for debouncing Pin
Created by Simon Aeschbacher
September 28, 2015
Released into the public domain.
*/ #if ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif class Debounce {  public:
// pin(Pin on Arduino, en_pullup (Enables pullupresistor), hur (hold until release))    Debounce(int pin, boolean pullup, boolean hur);
// returns if switch is active    boolean dbRead(void);        void    set_pin(int pin);    int     get_pin(void);    void    set_pullup(boolean pullup);    boolean get_pullup(void);    void    set_hur(boolean hur);    boolean get_hur(void);    void    set_cycles(int cycles);    int     get_cycles(void);    void    set_dtus(int dtus);    int     get_dtus(void);  private:    boolean _db(void);        int     _pin;    boolean _pullup;    boolean _hur;    int     _cycles = 20;    int     _dtus = 100; };

Debounce.cpp

/*
Debounce.cpp - Debouncing Switches
Created by Simon Aeschbacher
September 28 2015
Released into the public domain.*/ #if ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif #include "Debounce.h" Debounce::Debounce(int pin, boolean pullup, boolean hur) {  _pin = pin;  _pullup = pullup;  _hur = hur;    pinMode(_pin, INPUT);  digitalWrite(_pin, _pullup); } boolean Debounce::_db(void) {  boolean t_v = digitalRead(_pin);  boolean o_t_v;  int cnt = 0;    if(t_v != _pullup)  {    do { t_v = digitalRead(_pin); o_t_v = t_v; delayMicroseconds(_dtus); if(digitalRead(_pin) != o_t_v) cnt = 0; else cnt++; } while(cnt <= _cycles);    return true;  }  else return false; } boolean Debounce::dbRead() {  boolean db_t_v = _db();  if(_hur == true && db_t_v == true) while(_db() == true);  if(db_t_v == true) return true;  else return false; } void Debounce::set_pin(int pin) { _pin = pin; } int Debounce::get_pin(void) { return _pin; } void Debounce::set_pullup(boolean pullup) { _pullup = pullup; } boolean Debounce::get_pullup(void) { return _pullup; } void Debounce::set_hur(boolean hur) { _hur = hur; } boolean Debounce::get_hur(void) { return _hur; } void Debounce::set_cycles(int cycles) { _cycles = cycles; } int Debounce::get_cycles(void) { return _cycles; } void Debounce::set_dtus(int dtus) { _dtus = dtus; } int Debounce::get_dtus(void) { return _dtus; }

Debounce.ino

#include "Debounce.h"

Debounce pin1(8,true,true);

void setup()
{
  Serial.begin(9600);
  while (!Serial) {;}
}

void loop()
{
  if(pin1.dbRead()) Serial.println("PIN active");
  else Serial.println("PIN inactive");
}