yuka_tks

Dependencies:   mbed HCSR04

Revision:
1:b2bd1511307e
Parent:
0:b4b94eb28093
Child:
2:93d72af1b94c
--- a/main.cpp	Sun Dec 19 05:53:03 2021 +0000
+++ b/main.cpp	Sun Dec 19 09:10:50 2021 +0000
@@ -6,31 +6,40 @@
 //エンコーダ読み取りによる入力
 //加減速度調整パラメータ実装
 //PID制御による機体角度補正_
-
+//aoki 
+ 
 #include "mbed.h"
 #include "hcsr04.h"
 
+#define ACC_B 1000
+#define DEC_B 700
+#define ACC_C 1000
+#define DEC_C 1000
 
+#define KICK 2000
+
+
+ 
 DigitalOut led1(LED1);
 DigitalOut led2(LED2);
 DigitalOut led3(LED3);
 DigitalOut led4(LED4);
-
+ 
 Timer t;
 double Time = 0;
 #define Standby_Time 10
 Serial pc(USBTX, USBRX);
 char Serialdata;
 BusOut myled(LED1, LED2, LED3, LED4);
-
+ 
 //HCSR04 u1(p13, p14), u2(p11, p12), u3(p23, p24), u4(p25, p26); // Trigger(DO), Echo(PWMIN); LPC1768
 HCSR04 u1(PA_0, PA_1),u2(PA_5, PA_6),u3(PB_0, PA_10); // Trigger(DO), Echo(PWMIN); f303k8
-
+ 
 CANMessage canmsgTx;
 CANMessage canmsgRx;
 //CAN canPort(p30, p29);  //CAN name(PinName rd, PinName td) LPC1768
 CAN canPort(PA_11, PA_12);  //CAN name(PinName rd, PinName td) F303k8
-
+ 
 //プロトタイプ宣言
 //------------------send関数-------------------
 //mode Setting
@@ -57,9 +66,14 @@
 void printCANRX(void);      //CAN受信データをPCに表示
 void CANdataRX(void);       //CAN受信処理
 void SerialRX(void);        //Serial受信処理
+//---------------------------------------------
+void set_ACC(int);
+void set_DEC(int);
+void set_MODE_V(void);
+void set_MODE_T(void);
 
 int nodeall=4;
-
+ 
 int main(){
     //Serial
     pc.attach(SerialRX);
@@ -106,22 +120,7 @@
     #define Kp1  3
     #define Ki1  0
     #define Kd1  0
-    
-    /*
-    //距離調整パラメータ
-    int p2, i2, d2;
-    int error_before2 = 0;
-    int error_now2 = 0;
-    int feedback_val2;
-    int integral2;
-    int pid_sum2;
-    #define DELTA_T2  0.01
-    #define target_val2  50
-    #define Kp2  2.0
-    #define Ki2  3.0
-    #define Kd2  3.0
-    */
-      
+       
     pc.printf("YUKA PROGRAM START\r\n");
     wait(0.1);
     //-------------起動時に必ず送信---------------
@@ -136,7 +135,7 @@
     sendCtrlSD(node2);
     sendCtrlSD(node3);
     sendCtrlSD(node4);
-
+ 
     sendCtrlEN(node1);
     sendCtrlEN(node2);
     sendCtrlEN(node3);
@@ -155,7 +154,7 @@
     sendProDec(2,Dec);
     sendProDec(3,Dec);
     sendProDec(4,Dec);  
-
+ 
     //トルク設定
     int trq = 100;   //torque Setting[mA]
   
@@ -163,776 +162,273 @@
     sendTgtTrq(2,trq);
     sendTgtTrq(3,trq);
     sendTgtTrq(4,trq);
-    
-    
-    //-------------------------------------------   
-        /*
-        sendCtrlHL(node1);
-        sendCtrlHL(node2);
-        sendCtrlHL(node3);
-        sendCtrlHL(node4);
-
-        //-------------送信コマンドを選択--------------
-        if(Serialdata == 'a'){
-            //左移動
-                sendTgtVel(node1,rpm*(-1));
-                sendTgtVel(node2,rpm);
-                sendTgtVel(node3,rpm);
-                sendTgtVel(node4,rpm*(-1));
-                for(int i=1;i<= 4;i++){
-                        sendCtrlEN(i);
-                }
-                
-            Serialdata = 0;
-            fl=1;
-            wait(0.5);
-        }
-        
-        else if(Serialdata == 'd'){
-            //右移動
-                sendTgtVel(node1,rpm);
-                sendTgtVel(node2,rpm*(-1));
-                sendTgtVel(node3,rpm*(-1));
-                sendTgtVel(node4,rpm);
-                for(int i=1;i<= 4;i++){
-                        sendCtrlEN(i);
-                }
-            Serialdata = 0;
-            fl=1;
-            wait(0.5);
-        }
-        
-        else if(Serialdata == 'w'){
-            //前移動
-                sendTgtVel(node1,rpm*(-1));
-                sendTgtVel(node2,rpm*(-1));
-                sendTgtVel(node3,rpm);
-                sendTgtVel(node4,rpm);
-                for(int i=1;i<= 4;i++){
-                        sendCtrlEN(i);
-                }
-            Serialdata = 0;
-            fl=1;
-            wait(0.5);
+             
+    while(1){  
+                      
+        ActPos = 0;
+        Init_Pos = 0;
+        readActPos(1);
+        ActPos=canmsgRx.data[4]+canmsgRx.data[5]*256+canmsgRx.data[6]*65536;
+        if(ActPos > 8388608){
+            ActPos -= 0x1000000;//16進数でのマイナス処理 16^7 = 16,777,216 = 0x1000000
         }
-        
-        else if(Serialdata == 's'){
-            //後移動
-                sendTgtVel(node1,rpm);
-                sendTgtVel(node2,rpm);
-                sendTgtVel(node3,rpm*(-1));
-                sendTgtVel(node4,rpm*(-1));
-                for(int i=1;i<= 4;i++){
-                        sendCtrlEN(i);
-                }
-            Serialdata = 0;
-            fl=1;
-            wait(0.5);
-        }
-        
-        else if(Serialdata == 'e'){
-            //右旋回
-                sendTgtVel(node1,rpm);
-                sendTgtVel(node2,rpm);
-                sendTgtVel(node3,rpm);
-                sendTgtVel(node4,rpm);
-                for(int i=1;i<= 4;i++){
-                        sendCtrlEN(i);
-                }
-            Serialdata = 0;
-            fl=1;
-            wait(0.1);
-        }
-        else if(Serialdata == 'q'){
-            //左旋回
-                sendTgtVel(node1,rpm*(-1));
-                sendTgtVel(node2,rpm*(-1));
-                sendTgtVel(node3,rpm*(-1));
-                sendTgtVel(node4,rpm*(-1));
-                for(int i=1;i<= 4;i++){
-                        sendCtrlEN(i);
-                }
-            Serialdata = 0;
-            fl=1;
-            wait(0.1);
-        }
-        */
-        //------------------------------------------
-        
-          //人の入力待ち
-          /*
-          while(1){
-          readActPos(1);
-          ActPos=canmsgRx.data[4]+canmsgRx.data[5]*256+canmsgRx.data[6]*65536;
-          if(ActPos > 8388608){
-              ActPos -= 0x1000000;
-              printf("check\r\n");
-          } 
-          printf("ActPos = %d\r\n",ActPos);
-          wait(0.1);
-          }               
-          */
-             
-          while(1){  
-                      
-            ActPos = 0;
-            Init_Pos = 0;
-            readActPos(1);
-            ActPos=canmsgRx.data[4]+canmsgRx.data[5]*256+canmsgRx.data[6]*65536;
-            if(ActPos > 8388608){
-              ActPos -= 0x1000000;//16進数でのマイナス処理 16^7 = 16,777,216 = 0x1000000
-            }
-            Init_Pos = ActPos;//起動時の角度を保存
+        Init_Pos = ActPos;//起動時の角度を保存
             t.reset();
             t.start();
-
+ 
             while(1){
                  
-                 Time = t.read();
+                Time = t.read();
                  
-                 readActPos(1);
-                 ActPos=canmsgRx.data[4]+canmsgRx.data[5]*256+canmsgRx.data[6]*65536;
-                 if(ActPos > 8388608){
-                   ActPos -= 0x1000000;//16進数でのマイナス処理 16^7 = 16,777,216 = 0x1000000
+                readActPos(1);
+                ActPos=canmsgRx.data[4]+canmsgRx.data[5]*256+canmsgRx.data[6]*65536;
+                if(ActPos > 8388608){
+                    ActPos -= 0x1000000;//16進数でのマイナス処理 16^7 = 16,777,216 = 0x1000000
                    //printf("check\r\n");
-                 }
-                 printf("dsit1 %d\r\n",dist1);
-                 /*--------------------------*/
-                 //前方向に入力があった時
-                 if(ActPos < Init_Pos - 2000){
+                }
+                printf("dsit1 %d\r\n",dist1);
+                /*--------------------------*/
+                //前方向に入力があった時
+                if(ActPos < Init_Pos - KICK){
                                   
-                 sendProAcc(1,1000);
-                 sendProAcc(2,1000);
-                 sendProAcc(3,1000);
-                 sendProAcc(4,1000);
-           
-                 sendProDec(1,700);
-                 sendProDec(2,700);
-                 sendProDec(3,700);
-                 sendProDec(4,700);  
-    
-                 //速度制御モード送信    
-                 sendOPModeV(1);
-                 sendOPModeV(2);
-                 sendOPModeV(3);
-                 sendOPModeV(4);
+                    set_ACC(ACC_B);
+                    set_DEC(ACC_C);
+
+                    //速度制御モード送信    
+                    set_MODE_V();
                  
-                 while(1){
+                    while(1){
                      
-                 u1.start();
-                 u2.start();           
-                 dist1 = u1.get_dist_cm();
-                 dist2 = u2.get_dist_cm();    
+                        u1.start();
+                        u2.start();           
+                        dist1 = u1.get_dist_cm();
+                        dist2 = u2.get_dist_cm();    
    
-                 //速度を指定
-                 sendTgtVel(1,rpm*(-1));
-                 sendTgtVel(2,rpm*(-1));
-                 sendTgtVel(3,rpm);
-                 sendTgtVel(4,rpm);
-                 //指令値を送信
-                 for(int i=1;i<= 4;i++){
-                     sendCtrlEN(i);
-                 }
+                        //速度を指定
+                        sendTgtVel(1,rpm*(-1));
+                        sendTgtVel(2,rpm*(-1));
+                        sendTgtVel(3,rpm);
+                        sendTgtVel(4,rpm);
+                        //指令値を送信
+                        for(int i=1;i<= 4;i++){
+                            sendCtrlEN(i);
+                        }
                  
-                 if(dist1 < 100 && dist1 >= 70){
-                     break;
-                 }
-                 printf("dsit1 %d\r\n",dist1);
-                 }
+                        if(dist1 < 100 && dist1 >= 70){
+                        break;
+                        }
+                        printf("dsit1 %d\r\n",dist1);
+                    }
                  
-                 //速度を指定
-                 sendTgtVel(1,0);
-                 sendTgtVel(2,0);
-                 sendTgtVel(3,0);
-                 sendTgtVel(4,0);
-                 //指令値を送信
-                 for(int i=1;i<= 4;i++){
-                     sendCtrlEN(i);    
-                 }
-                 //実行時間
-                 printf("stop!!\r\n");
-                 wait(5.0);
+                    //速度を指定
+                    sendTgtVel(1,0);
+                    sendTgtVel(2,0);
+                    sendTgtVel(3,0);
+                    sendTgtVel(4,0);
+                    //指令値を送信
+                    for(int i=1;i<= 4;i++){
+                        sendCtrlEN(i);    
+                    }
+                    //実行時間
+                    printf("stop!!\r\n");
+                    wait(5.0);
+                 
+                    //printf("2\r\n");
+                 
+                    //速度を指定
+                 
+                    while(1){
+                        readActPos(1);
+                        ActPos=canmsgRx.data[4]+canmsgRx.data[5]*256+canmsgRx.data[6]*65536;
+                        if(ActPos > 8388608){
+                            ActPos -= 0x1000000;//16進数でのマイナス処理 16^7 = 16,777,216 = 0x1000000
+                            //printf("check\r\n");
+                        }
                  
-                 //printf("2\r\n");
-                 
-                 //速度を指定
+                        if(ActPos > -10000){
+                            break;
+                        }    
+ 
+                        sendTgtVel(1,rpm);
+                        sendTgtVel(2,rpm);
+                        sendTgtVel(3,rpm*(-1));
+                        sendTgtVel(4,rpm*(-1));
+                        //指令値を送信
+                        for(int i=1;i<= 4;i++){
+                            sendCtrlEN(i);    
+                        }
+                    //printf("3\r\n");
+                    }
+ 
+                    //ブレーキ
+                    sendTgtVel(1,0);
+                    sendTgtVel(2,0);
+                    sendTgtVel(3,0);
+                    sendTgtVel(4,0);
+                    for(int i=1;i<= 4;i++){
+                        sendCtrlEN(i);    
+                    }
                  
-                 while(1){
-                 readActPos(1);
-                 ActPos=canmsgRx.data[4]+canmsgRx.data[5]*256+canmsgRx.data[6]*65536;
-                 if(ActPos > 8388608){
-                   ActPos -= 0x1000000;//16進数でのマイナス処理 16^7 = 16,777,216 = 0x1000000
-                   //printf("check\r\n");
-                 }
+                    wait(0.5);
+                 
+                    set_MODE_T();
                  
-                 if(ActPos > -10000){
-                     break;
-                 }    
+                    dist1 = 0;
+                 
+                    wait(3.0);
+                    break;
+                }
 
-                 sendTgtVel(1,rpm);
-                 sendTgtVel(2,rpm);
-                 sendTgtVel(3,rpm*(-1));
-                 sendTgtVel(4,rpm*(-1));
-                 //指令値を送信
-                 for(int i=1;i<= 4;i++){
-                     sendCtrlEN(i);    
-                 }
-                 //printf("3\r\n");
-                 }
-
-                 //ブレーキ
-                 sendTgtVel(1,0);
-                 sendTgtVel(2,0);
-                 sendTgtVel(3,0);
-                 sendTgtVel(4,0);
-                 for(int i=1;i<= 4;i++){
-                     sendCtrlEN(i);    
-                 }
-                 
-                 wait(0.5);
-                 
-                 sendOPModeT(1);
-                 sendOPModeT(2);
-                 sendOPModeT(3);
-                 sendOPModeT(4);
-                 
-                 dist1 = 0;
-                 
-                 wait(3.0);
-                 break;
-                 }
                  /*--------------------------*/
                  
                  /*--------------------------*/
                  //右方向に入力があった時
-                 if(ActPos > Init_Pos + 2000){
-                 sendProAcc(1,1000);
-                 sendProAcc(2,1000);
-                 sendProAcc(3,1000);
-                 sendProAcc(4,1000);
-           
-                 sendProDec(1,1000);
-                 sendProDec(2,1000);
-                 sendProDec(3,1000);
-                 sendProDec(4,1000);  
+                if(ActPos > Init_Pos + 2000){
+                    set_ACC(ACC_B);
+                    set_DEC(ACC_C);
+                
+                    //速度制御モード送信    
+                    set_MODE_V();
 
-                 //速度制御モード送信    
-                 sendOPModeV(1);
-                 sendOPModeV(2);
-                 sendOPModeV(3);
-                 sendOPModeV(4);
-                 //速度を指定
-                 sendTgtVel(1,rpm);
-                 sendTgtVel(2,rpm*(-1));
-                 sendTgtVel(3,rpm*(-1));
-                 sendTgtVel(4,rpm);
-                 //指令値を送信
-                 for(int i=1;i<= 4;i++){
-                     sendCtrlEN(i);
-                 }
-                 //実行時間
-                 wait(2.0);
+                    //速度を指定
+                    sendTgtVel(1,rpm);
+                    sendTgtVel(2,rpm*(-1));
+                    sendTgtVel(3,rpm*(-1));
+                    sendTgtVel(4,rpm);
+                    //指令値を送信
+                    for(int i=1;i<= 4;i++){
+                        sendCtrlEN(i);
+                    }
+                    //実行時間
+                    wait(2.0);
                  
-                 //速度を指定
-                 sendTgtVel(1,0);
-                 sendTgtVel(2,0);
-                 sendTgtVel(3,0);
-                 sendTgtVel(4,0);
-                 //指令値を送信
-                 for(int i=1;i<= 4;i++){
-                     sendCtrlEN(i);    
-                 }
-                 //実行時間
-                 wait(5.0);
-
+                    //速度を指定
+                    sendTgtVel(1,0);
+                    sendTgtVel(2,0);
+                    sendTgtVel(3,0);
+                    sendTgtVel(4,0);
+                    //指令値を送信
+                    for(int i=1;i<= 4;i++){
+                        sendCtrlEN(i);    
+                    }
+                    //実行時間
+                    wait(5.0);
+ 
                  
-                 //速度を指定
-                 sendTgtVel(1,rpm*(-1));
-                 sendTgtVel(2,rpm);
-                 sendTgtVel(3,rpm);
-                 sendTgtVel(4,rpm*(-1));
-                 //指令値を送信
-                 for(int i=1;i<= 4;i++){
-                     sendCtrlEN(i);    
-                 }
-                 //実行時間
-                 wait(2.0);
-
-                 //ブレーキ
-                 sendTgtVel(1,0);
-                 sendTgtVel(2,0);
-                 sendTgtVel(3,0);
-                 sendTgtVel(4,0);
-                 for(int i=1;i<= 4;i++){
-                     sendCtrlEN(i);    
-                 }
-                 wait(0.5);
+                    //速度を指定
+                    sendTgtVel(1,rpm*(-1));
+                    sendTgtVel(2,rpm);
+                    sendTgtVel(3,rpm);
+                    sendTgtVel(4,rpm*(-1));
+                    //指令値を送信
+                    for(int i=1;i<= 4;i++){
+                        sendCtrlEN(i);    
+                    }
+                    //実行時間
+                    wait(2.0);
+ 
+                    //ブレーキ
+                    sendTgtVel(1,0);
+                    sendTgtVel(2,0);
+                    sendTgtVel(3,0);
+                    sendTgtVel(4,0);
+                    for(int i=1;i<= 4;i++){
+                        sendCtrlEN(i);    
+                    }
+                    wait(0.5);
                  
-                 sendOPModeT(1);
-                 sendOPModeT(2);
-                 sendOPModeT(3);
-                 sendOPModeT(4);
+                    set_MODE_T();
                  
-                 wait(4.0);
-                 break;
-                 }
-                 /*--------------------------*/
-                 
-                 /*--------------------------*/
-                 //一定時間入力がない場合
-                 if(Time > Standby_Time){
-                 sendProAcc(1,5000);
-                 sendProAcc(2,5000);
-                 sendProAcc(3,5000);
-                 sendProAcc(4,5000);
+                    wait(4.0);
+                    break;
+                }
+                //一定時間入力がない場合
+                if(Time > Standby_Time){
+                    sendProAcc(1,5000);
+                    sendProAcc(2,5000);
+                    sendProAcc(3,5000);
+                    sendProAcc(4,5000);
            
-                 sendProDec(1,5000);
-                 sendProDec(2,5000);
-                 sendProDec(3,5000);
-                 sendProDec(4,5000);  
+                    sendProDec(1,5000);
+                    sendProDec(2,5000);
+                    sendProDec(3,5000);
+                    sendProDec(4,5000);  
+        
+                    //速度制御モード送信    
+                    set_MODE_V();
+
+                    //速度を指定
+                    sendTgtVel(1,rpm);
+                    sendTgtVel(2,rpm);
+                    sendTgtVel(3,rpm);
+                    sendTgtVel(4,rpm);
+                    //指令値を送信
+                    for(int i=1;i<= 4;i++){
+                        sendCtrlEN(i);
+                    }
+                    //実行時間
+                     wait(1.0);
+                    
+                    //速度を指定
+                    sendTgtVel(1,rpm*(-1));
+                    sendTgtVel(2,rpm*(-1));
+                    sendTgtVel(3,rpm*(-1));
+                    sendTgtVel(4,rpm*(-1));
+                    //指令値を送信
+                    for(int i=1;i<= 4;i++){
+                        sendCtrlEN(i);    
+                    }
+                    //実行時間
+                    wait(1.3);
     
-                 //速度制御モード送信    
-                 sendOPModeV(1);
-                 sendOPModeV(2);
-                 sendOPModeV(3);
-                 sendOPModeV(4);
-                     
-                 //速度を指定
-                 sendTgtVel(1,rpm);
-                 sendTgtVel(2,rpm);
-                 sendTgtVel(3,rpm);
-                 sendTgtVel(4,rpm);
-                 //指令値を送信
-                 for(int i=1;i<= 4;i++){
-                     sendCtrlEN(i);
-                 }
-                 //実行時間
-                 wait(1.0);
-                 
-                 //速度を指定
-                 sendTgtVel(1,rpm*(-1));
-                 sendTgtVel(2,rpm*(-1));
-                 sendTgtVel(3,rpm*(-1));
-                 sendTgtVel(4,rpm*(-1));
-                 //指令値を送信
-                 for(int i=1;i<= 4;i++){
-                     sendCtrlEN(i);    
-                 }
-                 //実行時間
-                 wait(1.3);
-
-                 //ブレーキ
-                 sendTgtVel(1,0);
-                 sendTgtVel(2,0);
-                 sendTgtVel(3,0);
-                 sendTgtVel(4,0);
-                 for(int i=1;i<= 4;i++){
-                     sendCtrlEN(i);    
-                 }
-
-                 wait(0.5);
-                 
-                 sendOPModeT(1);
-                 sendOPModeT(2);
-                 sendOPModeT(3);
-                 sendOPModeT(4);
-                 
-                 wait(5.0);
-                 break;
-                 }
-                 /*--------------------------*/
-                 
+                    //ブレーキ
+                     sendTgtVel(1,0);
+                     sendTgtVel(2,0);
+                    sendTgtVel(3,0);
+                    sendTgtVel(4,0);
+                    for(int i=1;i<= 4;i++){
+                        sendCtrlEN(i);    
+                    }
+    
+                    wait(0.5);
+                    
+                    set_MODE_T();
+                    
+                    wait(5.0);
+                    break;
+                }         
            }     
                  wait(0.1);   
         }
-             
-        /*
-        //ジグザグ        
-        else if(Serialdata == 'j'){
-          int turn_count = 0;
-          p1 = 0;
-          i1 = 0;
-          d1 = 0;
-          error_before1 = 0;
-          error_now1 = 0;
-          feedback_val1 = 0;
-          integral1 = 0;
-          pid_sum1 = 0;
-          
-          rpm1 = rpm;
-          rpm2 = rpm;
-          rpm3 = rpm;
-          rpm4 = rpm;
-          
-          dist1 = 30;
-          dist2 = 30;
-          dist3 = 30;
-          
-          sendProAcc(1,5000);
-          sendProAcc(2,5000);
-          sendProAcc(3,5000);
-          sendProAcc(4,5000);
-            
-          sendProDec(1,5000);
-          sendProDec(2,5000);
-          sendProDec(3,5000);
-          sendProDec(4,5000);  
-
-          //正面壁に近づく
-          while(!(dist1 <30 && dist1 >5)){
-                printf("phase1\r\n");
-                u1.start();
-                u2.start();           
-                dist1 = u1.get_dist_cm();
-                dist2 = u2.get_dist_cm();
-                pc.printf("%ld %ld %ld ID1_%ld ID2_%ld ID3_%ld ID_4%ld\r\n",dist1,dist2,dist3,rpm1,rpm2,rpm3,rpm4);
-                
-                //壁との角度をPID制御
-                feedback_val1 = (dist1 - dist2);
-                
-                error_before1 = error_now1;
-                error_now1 = feedback_val1 - target_val1;
-                integral1 += (error_now1 + error_before1) / 2.0 * DELTA_T1;
-                
-                p1 = Kp1 * error_now1;
-                i1 = Ki1 * integral1;
-                d1 = Kd1 * (error_now1 - error_before1) / DELTA_T1;
-                
-                pid_sum1 = (p1 + i1 + d1);
-                
-                //モータの回転数を更新
-                rpm1 -= pid_sum1;
-                rpm2 -= pid_sum1;
-                rpm3 += pid_sum1;
-                rpm4 += pid_sum1;   
-                                 
-                sendTgtVel(node1,rpm1);
-                sendTgtVel(node2,rpm2);
-                sendTgtVel(node3,rpm3*(-1));
-                sendTgtVel(node4,rpm4*(-1));
-                for(int i=1;i<= 4;i++){
-                sendCtrlEN(i);
-                }
-                
-                //回転数フィルタ 
-            if(rpm1 >= max_rpm){
-                rpm1 = max_rpm;
-                sendTgtVel(node1,rpm1*(-1));
-                sendCtrlEN(1);
-            }
-            
-            if(rpm2 >= max_rpm){
-                rpm2 = max_rpm;
-                sendTgtVel(node2,rpm2);
-                sendCtrlEN(2);
-            }
-            
-            if(rpm3 >= max_rpm){
-                rpm3 = max_rpm;
-                sendCtrlEN(3);
-            }
-            
-            if(rpm4 >= max_rpm){
-                rpm4 = max_rpm;
-                sendTgtVel(node4,rpm4*(-1));
-                sendCtrlEN(4);
-            }
-            
-            
-            if(rpm1 <= min_rpm){
-                rpm1 = min_rpm;
-                sendTgtVel(node1,rpm1*(-1));
-                sendCtrlEN(1);
-            }
-            
-            if(rpm2 <= min_rpm){
-                rpm2 = min_rpm;
-                sendTgtVel(node2,rpm2);
-                sendCtrlEN(2);
-            }
-            
-            if(rpm3 <= min_rpm){
-                rpm3 = min_rpm;
-                sendTgtVel(node3,rpm3);
-                sendCtrlEN(3);
-            }
-            
-            if(rpm4 <= min_rpm){
-                rpm4 = min_rpm;
-                sendTgtVel(node4,rpm4*(-1));
-                sendCtrlEN(4);
-            }
-            
-            if(Serialdata == 'h'){     
-                sendCtrlHL(node1);
-                sendCtrlHL(node2);
-                sendCtrlHL(node3);
-                sendCtrlHL(node4);    
-             }
-
-
-                wait(0.01);
-           }
-           
-          //u1,u2が一定以上壁から離れると終了
-          while(!(turn_count == 4)){
-                
-                printf("phase2\r\n");
-                
-                dist3 = 30;
-                
-               //右端まで移動
-               //while(dist3 > 20){
-                 while(!(dist3 < 30& dist3 >10)){
-                    printf("phase3\r\n");
-                    u1.start();
-                    u2.start();
-                    u3.start();
-                    
-                    dist1 = u3.get_dist_cm();
-                    dist2 = u3.get_dist_cm();            
-                    dist3 = u3.get_dist_cm();
-                    pc.printf("%ld %ld %ld ID1_%ld ID2_%ld ID3_%ld ID_4%ld\r\n",dist1,dist2,dist3,rpm1,rpm2,rpm3,rpm4); 
-                    
-                    //壁との角度をPID制御
-                    feedback_val1 = (dist1 - dist2);
-                    error_before1 = error_now1;
-                    error_now1 = feedback_val1 - target_val1;
-                    integral1 += (error_now1 + error_before1) / 2.0 * DELTA_T1;
-                
-                    p1 = Kp1 * error_now1;
-                    i1 = Ki1 * integral1;
-                    d1 = Kd1 * (error_now1 - error_before1) / DELTA_T1;
-                
-                    pid_sum1 = (p1 + i1 + d1);     
-                    
-                    //モータの回転数を更新
-                    rpm1 += pid_sum1;
-                    rpm2 -= pid_sum1;
-                    rpm3 -= pid_sum1;
-                    rpm4 += pid_sum1;
-                                                       
-                    //右移動
-                    sendTgtVel(node1,rpm1*(-1));
-                    sendTgtVel(node2,rpm2);
-                    sendTgtVel(node3,rpm3);
-                    sendTgtVel(node4,rpm4*(-1));
-                    for(int i=1;i<= 4;i++){
-                    sendCtrlEN(i);
-                    }
-                    //回転数フィルタ 
-            if(rpm1 >= max_rpm){
-                rpm1 = max_rpm;
-                sendTgtVel(node1,rpm1*(-1));
-                sendCtrlEN(1);
-            }
-            
-            if(rpm2 >= max_rpm){
-                rpm2 = max_rpm;
-                sendTgtVel(node2,rpm2);
-                sendCtrlEN(2);
-            }
-            
-            if(rpm3 >= max_rpm){
-                rpm3 = max_rpm;
-                sendCtrlEN(3);
-            }
-            
-            if(rpm4 >= max_rpm){
-                rpm4 = max_rpm;
-                sendTgtVel(node4,rpm4*(-1));
-                sendCtrlEN(4);
-            }
-            
-            
-            if(rpm1 <= min_rpm){
-                rpm1 = min_rpm;
-                sendTgtVel(node1,rpm1*(-1));
-                sendCtrlEN(1);
-            }
-            
-            if(rpm2 <= min_rpm){
-                rpm2 = min_rpm;
-                sendTgtVel(node2,rpm2);
-                sendCtrlEN(2);
-            }
-            
-            if(rpm3 <= min_rpm){
-                rpm3 = min_rpm;
-                sendTgtVel(node3,rpm3);
-                sendCtrlEN(3);
-            }
-            
-            if(rpm4 <= min_rpm){
-                rpm4 = min_rpm;
-                sendTgtVel(node4,rpm4*(-1));
-                sendCtrlEN(4);
-            }
-            
-            if(Serialdata == 'h'){     
-                sendCtrlHL(node1);
-                sendCtrlHL(node2);
-                sendCtrlHL(node3);
-                sendCtrlHL(node4);       
-             }
-
-
-                    wait(0.01);
-                }
-                
-               //下に少し移動
-
-                    printf("phase4\r\n");
-
-                    sendTgtVel(node1,rpm*(-1));
-                    sendTgtVel(node2,rpm*(-1));
-                    sendTgtVel(node3,rpm);
-                    sendTgtVel(node4,rpm);
-                    
-                    for(int i=1;i<= 4;i++){
-                    sendCtrlEN(i);
-                    }
-                    
-                    turn_count += 1;
-                                  
-                    wait(0.5);
-                
-                
-               //左に移動 
-               while(!(dist3 < 80 && dist3 >60)){
-                    printf("phase5\r\n");
-                    u1.start();
-                    u2.start();
-                    u3.start();             
-                    dist1 = u1.get_dist_cm();
-                    dist2 = u2.get_dist_cm();
-                    dist3 = u3.get_dist_cm();
-                    pc.printf("%ld %ld %ld ID1_%ld ID2_%ld ID3_%ld ID_4%ld\r\n",dist1,dist2,dist3,rpm1,rpm2,rpm3,rpm4); 
-                    
-                    //壁との角度をPID制御
-                    feedback_val1 = (dist1 - dist2);                
-                    error_before1 = error_now1;
-                    error_now1 = feedback_val1 - target_val1;
-                    integral1 += (error_now1 + error_before1) / 2.0 * DELTA_T1;
-                
-                    p1 = Kp1 * error_now1;
-                    i1 = Ki1 * integral1;
-                    d1 = Kd1 * (error_now1 - error_before1) / DELTA_T1;
-                
-                    pid_sum1 = (p1 + i1 + d1);
-                                    
-                    //モータの回転数を更新
-                    rpm1 -= pid_sum1;
-                    rpm2 += pid_sum1;
-                    rpm3 += pid_sum1;
-                    rpm4 -= pid_sum1;  
-                                    
-                    //左移動
-                    sendTgtVel(node1,rpm1);
-                    sendTgtVel(node2,rpm2*(-1));
-                    sendTgtVel(node3,rpm3*(-1));
-                    sendTgtVel(node4,rpm4);
-                    for(int i=1;i<= 4;i++){                 
-                    sendCtrlEN(i);
-                    }
-                    //回転数フィルタ 
-            if(rpm1 >= max_rpm){
-                rpm1 = max_rpm;
-                sendTgtVel(node1,rpm1*(-1));
-                sendCtrlEN(1);
-            }
-            
-            if(rpm2 >= max_rpm){
-                rpm2 = max_rpm;
-                sendTgtVel(node2,rpm2);
-                sendCtrlEN(2);
-            }
-            
-            if(rpm3 >= max_rpm){
-                rpm3 = max_rpm;
-                sendCtrlEN(3);
-            }
-            
-            if(rpm4 >= max_rpm){
-                rpm4 = max_rpm;
-                sendTgtVel(node4,rpm4*(-1));
-                sendCtrlEN(4);
-            }
-            
-            
-            if(rpm1 <= min_rpm){
-                rpm1 = min_rpm;
-                sendTgtVel(node1,rpm1*(-1));
-                sendCtrlEN(1);
-            }
-            
-            if(rpm2 <= min_rpm){
-                rpm2 = min_rpm;
-                sendTgtVel(node2,rpm2);
-                sendCtrlEN(2);
-            }
-            
-            if(rpm3 <= min_rpm){
-                rpm3 = min_rpm;
-                sendTgtVel(node3,rpm3);
-                sendCtrlEN(3);
-            }
-            
-            if(rpm4 <= min_rpm){
-                rpm4 = min_rpm;
-                sendTgtVel(node4,rpm4*(-1));
-                sendCtrlEN(4);
-            }
-
-            if(Serialdata == 'h'){     
-                sendCtrlHL(node1);
-                sendCtrlHL(node2);
-                sendCtrlHL(node3);
-                sendCtrlHL(node4);       
-             }
-
-                    wait(0.01);
-                }
-                
-               //下に少し移動 
-                
-                    printf("phase6\r\n");
-                    
-                    
-                    sendTgtVel(node1,rpm*(-1));
-                    sendTgtVel(node2,rpm*(-1));
-                    sendTgtVel(node3,rpm);
-                    sendTgtVel(node4,rpm);
-                    for(int i=1;i<= 4;i++){
-                    sendCtrlEN(i);
-                    }
-                    
-                    turn_count += 1;
-                    
-                    wait(0.5);
-               
-          }
-               
-                
-            if(Serialdata == 'h'){     
-                sendCtrlHL(node1);
-                sendCtrlHL(node2);
-                sendCtrlHL(node3);
-                sendCtrlHL(node4);  
-                break;     
-             }  
-             
-            wait(0.1);
-        }      
-        
-        }
-        */
-        //-------------------------------------------
-        
+}
+ 
+void set_ACC(int setACC_val){
+    sendProAcc(1,setACC_val);
+    sendProAcc(2,setACC_val);
+    sendProAcc(3,setACC_val);
+    sendProAcc(4,setACC_val);
 }
 
+void set_DEC(int setDEC_val){
+    sendProDec(1,setDEC_val);
+    sendProDec(2,setDEC_val);
+    sendProDec(3,setDEC_val);
+    sendProDec(4,setDEC_val); 
+}
 
+void set_MODE_V(){
+    sendOPModeV(1);
+    sendOPModeV(2);
+    sendOPModeV(3);
+    sendOPModeV(4);
+}
 
+void set_MODE_T(){
+    sendOPModeT(1);
+    sendOPModeT(2);
+    sendOPModeT(3);
+    sendOPModeT(4);
+}
 
 //0x2F-6060-00-fd-//-//-//
 void sendOPModeT(int nodeID){
@@ -952,8 +448,8 @@
     canPort.write(canmsgTx);//CANでデータ送信
     wait_ms(1);
 }
-
-
+ 
+ 
 //0x2F-6060-00-03-//-//-//
 void sendOPModeV(int nodeID){
     canmsgTx.id = 0x600+nodeID;
@@ -972,7 +468,7 @@
     canPort.write(canmsgTx);//CANでデータ送信
     wait_ms(1);
 }
-
+ 
 //0x2B-6040-00-0000-//-//
 void sendCtrlRS(int nodeID){
     canmsgTx.id = 0x600+nodeID;
@@ -991,8 +487,8 @@
     canPort.write(canmsgTx);//CANでデータ送信
     wait_ms(1);
 }
-
-
+ 
+ 
 //0x2B-6040-00-0006-//-//
 void sendCtrlSD(int nodeID){
     canmsgTx.id = 0x600+nodeID;
@@ -1011,7 +507,7 @@
     canPort.write(canmsgTx);//CANでデータ送信
     wait_ms(1);
 }
-
+ 
 //0x2B-6040-00-000F-//-//
 void sendCtrlEN(int nodeID){
     canmsgTx.id = 0x600+nodeID;
@@ -1030,7 +526,7 @@
     canPort.write(canmsgTx);//CANでデータ送信
     wait_ms(1);
 }
-
+ 
 //0x2B-6040-00-000B-//-//
 void sendCtrlQS(int nodeID){
     canmsgTx.id = 0x600+nodeID;
@@ -1049,7 +545,7 @@
     canPort.write(canmsgTx);//CANでデータ送信
     wait_ms(1);
 }
-
+ 
 //0x2B-6040-00-010F-//-//
 void sendCtrlHL(int nodeID){
     canmsgTx.id = 0x600+nodeID;
@@ -1068,7 +564,7 @@
     canPort.write(canmsgTx);//CANでデータ送信
     wait_ms(1);
 }
-
+ 
 //0x2B-60FF-00-[user data(4Byte)]
 void sendTgtTrq(int nodeID,int trq){
     //pc.printf("%dmA0x%08x\r\n",trq,trq);  //回転数送信データの表示
@@ -1097,10 +593,10 @@
     //sendCtrlEN(nodeID);
     //wait(0.5);
 }
-
-
-
-
+ 
+ 
+ 
+ 
 //0x2B-60FF-00-[user data(4Byte)]
 void sendTgtVel(int nodeID,int rpm){
     //pc.printf("%drpm|0x%08x\r\n",rpm,rpm);  //回転数送信データの表示
@@ -1126,7 +622,7 @@
     wait_ms(1);
     
 }
-
+ 
 void readActVel(int nodeID){
     //値が欲しいobjectのアドレスを送る
     canmsgTx.id = 0x600+nodeID;
@@ -1138,7 +634,7 @@
     canPort.write(canmsgTx);
     wait_ms(1);
 }
-
+ 
 void readActPos(int nodeID){
     //値が欲しいobjectのアドレスを送る
     canmsgTx.id = 0x600+nodeID;
@@ -1150,7 +646,7 @@
     canPort.write(canmsgTx);
     wait_ms(1);
 }
-
+ 
 //加速度指定
 void sendProAcc(int nodeID,int rpm){
     if(rpm < 0){
@@ -1176,7 +672,7 @@
     sendCtrlEN(nodeID);
     wait(0.01);
 }
-
+ 
 //減速度指定
 void sendProDec(int nodeID,int rpm){
     if(rpm < 0){
@@ -1202,8 +698,8 @@
     sendCtrlEN(nodeID);
     wait(0.01);
 }
-
-
+ 
+ 
 //送信データの表示
 void printCANTX(void){
   //0x canID|Byte0|Byte1|Byte2|Byte3|Byte4|Byte5|Byte6|Byte7|
@@ -1213,9 +709,9 @@
     }
     //pc.printf("\r\n");
 }
-
+ 
 //受信データの表示
-
+ 
 void printCANRX(void){
   //0x canID|Byte0|Byte1|Byte2|Byte3|Byte4|Byte5|Byte6|Byte7|
     //pc.printf("0x%3x|",canmsgRx.id);
@@ -1224,13 +720,15 @@
     }
     pc.printf("\r\n");
 }
-
+ 
 void CANdataRX(void){
     canPort.read(canmsgRx);
     printCANRX();
 }
-
+ 
 void SerialRX(void){
     Serialdata = pc.getc();
     //pc.printf("%c\r\n",Serialdata);
 }
+ 
+            
\ No newline at end of file