広大 目黑 / Mbed 2 deprecated src2019

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
megu29
Date:
Thu Sep 19 14:31:17 2019 +0000
Parent:
1:8a67adccebd9
Commit message:
azsxdc

Changed in this revision

DualShockMod.cpp 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
--- a/DualShockMod.cpp	Wed Sep 18 14:14:01 2019 +0000
+++ b/DualShockMod.cpp	Thu Sep 19 14:31:17 2019 +0000
@@ -52,10 +52,10 @@
                 posX = ((dat[1]<<7) + dat[2]);
             }
             if(dat[0] & 0b00000001){ //Yが負であるビット            
-                posY = (int)((dat[3]<<7) + dat[4])*-1;
+                posY = (int)((dat[3]<<7) + dat[4]);
             }
             else{
-                posY = (dat[3]<<7) + dat[4];
+                posY = (dat[3]<<7) + dat[4]*-1;
             }
         }
         dat[0] = 0;
--- a/main.cpp	Wed Sep 18 14:14:01 2019 +0000
+++ b/main.cpp	Thu Sep 19 14:31:17 2019 +0000
@@ -3,12 +3,14 @@
 #include "moterdrive.h"
 #include "DualShockMod.h"
 
-#define PERIOD 50
+#define PERIOD 40
 
 #define hosei1 1.070    //left front
 #define hosei2 1.000    //right front
-#define hosei3 1.000    //back
+#define hosei3 0.960    //back
 
+#define LIFTPOWER_UP 0.2
+#define LIFTPOWER_DOWN 0.2
 
 DigitalOut  my_led(LED1);
 PwmOut      md1_pwm1(PB_2);
@@ -31,14 +33,18 @@
 DigitalOut  md2_ccw2(PA_10);
 DigitalOut  md2_dis2(PB_5);
 
-DigitalIn   Limit1(PC_9);
-DigitalIn   Limit2(PC_8);
+DigitalIn   Limit1(PC_9);  //back
+DigitalIn   Limit2(PC_8);  //right
 DigitalIn   Limit3(PC_6);
 DigitalIn   Limit4(PC_5);
 
-DigitalIn   photo1(PA_6);
-DigitalIn   photo2(PA_7);
-DigitalIn   photo3(PB_6); 
+DigitalIn   photo1(PA_13);
+DigitalIn   photo2(PA_14);
+DigitalIn   photo3(PA_15); 
+
+DigitalIn button1(USER_BUTTON);
+DigitalOut led1(D14);
+DigitalOut led2(D15);
 
 //serial通信
 Serial pc(SERIAL_TX, SERIAL_RX);
@@ -55,11 +61,14 @@
     
     typedef enum{
         WAIT,
+        INIT1,
+        INIT2,
+        WAIT2,
         HARI1,
         HARI2,
         HARI3,
         HARI4,
-        WAIT2,
+        HARI_END,
         SYM1,
         SYM2,
         SYM3,
@@ -67,7 +76,9 @@
         SYM5,
         SYM6,
         SYM7,
-        END   
+        SYM8,
+        END,
+        DEBUG   
     }SEQENCE;
     SEQENCE seq = WAIT;
 
@@ -75,11 +86,12 @@
         STOP,
         FFAST,
         FSLOW,
+        BFAST,
+        BSLOW,
         RIGHT,
         LEFT,
         RROLL,
         LROLL,
-        BACK,
         UP,
         DOWN 
     }MOVEDIR;
@@ -98,7 +110,7 @@
     md2_pwm1.period_us(100);
     md2_pwm2.period_us(100);
     
-    int pho1, pho2, pho3, lim1, lim2, lim3, lim4 = {0};
+    int pho1, pho2, pho3, lim1, lim2, lim3, lim4, btn1,k = {0};
     
     while(1){
         
@@ -109,7 +121,7 @@
         lim2 = Limit2;
         lim3 = Limit3;
         lim4 = !Limit4;                        
-        
+        btn1 = !button1;
 
         
 //        pc.printf("ENC = %d \n\r", qei.getPulses());
@@ -118,44 +130,90 @@
 //        posX = ;
 //        posY = ;     
 
+        if(move == STOP) led1 = 1;
+            else led1 = 0;          
             
+        if(lim4 == 1) seq = DEBUG;
 
         switch(seq){
             case WAIT:
-                move = FFAST;
+                seq = INIT1;
+             
+             break;
             
-                if(posY <= -1000 ){
-                    move = FSLOW;
-                    if(posY <= -1080)
+            case INIT1:
+              move = DOWN;
+               
+               if(pho1 == 1){
+                    move = STOP;
+                    seq = INIT2;
+                    }
+
+             break;
+             
+             case INIT2:
+              timer.start();
+              move = UP;
+              if(timer.read_ms() > 2500){
+                    move = STOP;
+                    timer.reset();
+                    timer.stop();                    
+                seq = WAIT2;
+             }
+              break;
+             
+            case WAIT2:
+                move = STOP;
+                
+                 if(btn1 == 1){
                     seq = HARI1;
-                    }   
-                     
+                    }
+                 if(lim2 == 1){
+                    seq = SYM1;
+                     }   
                 break;
             
             case HARI1:
-                move = BACK;
-                if(posY <= -800)
-                
+                move = FFAST;
+            
+                if(posY > 1000 ){
+                    move = FSLOW;
+                    if(posY > 1080)
+                    seq = HARI2;
+                    }
               break;
               
-              
             case HARI2:
                 move = DOWN;
                 
+                if(pho1 == 1){
+                    move = STOP;
+                    seq = HARI3;
+                    }    
               break;
               
             case HARI3:
-               move = BACK;                    
+               move = BFAST; 
+               
+               if(posY < 800){ 
+                    seq = HARI4;
+                    timer.reset();
+                }  
              break;
              
             case HARI4:
+               timer.start();
                move = UP;
-               if(0){
-                    seq = WAIT2;}
+               
+               if(timer.read_ms() > 2000){
+                    move = STOP;
+                    timer.reset();
+                    seq = HARI_END;
+               }
                     
              break;
              
-            case WAIT2:
+            case HARI_END:
                move = STOP;
 
              break;
@@ -163,63 +221,86 @@
             case SYM1:
                 move = FFAST;
                 
-
+                if(posY > 750 ){
+                    move = FSLOW;
+                    if(posY > 800)
+                    seq = SYM2;
+                    }
               break;
               
             case SYM2:
                 move = RIGHT;
                 
-                if(0){
+                if(posX > 850){
                     seq = SYM3;
-                  
                     }   
               break;
               
             case SYM3:
-                move = FFAST;
+                move = BSLOW;
                 
-                if(0){
+                if(lim1 == 1){
+                    move = FFAST;
                     seq = SYM4;
-                  
+                    k = posY;
                     }   
               break; 
             
             case SYM4:
-                move = LEFT;
+                move = FFAST;
                 
-                if(0){
+                if( posY - k >360){
                     seq = SYM5;
-                  
-                    }   
+                    }
               break; 
               
             case SYM5:
-                move = LROLL;
+                move = LEFT;
                 
-                if(0){
+                if(posX < 300){
                     seq = SYM6;
-                  
-                    }   
+                    } 
               break;   
               
             case SYM6:
-                move = DOWN;
+                move = LROLL;
                 
-                if(0){
+                timer.start();
+                if(timer.read_ms() > 5000){
+                    move = STOP;
+                    timer.reset();
+                    timer.stop(); 
                     seq = SYM7;
-                  
                     }   
               break; 
               
             case SYM7:
-                move = BACK;
+                 move = DOWN;
                 
-                if(0){
-                    seq = END;
-                  
+                if(pho1 == 1){
+                    move = STOP;
+                    seq = SYM8;
                     }   
               break; 
               
+            case SYM8:
+                move = BFAST;
+                timer.start();
+                if(timer.read_ms() > 3000){
+                    move = STOP;
+                    timer.reset();
+                    timer.stop(); 
+                
+                    seq = END;  
+                    }   
+              break; 
+              
+            case DEBUG:
+                if(lim1 == 1) move = UP;
+                else if (lim2 == 1) move = DOWN;
+                else move = STOP;
+            break;
+              
             }
             
             
@@ -247,37 +328,44 @@
                 moter(4,STOP,0);
              break;
             
-            case BACK:
+            case BFAST:
                 moter(1,ccw,1);
                 moter(2,cw,1);
                 moter(3,STOP,0);
                 moter(4,STOP,0);
              break;
+             
+            case BSLOW:
+                moter(1,ccw,0.5);
+                moter(2,cw,0.5);
+                moter(3,STOP,0);
+                moter(4,STOP,0);
+             break;
             
             case RROLL:
-                moter(1,ccw,0.3);
-                moter(2,ccw,0.3);
+                moter(1,cw,0.3);
+                moter(2,cw,0.3);
                 moter(3,ccw,0.3);
                 moter(4,STOP,0);
              break;
             
             case LROLL:
-                moter(1,cw,0.3);
-                moter(2,cw,0.3);
+                moter(1,ccw,0.3);
+                moter(2,ccw,0.3);
                 moter(3,cw,0.3);
                 moter(4,STOP,0);
              break;
             
             case RIGHT:
-                moter(1,ccw,0.5);
-                moter(2,ccw,0.5);
+                moter(1,cw,0.5);
+                moter(2,cw,0.5);
                 moter(3,cw,1);
                 moter(4,STOP,0);
              break;
             
             case LEFT:
-                moter(1,cw,0.5);
-                moter(2,cw,0.5);
+                moter(1,ccw,0.5);
+                moter(2,ccw,0.5);
                 moter(3,ccw,1);
                 moter(4,STOP,0);
              break;
@@ -286,28 +374,28 @@
                 moter(1,STOP,0);
                 moter(2,STOP,0);
                 moter(3,STOP,0);
-                moter(4,cw,0.1);
+                moter(4,cw,LIFTPOWER_UP);
              break;
             
             case DOWN:
                 moter(1,STOP,0);
                 moter(2,STOP,0);
                 moter(3,STOP,0);
-                moter(4,ccw,0.1);
+                moter(4,ccw,LIFTPOWER_DOWN);
              break;
             
         }
 
-        pc.printf("posX=%d,posY=%d\n\r", posX, posY);
-        pc.printf("PHO = %d%d%d\tLIM = %d%d%d%d\n\r", pho1, pho2, pho3, lim1, lim2, lim3, lim4);
-        pc.printf("seq = %d", seq);
+        pc.printf("posX=%d,posY=%d  ", posX, posY);
+        pc.printf("PHO = %d%d%d\tLIM = %d%d%d%d\t BTN=%d  ", pho1, pho2, pho3, lim1, lim2, lim3, lim4, btn1);
+        pc.printf("seq = %d\n\r", seq);
          }    
 }
 
 
 
 void moter(int num, char dir, float power){
-    
+    int pho1 = !photo1;
     int output;
     if(num == 1){
         if(dir == cw){
@@ -322,7 +410,7 @@
             md1_cw1 = 0;
             md1_ccw1 = 0;
             }
-        output = PERIOD * power * hosei1;
+        output = PERIOD * power * (float)hosei1;
         md1_pwm1.pulsewidth_us(output);
         } 
         if(num == 2){
@@ -338,7 +426,7 @@
             md1_cw2 = 0;
             md1_ccw2 = 0;
             }
-        output = PERIOD * power * hosei2;
+        output = PERIOD * power * (float)hosei2;
         md1_pwm2.pulsewidth_us(output);
         } 
         if(num == 3){
@@ -354,7 +442,7 @@
             md2_cw1 = 0;
             md2_ccw1 = 0;
             }
-        output = PERIOD * power * hosei3;
+        output = PERIOD * power * (float)hosei3;
         md2_pwm1.pulsewidth_us(output);
         }
         if(num == 4){
@@ -364,18 +452,20 @@
             }
             else if(dir == ccw){
             md2_cw2 = 0;
-            md2_ccw2 = 1;
+            
+                if(pho1 == 1){
+                md2_ccw2 = 0;
+                }
+                else{
+                md2_ccw2 = 1;
+                }
             }
             else if(dir == STOP){
             md2_cw2 = 0;
             md2_ccw2 = 0;
             }
-        output = PERIOD * power ;
+        output = 100 * power ;
         md2_pwm2.pulsewidth_us(output);
-        }
-     
-    
-    
-    
+        }    
     }
  
\ No newline at end of file