ライントレース(テスト)
Dependencies: mbed
Fork of linetrace_test by
main.cpp
- Committer:
- kato8
- Date:
- 2017-11-13
- Revision:
- 1:3af3d6834515
- Parent:
- 0:3a6873f917b6
- Child:
- 2:7b84f6d2cf63
File content as of revision 1:3af3d6834515:
#include "mbed.h" DigitalOut myled(LED3); // 確認用LED AnalogIn photoref_L(A1); // フォトリフレクタ左 AnalogIn photoref_M(A2); // フォトリフレクタ中央 AnalogIn photoref_R(A3); // フォトリフレクタ右 PwmOut mypwm4(D4); PwmOut mypwm5(D6); PwmOut mypwm2(D2); PwmOut mypwm3(D3); #define STATE_A (0) // 前進 #define STATE_B (1) // 右旋回 #define STATE_C (2) // 左旋回 #define STATE_D (3) // 後退 #define STATE_E (4) // 左前進 #define STATE_F (5) // 右前進 #define STATE_G (6) // ブレーキ void Motor(char); int main() { char mode = STATE_A; while(1) { if(photoref_M > 0.5) { // ライン中央:白 myled = 1; mode = STATE_E; // 左前進 Motor(mode); } else { // ライン中央:黒 myled = 0; mode = STATE_F; // 右前進 Motor(mode); } } } void Motor(char mode) { switch(mode) { // STATE_A : 前進(左:正転 右:正転) case STATE_A: // 左モータの制御 mypwm4.pulsewidth_ms(8); mypwm5.pulsewidth_ms(0); // 右モータの制御 mypwm2.pulsewidth_ms(8); mypwm3.pulsewidth_ms(0); break; // STATE_B : 右旋回(左:正転 右:逆転) case STATE_B: // 左モータの制御 mypwm4.pulsewidth_ms(5); mypwm5.pulsewidth_ms(0); // 右モータの制御 mypwm2.pulsewidth_ms(0); mypwm3.pulsewidth_ms(5); break; // STATE_C : 左旋回(左:逆転 右:正転) case STATE_C: // 左モータの制御 mypwm4.pulsewidth_ms(0); mypwm5.pulsewidth_ms(5); // 右モータの制御 mypwm2.pulsewidth_ms(5); mypwm3.pulsewidth_ms(0); break; // STATE_D : 後退(左:逆転 右:逆転) case STATE_D: // 左モータの制御 mypwm4.pulsewidth_ms(0); mypwm5.pulsewidth_ms(5); // 右モータの制御 mypwm2.pulsewidth_ms(0); mypwm3.pulsewidth_ms(5); break; // STATE_E : 左前進(左:ブレーキ 右:正転) case STATE_E: // 左モータの制御 mypwm4.pulsewidth_ms(5); mypwm5.pulsewidth_ms(5); // 右モータの制御 mypwm2.pulsewidth_ms(5); mypwm3.pulsewidth_ms(0); break; // STATE_F : 右前進(左:正転 右:ブレーキ) case STATE_F: // 左モータの制御 mypwm4.pulsewidth_ms(5); mypwm5.pulsewidth_ms(0); // 右モータの制御 mypwm2.pulsewidth_ms(5); mypwm3.pulsewidth_ms(5); break; // STATE_G : ブレーキ(左:ブレーキ 右:ブレーキ) case STATE_G: // 左モータの制御 mypwm4.pulsewidth_ms(5); mypwm5.pulsewidth_ms(5); // 右モータの制御 mypwm2.pulsewidth_ms(5); mypwm3.pulsewidth_ms(5); break; } }