ライントレース(テスト)

Dependencies:   mbed

Fork of linetrace_test by Rui Kato

Committer:
kato8
Date:
Mon Nov 13 07:19:51 2017 +0000
Revision:
1:3af3d6834515
Parent:
0:3a6873f917b6
Child:
2:7b84f6d2cf63
????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kato8 0:3a6873f917b6 1 #include "mbed.h"
kato8 0:3a6873f917b6 2
kato8 0:3a6873f917b6 3 DigitalOut myled(LED3); // 確認用LED
kato8 0:3a6873f917b6 4
kato8 0:3a6873f917b6 5 AnalogIn photoref_L(A1); // フォトリフレクタ左
kato8 0:3a6873f917b6 6 AnalogIn photoref_M(A2); // フォトリフレクタ中央
kato8 0:3a6873f917b6 7 AnalogIn photoref_R(A3); // フォトリフレクタ右
kato8 0:3a6873f917b6 8
kato8 0:3a6873f917b6 9 PwmOut mypwm4(D4);
kato8 0:3a6873f917b6 10 PwmOut mypwm5(D6);
kato8 0:3a6873f917b6 11 PwmOut mypwm2(D2);
kato8 0:3a6873f917b6 12 PwmOut mypwm3(D3);
kato8 0:3a6873f917b6 13
kato8 1:3af3d6834515 14 #define STATE_A (0) // 前進
kato8 1:3af3d6834515 15 #define STATE_B (1) // 右旋回
kato8 1:3af3d6834515 16 #define STATE_C (2) // 左旋回
kato8 1:3af3d6834515 17 #define STATE_D (3) // 後退
kato8 1:3af3d6834515 18 #define STATE_E (4) // 左前進
kato8 1:3af3d6834515 19 #define STATE_F (5) // 右前進
kato8 1:3af3d6834515 20 #define STATE_G (6) // ブレーキ
kato8 0:3a6873f917b6 21
kato8 0:3a6873f917b6 22 void Motor(char);
kato8 0:3a6873f917b6 23
kato8 0:3a6873f917b6 24 int main() {
kato8 0:3a6873f917b6 25 char mode = STATE_A;
kato8 0:3a6873f917b6 26 while(1) {
kato8 0:3a6873f917b6 27 if(photoref_M > 0.5) { // ライン中央:白
kato8 0:3a6873f917b6 28 myled = 1;
kato8 1:3af3d6834515 29 mode = STATE_E; // 左前進
kato8 0:3a6873f917b6 30 Motor(mode);
kato8 0:3a6873f917b6 31 }
kato8 0:3a6873f917b6 32 else { // ライン中央:黒
kato8 0:3a6873f917b6 33 myled = 0;
kato8 1:3af3d6834515 34 mode = STATE_F; // 右前進
kato8 0:3a6873f917b6 35 Motor(mode);
kato8 0:3a6873f917b6 36 }
kato8 0:3a6873f917b6 37 }
kato8 0:3a6873f917b6 38 }
kato8 0:3a6873f917b6 39
kato8 0:3a6873f917b6 40 void Motor(char mode) {
kato8 0:3a6873f917b6 41 switch(mode) {
kato8 0:3a6873f917b6 42 // STATE_A : 前進(左:正転 右:正転)
kato8 0:3a6873f917b6 43 case STATE_A:
kato8 0:3a6873f917b6 44 // 左モータの制御
kato8 0:3a6873f917b6 45 mypwm4.pulsewidth_ms(8);
kato8 0:3a6873f917b6 46 mypwm5.pulsewidth_ms(0);
kato8 0:3a6873f917b6 47 // 右モータの制御
kato8 0:3a6873f917b6 48 mypwm2.pulsewidth_ms(8);
kato8 0:3a6873f917b6 49 mypwm3.pulsewidth_ms(0);
kato8 0:3a6873f917b6 50 break;
kato8 0:3a6873f917b6 51
kato8 0:3a6873f917b6 52 // STATE_B : 右旋回(左:正転 右:逆転)
kato8 0:3a6873f917b6 53 case STATE_B:
kato8 0:3a6873f917b6 54 // 左モータの制御
kato8 0:3a6873f917b6 55 mypwm4.pulsewidth_ms(5);
kato8 0:3a6873f917b6 56 mypwm5.pulsewidth_ms(0);
kato8 0:3a6873f917b6 57 // 右モータの制御
kato8 0:3a6873f917b6 58 mypwm2.pulsewidth_ms(0);
kato8 0:3a6873f917b6 59 mypwm3.pulsewidth_ms(5);
kato8 0:3a6873f917b6 60 break;
kato8 0:3a6873f917b6 61
kato8 1:3af3d6834515 62 // STATE_C : 左旋回(左:逆転 右:正転)
kato8 0:3a6873f917b6 63 case STATE_C:
kato8 0:3a6873f917b6 64 // 左モータの制御
kato8 0:3a6873f917b6 65 mypwm4.pulsewidth_ms(0);
kato8 0:3a6873f917b6 66 mypwm5.pulsewidth_ms(5);
kato8 0:3a6873f917b6 67 // 右モータの制御
kato8 0:3a6873f917b6 68 mypwm2.pulsewidth_ms(5);
kato8 0:3a6873f917b6 69 mypwm3.pulsewidth_ms(0);
kato8 0:3a6873f917b6 70 break;
kato8 0:3a6873f917b6 71
kato8 0:3a6873f917b6 72 // STATE_D : 後退(左:逆転 右:逆転)
kato8 0:3a6873f917b6 73 case STATE_D:
kato8 0:3a6873f917b6 74 // 左モータの制御
kato8 0:3a6873f917b6 75 mypwm4.pulsewidth_ms(0);
kato8 0:3a6873f917b6 76 mypwm5.pulsewidth_ms(5);
kato8 0:3a6873f917b6 77 // 右モータの制御
kato8 0:3a6873f917b6 78 mypwm2.pulsewidth_ms(0);
kato8 0:3a6873f917b6 79 mypwm3.pulsewidth_ms(5);
kato8 0:3a6873f917b6 80 break;
kato8 1:3af3d6834515 81
kato8 1:3af3d6834515 82 // STATE_E : 左前進(左:ブレーキ 右:正転)
kato8 1:3af3d6834515 83 case STATE_E:
kato8 1:3af3d6834515 84 // 左モータの制御
kato8 1:3af3d6834515 85 mypwm4.pulsewidth_ms(5);
kato8 1:3af3d6834515 86 mypwm5.pulsewidth_ms(5);
kato8 1:3af3d6834515 87 // 右モータの制御
kato8 1:3af3d6834515 88 mypwm2.pulsewidth_ms(5);
kato8 1:3af3d6834515 89 mypwm3.pulsewidth_ms(0);
kato8 1:3af3d6834515 90 break;
kato8 1:3af3d6834515 91
kato8 1:3af3d6834515 92 // STATE_F : 右前進(左:正転 右:ブレーキ)
kato8 1:3af3d6834515 93 case STATE_F:
kato8 1:3af3d6834515 94 // 左モータの制御
kato8 1:3af3d6834515 95 mypwm4.pulsewidth_ms(5);
kato8 1:3af3d6834515 96 mypwm5.pulsewidth_ms(0);
kato8 1:3af3d6834515 97 // 右モータの制御
kato8 1:3af3d6834515 98 mypwm2.pulsewidth_ms(5);
kato8 1:3af3d6834515 99 mypwm3.pulsewidth_ms(5);
kato8 1:3af3d6834515 100 break;
kato8 0:3a6873f917b6 101
kato8 1:3af3d6834515 102 // STATE_G : ブレーキ(左:ブレーキ 右:ブレーキ)
kato8 1:3af3d6834515 103 case STATE_G:
kato8 0:3a6873f917b6 104 // 左モータの制御
kato8 0:3a6873f917b6 105 mypwm4.pulsewidth_ms(5);
kato8 0:3a6873f917b6 106 mypwm5.pulsewidth_ms(5);
kato8 0:3a6873f917b6 107 // 右モータの制御
kato8 0:3a6873f917b6 108 mypwm2.pulsewidth_ms(5);
kato8 0:3a6873f917b6 109 mypwm3.pulsewidth_ms(5);
kato8 0:3a6873f917b6 110 break;
kato8 0:3a6873f917b6 111 }
kato8 0:3a6873f917b6 112 }