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.
Dependents: BMT-K9_encoder BMT-K9-Regelaar K9motoraansturing_copy EMGverwerking ... more
encoder.cpp
00001 00002 #include "encoder.h" 00003 00004 00005 Encoder::Encoder(PinName int_a, PinName int_b, bool speed) : pin_a(int_a), pin_b(int_b) 00006 { 00007 m_speed_enabled = speed; 00008 if(m_speed_enabled) 00009 EncoderTimer.start(); 00010 pin_a.fall(this,&Encoder::encoderFalling); 00011 pin_a.rise(this,&Encoder::encoderRising); 00012 m_position = 0; 00013 m_speed = 0; 00014 zero_speed = false; 00015 } 00016 00017 void Encoder::encoderFalling(void) 00018 { 00019 //temporary speed storage, in case higher interrupt level does stuff 00020 float temp_speed=0; 00021 int motortime_now; 00022 if(m_speed_enabled) 00023 { 00024 motortime_now = EncoderTimer.read_us(); 00025 EncoderTimer.reset(); 00026 EncoderTimeout.attach(this,&Encoder::timeouthandler,0.1); 00027 /*calculate as ticks per second*/ 00028 if(zero_speed) 00029 temp_speed = 0; 00030 else 00031 temp_speed = 1000000./motortime_now; 00032 zero_speed = false; 00033 } 00034 if(pin_b) 00035 { 00036 m_position++; 00037 m_speed = temp_speed; 00038 } 00039 else 00040 { 00041 m_position--; 00042 m_speed = -temp_speed; //negative speed 00043 } 00044 } 00045 00046 void Encoder::encoderRising(void) 00047 { 00048 //temporary speed storage, in case higher interrupt level does stuff 00049 00050 float temp_speed=0; 00051 int motortime_now; 00052 if(m_speed_enabled) 00053 { 00054 EncoderTimer.reset(); 00055 EncoderTimeout.attach(this,&Encoder::encoderFalling,0.1); 00056 /*calculate as ticks per second*/ 00057 if(zero_speed) 00058 temp_speed = 0; 00059 else 00060 temp_speed = 1000000./motortime_now; 00061 zero_speed = false; 00062 } 00063 if(pin_b) 00064 { 00065 m_position--; 00066 m_speed = -temp_speed; //negative speed 00067 } 00068 else 00069 { 00070 m_position++; 00071 m_speed = temp_speed; 00072 } 00073 } 00074 00075 void Encoder::timeouthandler(void) 00076 { 00077 m_speed = 0; 00078 zero_speed = true; 00079 }
Generated on Fri Jul 15 2022 01:13:58 by
