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