class to debouce interrupt pin
Debounce.cpp@0:dc197298a382, 2021-01-05 (annotated)
- 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?
User | Revision | Line number | New 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 | } |