LCD表示系の整理。現状の問題としては、配列への左右移動距離の記憶ができていない様子。2走目で常にHIGH_SPEEDとなってしまうので、エンコーダパルス関係の蓄積がうまくできているか?左右同じ情報が演算されていないか?といった部分を疑ってデバッグする必要がある。
Dependencies: mbed AQM0802 CRotaryEncoder TB6612FNG
main.cpp@3:e455433c8cae, 2019-08-26 (annotated)
- Committer:
- yusaku0125
- Date:
- Mon Aug 26 06:31:19 2019 +0000
- Revision:
- 3:e455433c8cae
- Parent:
- 2:a28ca7c25ed1
- Child:
- 4:ac9e6772ddb3
test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yusaku0125 | 0:df99e50ed3fd | 1 | //エンコーダの動作確認。 |
yusaku0125 | 3:e455433c8cae | 2 | //左右モータの回転速度の計測プログラム |
yusaku0125 | 3:e455433c8cae | 3 | #include "mbed.h" |
yusaku0125 | 3:e455433c8cae | 4 | #include "CRotaryEncoder.h" |
yusaku0125 | 0:df99e50ed3fd | 5 | |
yusaku0125 | 3:e455433c8cae | 6 | #define PULSE_TO_UM 30 //エンコーダ1パルス当たりのタイヤ移動距離[um] |
yusaku0125 | 3:e455433c8cae | 7 | //実測で値を調整する。 |
yusaku0125 | 3:e455433c8cae | 8 | #define INTERRUPT_TIME 10000 //割りこみ周期[us] |
yusaku0125 | 3:e455433c8cae | 9 | |
yusaku0125 | 3:e455433c8cae | 10 | Serial PC(USBTX,USBRX); |
yusaku0125 | 3:e455433c8cae | 11 | CRotaryEncoder encoder_a(D1,D0); //モータAのエンコーダ |
yusaku0125 | 3:e455433c8cae | 12 | CRotaryEncoder encoder_b(D11,D12); //モータBのエンコーダ |
yusaku0125 | 3:e455433c8cae | 13 | Ticker timer; //タイマ割込み用 |
yusaku0125 | 3:e455433c8cae | 14 | int enc_count_a=0,enc_count_b=0; //エンコーダパルス数を格納 |
yusaku0125 | 3:e455433c8cae | 15 | int distance_a=0,distance_b=0; //タイヤ移動距離を格納[mm] |
yusaku0125 | 3:e455433c8cae | 16 | int speed_a=0, speed_b=0; |
yusaku0125 | 3:e455433c8cae | 17 | |
yusaku0125 | 3:e455433c8cae | 18 | void timer_interrupt(){ |
yusaku0125 | 3:e455433c8cae | 19 | enc_count_a=encoder_a.Get(); //エンコーダパルス数を取得 |
yusaku0125 | 3:e455433c8cae | 20 | enc_count_b=-encoder_b.Get(); |
yusaku0125 | 3:e455433c8cae | 21 | distance_a=(enc_count_a*PULSE_TO_UM); //移動距離をmm単位で格納 |
yusaku0125 | 3:e455433c8cae | 22 | distance_b=(enc_count_b*PULSE_TO_UM); |
yusaku0125 | 3:e455433c8cae | 23 | speed_a=(distance_a*1000)/INTERRUPT_TIME;//走行速度演算[mm/s] |
yusaku0125 | 3:e455433c8cae | 24 | speed_b=(distance_b*1000)/INTERRUPT_TIME; |
yusaku0125 | 3:e455433c8cae | 25 | distance_a=0; |
yusaku0125 | 3:e455433c8cae | 26 | distance_b=0; |
yusaku0125 | 3:e455433c8cae | 27 | encoder_a.Set(0); |
yusaku0125 | 3:e455433c8cae | 28 | encoder_b.Set(0); |
yusaku0125 | 3:e455433c8cae | 29 | } |
yusaku0125 | 3:e455433c8cae | 30 | |
yusaku0125 | 3:e455433c8cae | 31 | int main() { |
yusaku0125 | 3:e455433c8cae | 32 | timer.attach_us(&timer_interrupt,INTERRUPT_TIME);//タイマ割り込みスタート |
yusaku0125 | 3:e455433c8cae | 33 | while(1){ |
yusaku0125 | 3:e455433c8cae | 34 | wait(1); |
yusaku0125 | 3:e455433c8cae | 35 | PC.printf("spd_a:%d[mm/sec] spd_b:%d[mm/sec]\r\n",speed_a,speed_b);//表示 |
yusaku0125 | 0:df99e50ed3fd | 36 | } |
yusaku0125 | 3:e455433c8cae | 37 | } |