Debounce an input pin.

Committer:
michaelruck
Date:
Sat Mar 28 18:36:46 2015 +0000
Revision:
0:d73a3ab5ce11
Child:
1:b80f4620fbbd
Debounce an input pin.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
michaelruck 0:d73a3ab5ce11 1 /* michael@ruck.com märz 2015 v0.1*/
michaelruck 0:d73a3ab5ce11 2 #include "Debounce.h"
michaelruck 0:d73a3ab5ce11 3 #include "mbed.h"
michaelruck 0:d73a3ab5ce11 4
michaelruck 0:d73a3ab5ce11 5
michaelruck 0:d73a3ab5ce11 6 Debounce::Debounce(PinName pin, uint16_t delay, PinMode pull) : _pin(pin)
michaelruck 0:d73a3ab5ce11 7 {
michaelruck 0:d73a3ab5ce11 8 _delay=delay;
michaelruck 0:d73a3ab5ce11 9 _timer.start();
michaelruck 0:d73a3ab5ce11 10 _pin.mode(pull);
michaelruck 0:d73a3ab5ce11 11 }
michaelruck 0:d73a3ab5ce11 12
michaelruck 0:d73a3ab5ce11 13 uint8_t Debounce::read()
michaelruck 0:d73a3ab5ce11 14 {
michaelruck 0:d73a3ab5ce11 15 static uint8_t encbutton_state=1, encbutton_state_old, encbutton;
michaelruck 0:d73a3ab5ce11 16 static int systime, systime_old;
michaelruck 0:d73a3ab5ce11 17
michaelruck 0:d73a3ab5ce11 18 encbutton_state = _pin.read();
michaelruck 0:d73a3ab5ce11 19 systime=_timer.read_ms();
michaelruck 0:d73a3ab5ce11 20 if((encbutton_state != encbutton_state_old) && (systime > systime_old+_delay)) {
michaelruck 0:d73a3ab5ce11 21 encbutton=encbutton_state;
michaelruck 0:d73a3ab5ce11 22 systime_old=systime;
michaelruck 0:d73a3ab5ce11 23 printf("Button=%i\r\n", encbutton);
michaelruck 0:d73a3ab5ce11 24 }
michaelruck 0:d73a3ab5ce11 25 encbutton_state_old=encbutton_state;
michaelruck 0:d73a3ab5ce11 26 return encbutton;
michaelruck 0:d73a3ab5ce11 27 }