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.
Dependencies: mbed-dsp mbed-rtos mbed
Dependents: MAE433_Library_Tester RobotBalancerv2
QuadEnc.cpp
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 }
Generated on Tue Jul 12 2022 16:20:51 by
1.7.2