Rui Kato
/
Nucleo_SS2_No2
2号機
Fork of Nucleo_SS2 by
Diff: main.cpp
- Revision:
- 0:7e3b7c017977
- Child:
- 1:aabe6887447c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Nov 07 01:46:41 2017 +0000 @@ -0,0 +1,133 @@ +#include "mbed.h" + +PwmOut mypwm4(D4); +PwmOut mypwm5(D6); +PwmOut mypwm2(D2); +PwmOut mypwm3(D3); + +Ticker flag; + +DigitalOut myled(LED1); + + +#define STATE_A (0) +#define STATE_B (1) +#define STATE_C (2) +#define STATE_D (3) +#define STATE_E (4) + +char mode; +int wait_flag; + +void flg(){ + wait_flag = 1; + switch(mode){ + case STATE_A: + mode = STATE_B; + break; + case STATE_B: + mode = STATE_C; + break; + case STATE_C: + mode = STATE_D; + break; + case STATE_D: + mode = STATE_E; + break; + case STATE_E: + mode = STATE_A; + break; + } + } + +int main() { + +mode = STATE_E; +wait_flag = 0; + +mypwm4.period_ms(100); +mypwm5.period_ms(100); +mypwm2.period_ms(100); +mypwm3.period_ms(100); + +flag.attach(&flg, 2.0); + + + // 状態が切り替わるときは一時停止 + if(wait_flag==1) + { + // フラグの初期化 + wait_flag = 0; + myled = 0; // LED消灯 + // 左モータの制御 + mypwm4.pulsewidth_ms(80); + mypwm5.pulsewidth_ms(80); + // 右モータの制御 + mypwm2.pulsewidth_ms(80); + mypwm3.pulsewidth_ms(80); + // 500ms待機する + wait(800); + } + +while(1){ + +switch (mode) + { + // STATE_A : 前進(左:正転 右:正転) + case STATE_A: + myled = 1; // LED点灯 + // 左モータの制御 + mypwm4.pulsewidth_ms(30); + mypwm5.pulsewidth_ms(0); + // 右モータの制御 + mypwm2.pulsewidth_ms(30); + mypwm3.pulsewidth_ms(0); + break; + + // STATE_B : 右旋回(左:正転 右:逆転) + case STATE_B: + myled = 1; // LED点灯 + // 左モータの制御 + mypwm4.pulsewidth_ms(30); + mypwm5.pulsewidth_ms(0); + // 右モータの制御 + mypwm2.pulsewidth_ms(0); + mypwm3.pulsewidth_ms(30); + break; + + // STATE_C : 左旋回(左:逆転 右:正転) + case STATE_C: + myled = 1; // LED点灯 + // 左モータの制御 + mypwm4.pulsewidth_ms(0); + mypwm5.pulsewidth_ms(30); + // 右モータの制御 + mypwm2.pulsewidth_ms(30); + mypwm3.pulsewidth_ms(0); + break; + + // STATE_D : 後退(左:逆転 右:逆転) + case STATE_D: + myled = 1; // LED点灯 + // 左モータの制御 + mypwm4.pulsewidth_ms(0); + mypwm5.pulsewidth_ms(30); + // 右モータの制御 + mypwm2.pulsewidth_ms(0); + mypwm3.pulsewidth_ms(30); + break; + + // STATE_E : ブレーキ(左:ブレーキ 右:ブレーキ) + case STATE_E: + myled = 0; // LED消灯 + // 左モータの制御 + mypwm4.pulsewidth_ms(60); + mypwm5.pulsewidth_ms(60); + // 右モータの制御 + mypwm2.pulsewidth_ms(60); + mypwm3.pulsewidth_ms(60); + break; + } + } + +}