Fork of mRotaryEncoder for mdeb-os. uses newer version of PinDetect. Testprogram: https://os.mbed.com/users/charly/code/mRotaryEncoder_HelloWorld-os/
Dependents: mRotaryEncoder_HelloWorld-os TMC2209-Test2
Revision 12:1925aac090b7, committed 2021-03-16
- Comitter:
- charly
- Date:
- Tue Mar 16 20:19:04 2021 +0000
- Parent:
- 11:24b34deae975
- Child:
- 13:d22167ec460c
- Commit message:
- Version of mRotaryEncoder for mbed-os
Changed in this revision
--- a/PinDetect.lib Tue Mar 03 12:20:55 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/AjK/code/PinDetect/#cb3afc45028b
--- a/mRotaryEncoder.cpp Tue Mar 03 12:20:55 2020 +0000
+++ b/mRotaryEncoder.cpp Tue Mar 16 20:19:04 2021 +0000
@@ -12,10 +12,10 @@
// attach interrrupts on pinA
if (detectRise != 0){
- m_pinA->attach_asserted(this, &mRotaryEncoder::rise);
+ m_pinA->attach_asserted(callback(this, &mRotaryEncoder::rise));
}
if (detectFall != 0){
- m_pinA->attach_deasserted(this, &mRotaryEncoder::fall);
+ m_pinA->attach_deasserted(callback(this, &mRotaryEncoder::fall));
}
//start sampling pinA
@@ -56,12 +56,18 @@
if (*m_pinA == 0) {
if (*m_pinB == 1) {
m_position++;
- rotCWIsr.call();
+ if (rotCWIsr) {
+ rotCWIsr();
+ }
} else {
m_position--;
- rotCCWIsr.call();
+ if (rotCWIsr){
+ rotCCWIsr();
+ }
}
- rotIsr.call(); // call the isr for rotation
+ if (rotIsr){
+ rotIsr(); // call the isr for rotation
+ }
}
}
@@ -71,12 +77,18 @@
if (*m_pinA == 1) {
if (*m_pinB == 1) {
m_position--;
- rotCCWIsr.call();
+ if (rotCCWIsr){
+ rotCCWIsr();
+ }
} else {
m_position++;
- rotCWIsr.call();
+ if (rotCWIsr){
+ rotCWIsr();
+ }
}
- rotIsr.call(); // call the isr for rotation
+ if (rotIsr){
+ rotIsr(); // call the isr for rotation
+ }
}
}
--- a/mRotaryEncoder.h Tue Mar 03 12:20:55 2020 +0000
+++ b/mRotaryEncoder.h Tue Mar 16 20:19:04 2021 +0000
@@ -46,8 +46,8 @@
* @param pinSW Pin for push-button switch
* @param pullmode mode for pinA pinB and pinSW like DigitalIn.mode
* @param debounceTime_us time in micro-seconds to wait for bouncing of mechanical switches to end
- * @param detectRise Detect rise event as new rotation
- * @param detectFall Detect fall event as new rotation
+ * @param detectRise Detect rise event as new rotation. default 1
+ * @param detectFall Detect fall event as new rotation. default 1
*/
mRotaryEncoder(PinName pinA, PinName pinB, PinName pinSW, PinMode pullMode=PullUp, int debounceTime_us=1000, int detectRise=1, int detectFall=1);
@@ -80,74 +80,75 @@
*
* keep this function short, as no interrrupts can occour within
*
- * @param fptr Pointer to callback-function
+ * @param cb callback-function
*/
- void attachSW(void (*fptr)(void)) {
- m_pinSW->attach_deasserted(fptr);
+ void attachSW(Callback<void()> cb) {
+ m_pinSW->attach_deasserted(cb);
}
- template<typename T>
+// template<typename T>
/** attach an object member function to be called when switch is pressed
*
* @param tptr pointer to object
* @param mprt pointer ro member function
*
*/
- void attachSW(T* tptr, void (T::*mptr)(void)) {
+/* void attachSW(T* tptr, void (T::*mptr)(void)) {
if ((mptr != NULL) && (tptr != NULL)) {
m_pinSW->attach_deasserted(tptr, mptr);
}
}
-
+*/
/** callback-System for rotation of shaft
*
* attach a function to be called when the shaft is rotated
* keep this function short, as no interrrupts can occour within
*
- * @param fprt Pointer to callback-function
+ * @param cb callback-function
*/
- void attachROT(void (*fptr)(void)) {
- rotIsr.attach(fptr);
+ void attachROT(Callback<void()> cb) {
+ rotIsr = cb;
}
- template<typename T>
+// template<typename T>
/** attach an object member function to be called when shaft is rotated
*
* @param tptr pointer to object
* @param mprt pointer ro member function
*
*/
- void attachROT(T* tptr, void (T::*mptr)(void)) {
+/* void attachROT(T* tptr, void (T::*mptr)(void)) {
if ((mptr != NULL) && (tptr != NULL)) {
rotIsr.attach(tptr, mptr);
}
}
-
+*/
/** callback-System for rotation of shaft CW
*
* attach a function to be called when the shaft is rotated clockwise
* keep this function short, as no interrrupts can occour within
*
- * @param fprt Pointer to callback-function
+ * @param cb callback-function
*/
- void attachROTCW(void (*fptr)(void)) {
- rotCWIsr.attach(fptr);
+ void attachROTCW(Callback<void()> cb) {
+ rotCWIsr = cb;
}
- template<typename T>
+// template<typename T>
/** attach an object member function to be called when shaft is rotated clockwise
*
* @param tptr pointer to object
* @param mprt pointer ro member function
*
*/
- void attachROTCW(T* tptr, void (T::*mptr)(void)) {
+/* void attachROTCW(T* tptr, void (T::*mptr)(void)) {
if ((mptr != NULL) && (tptr != NULL)) {
rotCWIsr.attach(tptr, mptr);
}
}
+*/
/** callback-System for rotation of shaft CCW
*
@@ -156,23 +157,24 @@
*
* @param fprt Pointer to callback-function
*/
- void attachROTCCW(void (*fptr)(void)) {
- rotCCWIsr.attach(fptr);
+ void attachROTCCW(Callback<void()> cb) {
+ rotCCWIsr = cb;
}
- template<typename T>
+// template<typename T>
/** attach an object member function to be called when shaft is rotated CCW
*
* @param tptr pointer to object
* @param mprt pointer ro member function
*
*/
- void attachROTCCW(T* tptr, void (T::*mptr)(void)) {
+/* void attachROTCCW(T* tptr, void (T::*mptr)(void)) {
if ((mptr != NULL) && (tptr != NULL)) {
rotCCWIsr.attach(tptr, mptr);
}
}
+*/
private:
PinDetect *m_pinA;
@@ -195,16 +197,16 @@
/**
* rotated any direction
*/
- FunctionPointer rotIsr;
+ Callback<void()> rotIsr;
/**
* clockwise rotated
*/
- FunctionPointer rotCWIsr;
+ Callback<void()> rotCWIsr;
/**
* counterclockwise rotated
*/
- FunctionPointer rotCCWIsr;
+ Callback<void()> rotCCWIsr;
};