Christian Burri / Mbed 2 deprecated autonomous Robot Android

Dependencies:   mbed

Fork of autonomous Robot Android by Christian Burri

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Hallsensor.cpp Source File

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 }