ec
Fork of EC by
EC.cpp
- Committer:
- jack0325suzu
- Date:
- 2016-06-16
- Revision:
- 0:20fc96400ca3
- Child:
- 5:4abba4f54406
File content as of revision 0:20fc96400ca3:
#include "mbed.h" #include "EC.h" int Ec::defsolution; double Ec::deftime; //ピン変化割り込み関数の定義 void Ec::upA(){ stateA=1; if(stateB==0&&S==0) { S=1; } else if(stateB==1&&S==3) { S=2; } } void Ec::downA(){ stateA=0; if(stateB==1&&S==2) { S=3; } else if(stateB==0&&S==1) { S=0; count--; } } void Ec::upB(){ stateB=1; if(stateA==1&&S==1) { S=2; } else if(stateA==0&&S==0) { S=3; } } void Ec::downB(){ stateB=0; if(stateA==0&&S==3) { count++; S=0; } else if(stateA==1&&S==2) { S=1; } } //コンストラクタの定義 //main関数の前に必ず一度宣言する //第一・第二引数はエンコーダのA・B相のピン名 //第三院数はエンコーダの分解能 Ec::Ec(PinName signalA,PinName signalB,int s=defsolution,double t=deftime) : signalA_(signalA),signalB_(signalB) { S=0;stateA=0;stateB=0;count=0;pre_count=0.0; signalA_.rise(this,&Ec::upA); signalA_.fall(this,&Ec::downA); signalB_.rise(this,&Ec::upB); signalB_.fall(this,&Ec::downB); dt=t; solution=s; defsolution=s; } int Ec::getCount(){ return count; } void Ec::CalOmega(){ omega=(count-pre_count)*2*M_pi/(solution*dt); pre_count=count; } double Ec::getOmega(){ return omega; } double Ec::getPreCount(){ precount=count+S/4.0; return precount; } /*reset関数の定義*/ /*エンコーダを初期状態に戻すことができる*/ void Ec::reset(){ S=0;stateA=0;stateB=0;count=0;pre_count=0.0,omega=0; } /*setTime関数の定義*/ /*自分で好きなように角速度計算の間隔を決めることができる(デフォルトは0.05秒)*/ void Ec::setTime(double t){ dt=t; }