2号機

Dependencies:   HCSR04 mbed

Fork of Nucleo_SS2_No2 by Rui Kato

main.cpp

Committer:
Morimoto448
Date:
2017-11-07
Revision:
0:7e3b7c017977
Child:
1:aabe6887447c

File content as of revision 0:7e3b7c017977:

#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;
        }
    }
    
}