class to debouce interrupt pin

Committer:
JeroenAero
Date:
Tue Jan 05 14:38:14 2021 +0000
Revision:
0:dc197298a382
Debounce working, only NULL functions will fault;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JeroenAero 0:dc197298a382 1 #include "mbed.h"
JeroenAero 0:dc197298a382 2 #include "Debounce.h"
JeroenAero 0:dc197298a382 3
JeroenAero 0:dc197298a382 4 Debounce::Debounce(PinName Pin, int DebounceMS, void (*RiseFunction)(), void (*FallFunction)()) : Input(Pin)
JeroenAero 0:dc197298a382 5 {
JeroenAero 0:dc197298a382 6 Input.mode(PullUp); //Set the input to pull up or pull down.
JeroenAero 0:dc197298a382 7 DebounceTime = (float)DebounceMS / 1000; //Calculate the debouncetime in seconds.
JeroenAero 0:dc197298a382 8 Input.rise(callback(this,&Debounce::InputRise));
JeroenAero 0:dc197298a382 9 Input.fall(callback(this,&Debounce::InputFall));
JeroenAero 0:dc197298a382 10 RiseFunctionPointer = RiseFunction;
JeroenAero 0:dc197298a382 11 FallFunctionPointer = FallFunction;
JeroenAero 0:dc197298a382 12 }
JeroenAero 0:dc197298a382 13
JeroenAero 0:dc197298a382 14 void Debounce::InputRise()
JeroenAero 0:dc197298a382 15 {
JeroenAero 0:dc197298a382 16 //This function will get called when the input rises.
JeroenAero 0:dc197298a382 17 InputRiseTick.attach(callback(this, &Debounce::RiseTick), DebounceTime); //Attach a ticker with the desired check time and call the function risetick when time's up.
JeroenAero 0:dc197298a382 18 }
JeroenAero 0:dc197298a382 19
JeroenAero 0:dc197298a382 20 void Debounce::InputFall()
JeroenAero 0:dc197298a382 21 {
JeroenAero 0:dc197298a382 22 //This function will get called when the input falls.
JeroenAero 0:dc197298a382 23 InputFallTick.attach(callback(this, &Debounce::FallTick), DebounceTime); //Attach a ticker with the desired check time and call the function risetick when time's up.
JeroenAero 0:dc197298a382 24 }
JeroenAero 0:dc197298a382 25
JeroenAero 0:dc197298a382 26 void Debounce::RiseTick()
JeroenAero 0:dc197298a382 27 {
JeroenAero 0:dc197298a382 28 //This function will get called after a set time from the last rise event.
JeroenAero 0:dc197298a382 29 InputRiseTick.detach(); //detach the ticker, as we only use it once.
JeroenAero 0:dc197298a382 30 if (Input) //Check wheter or not the input is still high.
JeroenAero 0:dc197298a382 31 {
JeroenAero 0:dc197298a382 32 //Input is still high after the last rise event.
JeroenAero 0:dc197298a382 33 (*RiseFunctionPointer)(); //Call the rise function.
JeroenAero 0:dc197298a382 34
JeroenAero 0:dc197298a382 35 }
JeroenAero 0:dc197298a382 36 }
JeroenAero 0:dc197298a382 37
JeroenAero 0:dc197298a382 38 void Debounce::FallTick()
JeroenAero 0:dc197298a382 39 {
JeroenAero 0:dc197298a382 40 //This function will get called after a set time from the last fall event.
JeroenAero 0:dc197298a382 41 InputFallTick.detach(); //detach the ticker, as we only use it once.
JeroenAero 0:dc197298a382 42 if (!Input) //Check wheter or not the input is still low.
JeroenAero 0:dc197298a382 43 {
JeroenAero 0:dc197298a382 44 //Input is still low after the last fall event.
JeroenAero 0:dc197298a382 45 (*FallFunctionPointer)();
JeroenAero 0:dc197298a382 46 }
JeroenAero 0:dc197298a382 47 }