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.
EC.cpp@13:6060cceed39e, 2021-02-11 (annotated)
- Committer:
- aoikoizumi
- Date:
- Thu Feb 11 13:12:56 2021 +0000
- Revision:
- 13:6060cceed39e
- Parent:
- 11:acbbd742df47
a;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| MazeTaka | 0:eb20667a5a27 | 1 | #include "mbed.h" |
| MazeTaka | 0:eb20667a5a27 | 2 | #include "EC.h" |
| MazeTaka | 0:eb20667a5a27 | 3 | |
| MazeTaka | 0:eb20667a5a27 | 4 | |
| MazeTaka | 0:eb20667a5a27 | 5 | Ec::Ec(int res,int multi): |
| MazeTaka | 0:eb20667a5a27 | 6 | count_(0),pre_count_(0),resolution_(res),multiplication_(multi) |
| MazeTaka | 0:eb20667a5a27 | 7 | { |
| MazeTaka | 0:eb20667a5a27 | 8 | timer_.start(); |
| MazeTaka | 0:eb20667a5a27 | 9 | } |
| MazeTaka | 0:eb20667a5a27 | 10 | |
| MazeTaka | 8:17aff8f21d19 | 11 | int Ec::getCount()const |
| MazeTaka | 0:eb20667a5a27 | 12 | { |
| MazeTaka | 0:eb20667a5a27 | 13 | return count_; |
| MazeTaka | 0:eb20667a5a27 | 14 | } |
| MazeTaka | 0:eb20667a5a27 | 15 | |
| MazeTaka | 11:acbbd742df47 | 16 | double Ec::getRad()const |
| MazeTaka | 10:ad0f13db7b92 | 17 | { |
| MazeTaka | 10:ad0f13db7b92 | 18 | return count_*2.0f*M_PI/(multiplication_*resolution_); |
| MazeTaka | 10:ad0f13db7b92 | 19 | } |
| MazeTaka | 10:ad0f13db7b92 | 20 | |
| MazeTaka | 0:eb20667a5a27 | 21 | void Ec::calOmega() |
| MazeTaka | 0:eb20667a5a27 | 22 | { |
| MazeTaka | 0:eb20667a5a27 | 23 | double t=timer_.read(); |
| MazeTaka | 0:eb20667a5a27 | 24 | omega_=(count_-pre_count_)*2.0f*M_PI/(multiplication_*resolution_*(t-ptw_)); |
| MazeTaka | 0:eb20667a5a27 | 25 | pre_count_=count_; |
| MazeTaka | 0:eb20667a5a27 | 26 | ptw_=t; |
| aoikoizumi | 13:6060cceed39e | 27 | //printf(" g=%2.1f",omega_); |
| MazeTaka | 0:eb20667a5a27 | 28 | } |
| MazeTaka | 0:eb20667a5a27 | 29 | |
| MazeTaka | 8:17aff8f21d19 | 30 | double Ec::getOmega()const |
| MazeTaka | 0:eb20667a5a27 | 31 | { |
| aoikoizumi | 13:6060cceed39e | 32 | |
| MazeTaka | 0:eb20667a5a27 | 33 | return omega_; |
| MazeTaka | 0:eb20667a5a27 | 34 | } |
| MazeTaka | 10:ad0f13db7b92 | 35 | void Ec::setResolution(int res) |
| MazeTaka | 10:ad0f13db7b92 | 36 | { |
| MazeTaka | 0:eb20667a5a27 | 37 | resolution_=res; |
| MazeTaka | 0:eb20667a5a27 | 38 | } |
| MazeTaka | 0:eb20667a5a27 | 39 | |
| MazeTaka | 0:eb20667a5a27 | 40 | /*reset関数の定義*/ |
| MazeTaka | 0:eb20667a5a27 | 41 | /*エンコーダを初期状態に戻すことができる*/ |
| MazeTaka | 0:eb20667a5a27 | 42 | void Ec::reset() |
| MazeTaka | 0:eb20667a5a27 | 43 | { |
| MazeTaka | 0:eb20667a5a27 | 44 | count_=0; |
| MazeTaka | 0:eb20667a5a27 | 45 | pre_count_=0,omega_=0; |
| MazeTaka | 0:eb20667a5a27 | 46 | ptw_=0; |
| MazeTaka | 1:b7e957c01761 | 47 | timer_.stop(); |
| MazeTaka | 1:b7e957c01761 | 48 | timer_.reset(); |
| MazeTaka | 1:b7e957c01761 | 49 | timer_.start(); |
| MazeTaka | 0:eb20667a5a27 | 50 | } |
| MazeTaka | 0:eb20667a5a27 | 51 | |
| MazeTaka | 0:eb20667a5a27 | 52 | |
| MazeTaka | 0:eb20667a5a27 | 53 | ////////////////////////////////////////////////////1逓倍////////////////////////////////////////////////////////////////// |
| MazeTaka | 0:eb20667a5a27 | 54 | Ec1multi::Ec1multi(PinName signalA,PinName signalB,int res) : Ec(res,1),signalA_(signalA),signalB_(signalB) |
| MazeTaka | 0:eb20667a5a27 | 55 | { |
| MazeTaka | 0:eb20667a5a27 | 56 | signalA_.rise(callback(this,&Ec1multi::upA)); |
| MazeTaka | 0:eb20667a5a27 | 57 | } |
| MazeTaka | 0:eb20667a5a27 | 58 | |
| MazeTaka | 0:eb20667a5a27 | 59 | //ピン変化割り込み関数の定義 |
| MazeTaka | 0:eb20667a5a27 | 60 | void Ec1multi::upA() |
| MazeTaka | 0:eb20667a5a27 | 61 | { |
| MazeTaka | 0:eb20667a5a27 | 62 | if(signalB_.read())count_++; |
| MazeTaka | 0:eb20667a5a27 | 63 | else count_--; |
| MazeTaka | 0:eb20667a5a27 | 64 | } |
| MazeTaka | 0:eb20667a5a27 | 65 | ////////////////////////////////////////////////////2逓倍////////////////////////////////////////////////////////////////// |
| MazeTaka | 0:eb20667a5a27 | 66 | Ec2multi::Ec2multi(PinName signalA,PinName signalB,int res) : Ec(res,2),signalA_(signalA),signalB_(signalB) |
| MazeTaka | 0:eb20667a5a27 | 67 | { |
| MazeTaka | 0:eb20667a5a27 | 68 | signalA_.rise(callback(this,&Ec2multi::upA)); |
| MazeTaka | 0:eb20667a5a27 | 69 | signalA_.fall(callback(this,&Ec2multi::downA)); |
| MazeTaka | 0:eb20667a5a27 | 70 | } |
| MazeTaka | 0:eb20667a5a27 | 71 | |
| MazeTaka | 0:eb20667a5a27 | 72 | //ピン変化割り込み関数の定義 |
| MazeTaka | 0:eb20667a5a27 | 73 | void Ec2multi::upA() |
| MazeTaka | 0:eb20667a5a27 | 74 | { |
| MazeTaka | 0:eb20667a5a27 | 75 | if(signalB_.read())count_++; |
| MazeTaka | 0:eb20667a5a27 | 76 | else count_--; |
| MazeTaka | 0:eb20667a5a27 | 77 | } |
| MazeTaka | 0:eb20667a5a27 | 78 | void Ec2multi::downA() |
| MazeTaka | 0:eb20667a5a27 | 79 | { |
| MazeTaka | 0:eb20667a5a27 | 80 | if(signalB_.read())count_--; |
| MazeTaka | 0:eb20667a5a27 | 81 | else count_++; |
| MazeTaka | 0:eb20667a5a27 | 82 | } |
| MazeTaka | 0:eb20667a5a27 | 83 | |
| MazeTaka | 0:eb20667a5a27 | 84 | ////////////////////////////////////////////////////4逓倍////////////////////////////////////////////////////////////////// |
| MazeTaka | 0:eb20667a5a27 | 85 | Ec4multi::Ec4multi(PinName signalA,PinName signalB,int res) : Ec(res,4),signalA_(signalA),signalB_(signalB),pa_(0),pb_(0) |
| MazeTaka | 0:eb20667a5a27 | 86 | { |
| MazeTaka | 0:eb20667a5a27 | 87 | signalA_.rise(callback(this,&Ec4multi::upA)); |
| MazeTaka | 0:eb20667a5a27 | 88 | signalA_.fall(callback(this,&Ec4multi::downA)); |
| MazeTaka | 0:eb20667a5a27 | 89 | signalB_.rise(callback(this,&Ec4multi::upB)); |
| MazeTaka | 0:eb20667a5a27 | 90 | signalB_.fall(callback(this,&Ec4multi::downB)); |
| MazeTaka | 0:eb20667a5a27 | 91 | } |
| MazeTaka | 0:eb20667a5a27 | 92 | void Ec4multi::upA() |
| MazeTaka | 0:eb20667a5a27 | 93 | { |
| MazeTaka | 0:eb20667a5a27 | 94 | pa_=1; |
| MazeTaka | 0:eb20667a5a27 | 95 | if(pb_==1)count_++; |
| MazeTaka | 0:eb20667a5a27 | 96 | else count_--; |
| MazeTaka | 0:eb20667a5a27 | 97 | } |
| MazeTaka | 0:eb20667a5a27 | 98 | void Ec4multi::downA() |
| MazeTaka | 0:eb20667a5a27 | 99 | { |
| MazeTaka | 0:eb20667a5a27 | 100 | pa_=0; |
| MazeTaka | 0:eb20667a5a27 | 101 | if(pb_==1)count_--; |
| MazeTaka | 0:eb20667a5a27 | 102 | else count_++; |
| MazeTaka | 0:eb20667a5a27 | 103 | } |
| MazeTaka | 0:eb20667a5a27 | 104 | void Ec4multi::upB() |
| MazeTaka | 0:eb20667a5a27 | 105 | { |
| MazeTaka | 0:eb20667a5a27 | 106 | pb_=1; |
| MazeTaka | 0:eb20667a5a27 | 107 | if(pa_==1)count_--; |
| MazeTaka | 0:eb20667a5a27 | 108 | else count_++; |
| MazeTaka | 0:eb20667a5a27 | 109 | } |
| MazeTaka | 0:eb20667a5a27 | 110 | void Ec4multi::downB() |
| MazeTaka | 0:eb20667a5a27 | 111 | { |
| MazeTaka | 0:eb20667a5a27 | 112 | pb_=0; |
| MazeTaka | 0:eb20667a5a27 | 113 | if(pa_==1)count_++; |
| MazeTaka | 0:eb20667a5a27 | 114 | else count_--; |
| MazeTaka | 0:eb20667a5a27 | 115 | } |