encoder library
Encoder.cpp@0:33005fa67bfd, 2018-12-13 (annotated)
- Committer:
- YutaTogashi
- Date:
- Thu Dec 13 08:19:50 2018 +0000
- Revision:
- 0:33005fa67bfd
- Child:
- 2:10ce3d24df8e
A;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |