ai
Dependents: ball_snatch NHK2020-arm-sub NHK2020-arm-sub NHK2020-arm-sub2 ... more
Diff: EC.cpp
- Revision:
- 0:eb20667a5a27
- Child:
- 1:b7e957c01761
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EC.cpp Thu Jul 04 09:25:36 2019 +0000 @@ -0,0 +1,105 @@ +#include "mbed.h" +#include "EC.h" + + +Ec::Ec(int res,int multi): + count_(0),pre_count_(0),resolution_(res),multiplication_(multi) +{ + timer_.start(); +} + +int Ec::getCount() +{ + return count_; +} + +void Ec::calOmega() +{ + double t=timer_.read(); + omega_=(count_-pre_count_)*2.0f*M_PI/(multiplication_*resolution_*(t-ptw_)); + pre_count_=count_; + ptw_=t; +} + +double Ec::getOmega() +{ + return omega_; +} +void Ec::setResolution(int res){ + resolution_=res; +} + +/*reset関数の定義*/ +/*エンコーダを初期状態に戻すことができる*/ +void Ec::reset() +{ + count_=0; + pre_count_=0,omega_=0; + ptw_=0; +} + + +////////////////////////////////////////////////////1逓倍////////////////////////////////////////////////////////////////// +Ec1multi::Ec1multi(PinName signalA,PinName signalB,int res) : Ec(res,1),signalA_(signalA),signalB_(signalB) +{ + signalA_.rise(callback(this,&Ec1multi::upA)); +} + +//ピン変化割り込み関数の定義 +void Ec1multi::upA() +{ + if(signalB_.read())count_++; + else count_--; +} +////////////////////////////////////////////////////2逓倍////////////////////////////////////////////////////////////////// +Ec2multi::Ec2multi(PinName signalA,PinName signalB,int res) : Ec(res,2),signalA_(signalA),signalB_(signalB) +{ + signalA_.rise(callback(this,&Ec2multi::upA)); + signalA_.fall(callback(this,&Ec2multi::downA)); + printf("Initialize OK!!\r\n"); +} + +//ピン変化割り込み関数の定義 +void Ec2multi::upA() +{ + if(signalB_.read())count_++; + else count_--; +} +void Ec2multi::downA() +{ + if(signalB_.read())count_--; + else count_++; +} + +////////////////////////////////////////////////////4逓倍////////////////////////////////////////////////////////////////// +Ec4multi::Ec4multi(PinName signalA,PinName signalB,int res) : Ec(res,4),signalA_(signalA),signalB_(signalB),pa_(0),pb_(0) +{ + signalA_.rise(callback(this,&Ec4multi::upA)); + signalA_.fall(callback(this,&Ec4multi::downA)); + signalB_.rise(callback(this,&Ec4multi::upB)); + signalB_.fall(callback(this,&Ec4multi::downB)); +} +void Ec4multi::upA() +{ + pa_=1; + if(pb_==1)count_++; + else count_--; +} +void Ec4multi::downA() +{ + pa_=0; + if(pb_==1)count_--; + else count_++; +} +void Ec4multi::upB() +{ + pb_=1; + if(pa_==1)count_--; + else count_++; +} +void Ec4multi::downB() +{ + pb_=0; + if(pa_==1)count_++; + else count_--; +} \ No newline at end of file