Weimen Li / Mbed 2 deprecated MAE433_Library

Dependencies:   mbed-dsp mbed-rtos mbed

Dependents:   MAE433_Library_Tester RobotBalancerv2

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers QuadEnc.cpp Source File

QuadEnc.cpp

Go to the documentation of this file.
00001 /**
00002  * @file QuadEnc.cpp
00003  * @date June 2nd, 2016
00004  * @author Weimen Li
00005  */
00006 
00007 #include "QuadEnc.hpp"
00008 
00009 QuadEnc::QuadEnc(PinName ChannelA, PinName ChannelB, float CPR) :
00010 count(0), bHasNewCount(false),
00011 CPR(CPR), ChannelAIn(ChannelA), ChannelBIn(ChannelB), ChannelAInter(ChannelA), ChannelBInter(ChannelB),
00012 prevCount(0), prevRevs(0), enc_val(0) {
00013     
00014     // Configure Channel A interrupt to trigger on rise and fall.
00015     ChannelAInter.rise(this, &QuadEnc::QuadEncISR);
00016     ChannelAInter.fall(this, &QuadEnc::QuadEncISR);
00017 
00018     // Configure Channel B interrupt to trigger on rise and fall.
00019     ChannelBInter.rise(this, &QuadEnc::QuadEncISR);
00020     ChannelBInter.fall(this, &QuadEnc::QuadEncISR);
00021 
00022 }
00023 
00024 QuadEnc::~QuadEnc() {
00025 
00026 }
00027 
00028 void QuadEnc::QuadEncISR() {
00029     uint8_t QuadEncData = (ChannelAIn.read() << 1) | ChannelBIn.read();
00030     const int8_t QuadEncLUT[16] = { 0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1,
00031             -1, 0 };
00032     enc_val = enc_val << 2;
00033     enc_val = enc_val | QuadEncData;
00034     count += QuadEncLUT[enc_val & 0b1111];
00035     bHasNewCount = true;
00036 }
00037 
00038 bool QuadEnc::hasNewCount() {
00039     bool returnVal = bHasNewCount;
00040     bHasNewCount = false;
00041     return returnVal;
00042 }
00043 
00044 float QuadEnc::getRevs() {
00045     // Capture the current count to avoid corruption.
00046     float currentCount = count;
00047     if (prevCount != currentCount) {
00048         prevRevs = currentCount / CPR;
00049     }
00050     return prevRevs;
00051 }
00052 
00053 void QuadEnc::reset() {
00054     count = 0;
00055     bHasNewCount = false;
00056 }