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.
Fork of autonomousRobotAndroid by
Hallsensor.cpp
00001 #include "Hallsensor.h" 00002 00003 Hallsensor::Hallsensor( 00004 PinName hall1, 00005 PinName hall2, 00006 PinName hall3 00007 ) 00008 : hall1_(hall1), 00009 hall2_(hall2), 00010 hall3_(hall3) 00011 { 00012 pulses_ = 0; 00013 00014 //Workout what the current state is. 00015 int h1 = hall1_.read(); 00016 int h2 = hall2_.read(); 00017 int h3 = hall3_.read(); 00018 00019 // Set the PullUp Resistor 00020 hall1_.mode(PullUp); 00021 hall2_.mode(PullUp); 00022 hall3_.mode(PullUp); 00023 00024 //set interrupts on only hall 1-3 rise and fall. 00025 hall1_.rise(this, &Hallsensor::encode); 00026 hall1_.fall(this, &Hallsensor::encode); 00027 hall2_.rise(this, &Hallsensor::encode); 00028 hall2_.fall(this, &Hallsensor::encode); 00029 hall3_.rise(this, &Hallsensor::encode); 00030 hall3_.fall(this, &Hallsensor::encode); 00031 } 00032 00033 void Hallsensor::reset(void) 00034 { 00035 pulses_ = 0; 00036 } 00037 00038 int Hallsensor::getPulses(void) 00039 { 00040 return pulses_; 00041 } 00042 00043 00044 void Hallsensor::encode(void) 00045 { 00046 // read the state 00047 int h1 = hall1_.read(); 00048 int h2 = hall2_.read(); 00049 int h3 = hall3_.read(); 00050 00051 //3-bit state. 00052 currState_ = (h1 << 2) | (h2 << 1) | h3; 00053 00054 if ((prevState_ == 0x5) && (currState_ == 0x4)) { 00055 pulses_++; 00056 prevState_ = currState_; 00057 return; 00058 } else if (prevState_ == 0x5 && currState_ == 0x1) { 00059 pulses_--; 00060 prevState_ = currState_; 00061 return; 00062 } 00063 00064 if ((prevState_ == 0x4) && (currState_ == 0x6)) { 00065 pulses_++; 00066 prevState_ = currState_; 00067 return; 00068 } else if (prevState_ == 0x4 && currState_ == 0x5) { 00069 pulses_--; 00070 prevState_ = currState_; 00071 return; 00072 } 00073 00074 if ((prevState_ == 0x6) && (currState_ == 0x2)) { 00075 pulses_++; 00076 prevState_ = currState_; 00077 return; 00078 } else if (prevState_ == 0x6 && currState_ == 0x4) { 00079 pulses_--; 00080 prevState_ = currState_; 00081 return; 00082 } 00083 00084 if ((prevState_ == 0x2) && (currState_ == 0x3)) { 00085 pulses_++; 00086 prevState_ = currState_; 00087 return; 00088 } else if (prevState_ == 0x2 && currState_ == 0x6) { 00089 pulses_--; 00090 prevState_ = currState_; 00091 return; 00092 } 00093 00094 if ((prevState_ == 0x3) && (currState_ == 0x1)) { 00095 pulses_++; 00096 prevState_ = currState_; 00097 return; 00098 } else if (prevState_ == 0x3 && currState_ == 0x2) { 00099 pulses_--; 00100 prevState_ = currState_; 00101 return; 00102 } 00103 00104 if ((prevState_ == 0x1) && (currState_ == 0x5)) { 00105 pulses_++; 00106 prevState_ = currState_; 00107 return; 00108 } else if (prevState_ == 0x1 && currState_ == 0x3) { 00109 pulses_--; 00110 prevState_ = currState_; 00111 return; 00112 } 00113 prevState_ = currState_; 00114 00115 }
Generated on Wed Jul 13 2022 04:37:18 by
1.7.2
