2号機

Dependencies:   HCSR04 mbed

Fork of Nucleo_SS2_No2 by Rui Kato

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