encoder library

Committer:
YutaTogashi
Date:
Thu Dec 13 08:19:50 2018 +0000
Revision:
0:33005fa67bfd
Child:
2:10ce3d24df8e
A;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YutaTogashi 0:33005fa67bfd 1 #include "Encoder.h"
YutaTogashi 0:33005fa67bfd 2
YutaTogashi 0:33005fa67bfd 3 Encoder::Encoder(PinName Apulse,PinName Bpulse) : Apulse(Apulse),Bpulse(Bpulse) {
YutaTogashi 0:33005fa67bfd 4 Encoder::Apulse.rise(this,&Encoder::Apulse_Up);
YutaTogashi 0:33005fa67bfd 5 Encoder::Apulse.fall(this,&Encoder::Apulse_Down);
YutaTogashi 0:33005fa67bfd 6 Encoder::Bpulse.rise(this,&Encoder::Bpulse_Up);
YutaTogashi 0:33005fa67bfd 7 Encoder::Bpulse.fall(this,&Encoder::Bpulse_Down);
YutaTogashi 0:33005fa67bfd 8 RpmCalculateTimer.attach(this,&Encoder::RpmCalculate,CALCULATE_PERIOD);
YutaTogashi 0:33005fa67bfd 9 }
YutaTogashi 0:33005fa67bfd 10
YutaTogashi 0:33005fa67bfd 11 void Encoder::Apulse_Up() {
YutaTogashi 0:33005fa67bfd 12 if(Bpulse) {
YutaTogashi 0:33005fa67bfd 13 count--;
YutaTogashi 0:33005fa67bfd 14 } else {
YutaTogashi 0:33005fa67bfd 15 count++;
YutaTogashi 0:33005fa67bfd 16 }
YutaTogashi 0:33005fa67bfd 17 }
YutaTogashi 0:33005fa67bfd 18
YutaTogashi 0:33005fa67bfd 19 void Encoder::Apulse_Down() {
YutaTogashi 0:33005fa67bfd 20 if(Bpulse) {
YutaTogashi 0:33005fa67bfd 21 count++;
YutaTogashi 0:33005fa67bfd 22 } else {
YutaTogashi 0:33005fa67bfd 23 count--;
YutaTogashi 0:33005fa67bfd 24 }
YutaTogashi 0:33005fa67bfd 25 }
YutaTogashi 0:33005fa67bfd 26
YutaTogashi 0:33005fa67bfd 27 void Encoder::Bpulse_Up() {
YutaTogashi 0:33005fa67bfd 28 if(Apulse) {
YutaTogashi 0:33005fa67bfd 29 count++;
YutaTogashi 0:33005fa67bfd 30 } else {
YutaTogashi 0:33005fa67bfd 31 count--;
YutaTogashi 0:33005fa67bfd 32 }
YutaTogashi 0:33005fa67bfd 33 }
YutaTogashi 0:33005fa67bfd 34
YutaTogashi 0:33005fa67bfd 35 void Encoder::Bpulse_Down() {
YutaTogashi 0:33005fa67bfd 36 if(Apulse) {
YutaTogashi 0:33005fa67bfd 37 count--;
YutaTogashi 0:33005fa67bfd 38 } else {
YutaTogashi 0:33005fa67bfd 39 count++;
YutaTogashi 0:33005fa67bfd 40 }
YutaTogashi 0:33005fa67bfd 41 }
YutaTogashi 0:33005fa67bfd 42
YutaTogashi 0:33005fa67bfd 43 void Encoder::RpmCalculate() {
YutaTogashi 0:33005fa67bfd 44 static float rotationBuffer = 0;
YutaTogashi 0:33005fa67bfd 45 rotation = count / PPR;
YutaTogashi 0:33005fa67bfd 46 rpm = (rotation - rotationBuffer) / CALCULATE_PERIOD * MINUTE;
YutaTogashi 0:33005fa67bfd 47 rotationBuffer = rotation;
YutaTogashi 0:33005fa67bfd 48
YutaTogashi 0:33005fa67bfd 49 angle = rotation * RADIAN;
YutaTogashi 0:33005fa67bfd 50 position = angle - (float)((int)angle / RADIAN) * RADIAN;
YutaTogashi 0:33005fa67bfd 51 }
YutaTogashi 0:33005fa67bfd 52
YutaTogashi 0:33005fa67bfd 53 void Encoder::setup(int Ppr,int Diameter) {
YutaTogashi 0:33005fa67bfd 54 PPR = Ppr;
YutaTogashi 0:33005fa67bfd 55 DIAMETER = Diameter;
YutaTogashi 0:33005fa67bfd 56 }
YutaTogashi 0:33005fa67bfd 57
YutaTogashi 0:33005fa67bfd 58 void Encoder::calculate() {
YutaTogashi 0:33005fa67bfd 59 //rotation = count / PPR;
YutaTogashi 0:33005fa67bfd 60 //distance = DIAMETER * rotation * PI;
YutaTogashi 0:33005fa67bfd 61 //angle = rotation * RADIAN;
YutaTogashi 0:33005fa67bfd 62 //position = angle - (float)((int)angle / RADIAN) * RADIAN;
YutaTogashi 0:33005fa67bfd 63 }
YutaTogashi 0:33005fa67bfd 64 /****値返す用の関数****/
YutaTogashi 0:33005fa67bfd 65 float Encoder::getData(short ch) {
YutaTogashi 0:33005fa67bfd 66 switch(ch) {
YutaTogashi 0:33005fa67bfd 67 case COUNT:
YutaTogashi 0:33005fa67bfd 68 return count; //カウント
YutaTogashi 0:33005fa67bfd 69 break;
YutaTogashi 0:33005fa67bfd 70 case ROTATION:
YutaTogashi 0:33005fa67bfd 71 return rotation; //回転量
YutaTogashi 0:33005fa67bfd 72 break;
YutaTogashi 0:33005fa67bfd 73 case RPM:
YutaTogashi 0:33005fa67bfd 74 return rpm; //rpm
YutaTogashi 0:33005fa67bfd 75 break;
YutaTogashi 0:33005fa67bfd 76 case DISTANCE:
YutaTogashi 0:33005fa67bfd 77 return distance; //距離(mm)
YutaTogashi 0:33005fa67bfd 78 break;
YutaTogashi 0:33005fa67bfd 79 case ANGLE:
YutaTogashi 0:33005fa67bfd 80 return angle; //角度
YutaTogashi 0:33005fa67bfd 81 break;
YutaTogashi 0:33005fa67bfd 82 case POSITION:
YutaTogashi 0:33005fa67bfd 83 return position; //角度(0度から360度までの間の値)
YutaTogashi 0:33005fa67bfd 84 break;
YutaTogashi 0:33005fa67bfd 85 default:
YutaTogashi 0:33005fa67bfd 86 return 0;
YutaTogashi 0:33005fa67bfd 87 break;
YutaTogashi 0:33005fa67bfd 88 }
YutaTogashi 0:33005fa67bfd 89 }