2号機

Dependencies:   HCSR04 mbed

Fork of Nucleo_SS2 by SS2

Files at this revision

API Documentation at this revision

Comitter:
Morimoto448
Date:
Thu Dec 07 00:37:17 2017 +0000
Parent:
2:f568ec2e6955
Child:
4:04ca6a211b85
Commit message:
add fase2

Changed in this revision

HCSR04.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HCSR04.lib	Thu Dec 07 00:37:17 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/prabhuvd/code/HCSR04/#71da0dbf4400
--- a/main.cpp	Mon Dec 04 05:11:53 2017 +0000
+++ b/main.cpp	Thu Dec 07 00:37:17 2017 +0000
@@ -1,4 +1,5 @@
 #include "mbed.h"
+#include "hcsr04.h"
 
 PwmOut mypwm4(D4);
 PwmOut mypwm6(D6);
@@ -6,10 +7,14 @@
 PwmOut mypwm3(D3);
 
 Ticker flag;
+Ticker timerflag;
 Timer t;
 
 DigitalOut myled(LED1);
 
+HCSR04  usensor(D9,D10); // Trigger(DO), Echo(PWMIN)
+unsigned int dist;
+
 
 #define STATE_A (0)
 #define STATE_B (1)
@@ -18,13 +23,18 @@
 #define STATE_E (4)
 #define STATE_A2 (5)
 
-char mode;
+char mode,fase;
 int wait_flag;
 int timer;
 
-void flg(){
+void tflg(){
         timer = t.read(); 
         }
+/*void flg(){
+        usensor.start();
+        dist=usensor.get_dist_cm();
+        printf("dist:%u\n", dist);
+        }*/
 
 int main() {
     
@@ -37,23 +47,29 @@
 mypwm2.period_ms(100);
 mypwm3.period_ms(100);
     
-flag.attach(&flg, 1.0);
+timerflag.attach(&tflg, 0.1);
+/*flag.attach(&flg, 1.0);*/
+
+      
+while(1){
+    
+usensor.start();
+        wait(0.2); 
+        dist=usensor.get_dist_cm();
+        /*printf("cm: %ld\n",dist); */
 
 
-        
-while(1){
-    
-    switch(timer)
+  /*  switch(timer)
 {
     case 8.0:
         wait_flag = 1;
         mode = STATE_A;
         break;
-    case 13.0:
+    case 12.0:
         wait_flag = 1;
         mode = STATE_B;
         break;
-    case 17.0:
+    case 15.5:
         wait_flag = 1;
         mode = STATE_A2;
         break;
@@ -74,7 +90,51 @@
         mode = STATE_A;
         break; 
         
-}
+}*/
+
+switch (fase)
+        {
+            case 0:
+                if(timer == 5){   
+                    mode = STATE_A;
+                    t.stop();
+                    t.reset();
+                    }
+                if(dist > 45){
+                    fase = 1;
+                    t.start();
+                }
+                break;
+            
+            case 1:
+                if(timer == 0){
+                    wait_flag = 1;
+                    mode = STATE_B;
+                    }else if(timer == 1.0){
+                    wait_flag = 1;
+                    mode = STATE_A;
+                    t.stop();
+                    t.reset();
+                    fase = 2;
+                    t.start();
+                    }
+                break;
+            case 2:
+                if(timer == 6.0){
+                    wait_flag = 1;
+                    mode = STATE_D;
+                    }else if(timer == 16.0){
+                        wait_flag = 1;
+                        mode = STATE_A;
+                        }else if(timer == 26.0){
+                            wait_flag = 1;
+                            mode = STATE_D;
+                            }else if(timer == 36.0){
+                                wait_flag = 1;
+                                mode = STATE_A;}else if(timer == 46.0){
+                                    wait_flag = 1;
+                                    mode = STATE_D;
+        }
 
 // 状態が切り替わるときは一時停止
         if(wait_flag==1)
@@ -91,7 +151,7 @@
             // 500ms待機する
             wait(0.5);
         }
-
+        
 switch (mode)
         {
             // STATE_A : 前進(左:正転 右:正転)
@@ -101,7 +161,7 @@
                 mypwm4.pulsewidth_ms(70);
                 mypwm6.pulsewidth_ms(0);
                 // 右モータの制御
-                mypwm2.pulsewidth_ms(75);
+                mypwm2.pulsewidth_ms(70);
                 mypwm3.pulsewidth_ms(0);
                 break;
                 // STATE_A : 前進(左:正転 右:正転)
@@ -119,11 +179,11 @@
             case STATE_B:
                 myled = 1; // LED点灯
                 // 左モータの制御
-                mypwm4.pulsewidth_ms(50);
+                mypwm4.pulsewidth_ms(100);
                 mypwm6.pulsewidth_ms(0);
                 // 右モータの制御
                 mypwm2.pulsewidth_ms(0);
-                mypwm3.pulsewidth_ms(50);
+                mypwm3.pulsewidth_ms(100);
                 break;
                 
             // STATE_C : 左旋回(左:逆転 右:正転)
@@ -131,9 +191,9 @@
                 myled = 1; // LED点灯
                 // 左モータの制御
                 mypwm4.pulsewidth_ms(0);
-                mypwm6.pulsewidth_ms(50);
+                mypwm6.pulsewidth_ms(100);
                 // 右モータの制御
-                mypwm2.pulsewidth_ms(50);
+                mypwm2.pulsewidth_ms(100);
                 mypwm3.pulsewidth_ms(0);
                 break;
                 
@@ -162,3 +222,4 @@
     }
     
 }
+}