Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: decoder.cpp
- Revision:
- 0:c3a05fe15b84
- Child:
- 1:017efde7ab29
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/decoder.cpp Tue Jan 08 17:10:13 2019 +0000
@@ -0,0 +1,84 @@
+#include "decoder.h"
+
+/**
+* @brief constructor
+* @details initializes interrupt on channel A, and initialises internal variables
+* @param NA
+* @return NA
+* @warning interrupt functionallity on channel B is not used as it is not required.
+*
+*/
+
+decoder :: decoder(PinName channelA, PinName channelB):_channelA(channelA),_channelB(channelB) {
+
+ _channelA.rise(this, &decoder::isr);
+ _oldCount = 0;
+ _count = 0;
+ _direction = 0;
+
+}
+
+/**
+* @brief isr
+* @details interrupt servive routine to decode the encoder output
+* @param NA
+* @return NA
+* @warning
+*
+*/
+
+
+
+void decoder :: isr(){
+
+ uint8_t chA = _channelA.read();
+ uint8_t chB = _channelB.read();
+
+ if(chA == 1){
+
+ if(chB == 1){_count++;}
+ if(chB == 0){_count--;}
+
+ }
+
+ if(_oldCount < _count){_direction = 1;}
+ if(_oldCount > _count){_direction = -1;}
+ if(_oldCount == _count){_direction = 0;}
+
+ _oldCount = _count;
+
+}
+
+/**
+* @brief getDirection()
+* @details function to return the class private variable _direction
+* @param NA
+* @return the direction of encoder
+* @warning
+*
+*/
+
+int8_t decoder :: getDirection(){
+
+ return _direction;
+
+
+
+}
+
+/**
+* @brief getCount
+* @details function to return the class private variable _count
+* @param NA
+* @return the number of turns of encoder +/-
+* @warning
+*
+*/
+
+int16_t decoder :: getCount(){
+
+
+ return _count;
+
+}
+