v2019

Dependencies:   CRAC-Strat_2019 SerialHalfDuplex SDFileSystem DISCO-F469NI_portrait liaison_Bluetooth ident_crac

Dependents:   Codeprincipal_2019 CRAC-Strat_2019

Revision:
18:cc5fec34ed9c
Parent:
16:7321fb3bb396
Child:
19:b4b91258c275
--- a/Robots/Strategie_big.cpp	Fri May 19 17:14:07 2017 +0000
+++ b/Robots/Strategie_big.cpp	Mon May 22 15:01:49 2017 +0000
@@ -10,9 +10,16 @@
 /* DESCRIPTION  : Permet de faire la funny action en fin de partie                      */
 /****************************************************************************************/
 void doFunnyAction(void) {
-   /* AX12_setGoal(AX12_ID_FUNNY_ACTION, AX12_ANGLE_FUNNY_ACTION_OPEN,AX12_SPEED_FUNNY_ACTION);
-    AX12_processChange();*/
-    
+    //envoie de la funny action
+    // 0x007, 01, 01
+        CANMessage msgTx=CANMessage();
+        msgTx.id=GLOBAL_FUNNY_ACTION;
+        msgTx.format=CANStandard;
+        msgTx.type=CANData;
+        msgTx.len=2;
+        msgTx.data[0]=0x01;
+        msgTx.data[1]=0x01;
+        can1.write(msgTx);
 }
 
 /****************************************************************************************/
@@ -21,171 +28,485 @@
 /****************************************************************************************/
 unsigned char doAction(unsigned char id, unsigned short speed, short angle) {
     CANMessage msgTx=CANMessage();
+    int localData = 0, localData2;
     switch(id) {
+        case 100: // position initiale
+            msgTx.id=SERVO_AX12_ACTION;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            
+            if (InversStrat){ // si on est inversé, on echange les bras
+                    if (speed == BRAS_AVANT) speed = BRAS_ARRIERE;
+                    else speed = BRAS_AVANT;
+                }
+            
+            msgTx.data[0]=1;
+            msgTx.data[1]=speed;
+            can1.write(msgTx);
+        break;
         
-        case 100://preparation prise
+        case 101:  /// preparation prise
+            msgTx.id=SERVO_AX12_ACTION;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            
+            if (InversStrat){ // si on est inversé, on echange les bras
+                    if (speed == BRAS_AVANT) speed = BRAS_ARRIERE;
+                    else speed = BRAS_AVANT;
+                }
+            
+            msgTx.data[0]=2;
+            msgTx.data[1]=speed;
+            can1.write(msgTx);
+        break;
+        
+        case 102: // stockage haut
             msgTx.id=SERVO_AX12_ACTION;
             msgTx.format=CANStandard;
             msgTx.type=CANData;
             msgTx.len=2;
-        
-            // action et le cote selectionné
-            msgTx.data[0]=1;
+            
             if (InversStrat){ // si on est inversé, on echange les bras
-                    if (speed == BRAS_GAUCHE) speed = BRAS_DROIT;
-                    else speed = BRAS_GAUCHE;
+                    if (speed == BRAS_AVANT) speed = BRAS_ARRIERE;
+                    else speed = BRAS_AVANT;
                 }
+            
+            msgTx.data[0]=3;
             msgTx.data[1]=speed;
             can1.write(msgTx);
         break;
-        case 101://stockage haut
+        
+        case 103: // stockage bas
+            msgTx.id=SERVO_AX12_ACTION;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            
+            if (InversStrat){ // si on est inversé, on echange les bras
+                    if (speed == BRAS_AVANT) speed = BRAS_ARRIERE;
+                    else speed = BRAS_AVANT;
+                }
+            
+            msgTx.data[0]=4;
+            msgTx.data[1]=speed;
+            can1.write(msgTx);
+        break;
+        
+        case 104: // pousser module
+            msgTx.id=SERVO_AX12_ACTION;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            
+            if (InversStrat){ // si on est inversé, on echange les bras
+                    if (speed == BRAS_AVANT) speed = BRAS_ARRIERE;
+                    else speed = BRAS_AVANT;
+                }
+            
+            msgTx.data[0]=7;
+            msgTx.data[1]=speed;
+            can1.write(msgTx);
+        break;
+        
+        case 105: // preparation prise
             msgTx.id=SERVO_AX12_ACTION;
             msgTx.format=CANStandard;
             msgTx.type=CANData;
             msgTx.len=2;
-        
-            // action et le cote selectionné
-            msgTx.data[0]=2;
+            
+            if (InversStrat){ // si on est inversé, on echange les bras
+                    if (speed == BRAS_AVANT) speed = BRAS_ARRIERE;
+                    else speed = BRAS_AVANT;
+                }
+            
+            msgTx.data[0]=6;
             msgTx.data[1]=speed;
-        
             can1.write(msgTx);
         break;
         
-        case 102://stockage bas
+        case 106: //deposer module
+            msgTx.id=SERVO_AX12_ACTION;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            
+            if (InversStrat){ // si on est inversé, on echange les bras
+                    if (speed == BRAS_AVANT) speed = BRAS_ARRIERE;
+                    else speed = BRAS_AVANT;
+                }
+            
+            msgTx.data[0]=5;
+            msgTx.data[1]=speed;
+            can1.write(msgTx);
+        break;
+        
+        case 110: // repos bras avant
+            msgTx.id=SERVO_AX12_ACTION;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            speed = BRAS_AVANT; 
+            if (InversStrat){ // si on est inversé, on echange les bras
+                    if (speed == BRAS_AVANT) speed = BRAS_ARRIERE;
+                    else speed = BRAS_AVANT;
+            }
+            if (speed == BRAS_AVANT)localData = 0x10;
+            else localData = 0x24;
+            
+            msgTx.data[0]=localData;
+            msgTx.data[1]=speed;
+            can1.write(msgTx);
+        break;
+        
+        case 111: // init bras module
             msgTx.id=SERVO_AX12_ACTION;
             msgTx.format=CANStandard;
             msgTx.type=CANData;
             msgTx.len=2;
-        
-            // action et le cote selectionné
-            msgTx.data[0]=3;
+            speed = BRAS_AVANT;
+            if (InversStrat){ // si on est inversé, on echange les bras
+                    if (speed == BRAS_AVANT) speed = BRAS_ARRIERE;
+                    else speed = BRAS_AVANT;
+            }
+            if (speed == BRAS_AVANT)localData = 0x0A;
+            else localData = 0x1E;
+            
+            msgTx.data[0]=localData;
             msgTx.data[1]=speed;
-        
             can1.write(msgTx);
         break;
-        case 103://deposer
+        
+        case 112: // bouger module avant la gouttière
             msgTx.id=SERVO_AX12_ACTION;
             msgTx.format=CANStandard;
             msgTx.type=CANData;
             msgTx.len=2;
-        
-            // action et le cote selectionné
-            msgTx.data[0]=4;
+            speed = BRAS_AVANT;
+            if (InversStrat){ // si on est inversé, on echange les bras
+                    if (speed == BRAS_AVANT) speed = BRAS_ARRIERE;
+                    else speed = BRAS_AVANT;
+            }
+            if (speed == BRAS_AVANT)localData = 0x0B;
+            else localData = 0x1F;
+            
+            msgTx.data[0]=localData;
             msgTx.data[1]=speed;
-        
             can1.write(msgTx);
         break;
         
-        case 104://preparation depot bas
+        case 113: // deposer module
             msgTx.id=SERVO_AX12_ACTION;
             msgTx.format=CANStandard;
             msgTx.type=CANData;
             msgTx.len=2;
-        
-            // action et le cote selectionné
-            msgTx.data[0]=5;
+            localData2 = BRAS_AVANT;
+            
+            if (InversStrat){ // si on est inversé, on echange les bras
+                if (localData2 == BRAS_AVANT) localData2 = BRAS_ARRIERE;
+                else localData2 = BRAS_AVANT;
+            }
+            
+            if(localData2 == BRAS_AVANT){
+                if(speed == INV){
+                        localData = 0x0E;
+                    }else{
+                        localData = 0x0C;
+                    }
+            }else{
+                if(speed == INV){
+                        localData = 0x22;
+                    }else{
+                        localData = 0x20;
+                    }
+            }
+            
+            msgTx.data[0]=localData;
             msgTx.data[1]=speed;
-        
             can1.write(msgTx);
         break;
-        case 105://preparation depot haut
+        
+        case 114: // repositionner bras avant
             msgTx.id=SERVO_AX12_ACTION;
             msgTx.format=CANStandard;
             msgTx.type=CANData;
             msgTx.len=2;
+            speed = BRAS_AVANT;
+            if (InversStrat){ // si on est inversé, on echange les bras
+                if (speed == BRAS_AVANT) speed = BRAS_ARRIERE;
+                else speed = BRAS_AVANT;
+            }
+            if (speed == BRAS_AVANT)localData = 0x0F;
+            else localData = 0x23; 
+            
+            msgTx.data[0]=localData;
+            msgTx.data[1]=speed;
+            can1.write(msgTx);
+        break;
         
-            // action et le cote selectionné
-            msgTx.data[0]=6;
-            msgTx.data[1]=speed;
+        case 115: // pompe avant ON
+            msgTx.id=0x400;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            localData = BRAS_AVANT;
+            if (InversStrat){ // si on est inversé, on echange les bras
+                if (localData == BRAS_AVANT) localData = BRAS_ARRIERE;
+                else localData = BRAS_AVANT;
+            } 
+            
+            msgTx.data[0]=1;
+            msgTx.data[1]=localData;
+            
+            can1.write(msgTx);
+            wait_ms(1);
+            can1.write(msgTx);
+        break;
         
+        case 116: // pompe avant OFF
+            msgTx.id=0x400;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            localData = BRAS_AVANT;
+            if (InversStrat){ // si on est inversé, on echange les bras
+                if (localData == BRAS_AVANT) localData = BRAS_ARRIERE;
+                else localData = BRAS_AVANT;
+            } 
+            
+            msgTx.data[0]=0;
+            msgTx.data[1]=localData;
+            
+            can1.write(msgTx);
+            wait_ms(1);
             can1.write(msgTx);
         break;
-        case 106://pousser module
+        
+        case 120: // repos bras arrière
+            msgTx.id=SERVO_AX12_ACTION;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            speed = BRAS_ARRIERE;
+            if (InversStrat){ // si on est inversé, on echange les bras
+                if (speed == BRAS_AVANT) speed = BRAS_ARRIERE;
+                else speed = BRAS_AVANT;
+            }
+            if (speed == BRAS_AVANT)localData = 0x10;
+            else localData = 0x24; 
+            
+            msgTx.data[0]=localData;
+            msgTx.data[1]=speed;
+            can1.write(msgTx);
+        break;
+        
+        case 121: // position d'init avant de prendre un module bras arriere
+            msgTx.id=SERVO_AX12_ACTION;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            speed = BRAS_ARRIERE;
+            if (InversStrat){ // si on est inversé, on echange les bras
+                if (speed == BRAS_AVANT) speed = BRAS_ARRIERE;
+                else speed = BRAS_AVANT;
+            }
+            if (speed == BRAS_AVANT)localData = 0xA0;
+            else localData = 0x1E; 
+            
+            msgTx.data[0]=localData;
+            msgTx.data[1]=speed;
+            can1.write(msgTx);
+        break;
+        
+        case 122: // bouger le bras arriere avant la gouttiere
+            msgTx.id=SERVO_AX12_ACTION;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            speed = BRAS_ARRIERE;
+            if (InversStrat){ // si on est inversé, on echange les bras
+                if (speed == BRAS_AVANT) speed = BRAS_ARRIERE;
+                else speed = BRAS_AVANT;
+            }
+            if (speed == BRAS_AVANT)localData = 0x0B;
+            else localData = 0x1F; 
+            
+            msgTx.data[0]=localData;
+            msgTx.data[1]=speed;
+            can1.write(msgTx);
+        break;
+        
+        case 123: // deposer module
             msgTx.id=SERVO_AX12_ACTION;
             msgTx.format=CANStandard;
             msgTx.type=CANData;
             msgTx.len=2;
-        
-            // action et le cote selectionné
-            msgTx.data[0]=7;
+            localData2 = BRAS_ARRIERE;
+            
+            if (InversStrat){ // si on est inversé, on echange les bras
+                if (localData2 == BRAS_AVANT) localData2 = BRAS_ARRIERE;
+                else localData2 = BRAS_AVANT;
+            }
+            
+            if(localData2 == BRAS_AVANT){
+                if(speed == INV){
+                        localData = 0x0E;
+                    }else{
+                        localData = 0x0C;
+                    }
+            }else{
+                if(speed == INV){
+                        localData = 0x22;
+                    }else{
+                        localData = 0x20;
+                    }
+            }
+            
+            msgTx.data[0]=localData;
             msgTx.data[1]=speed;
-        
             can1.write(msgTx);
         break;
         
-        case 110://Ouvrir la pince arrière haute
-           msgTx.id=SERVO_AX12_ACTION;
-            msgTx.format=CANStandard;
-            msgTx.type=CANData;
-            msgTx.len=2;
-        
-            // action et le cote selectionné
-            msgTx.data[0]=10;
-            msgTx.data[1]=speed;
-        
-            can1.write(msgTx);
-        break;
-        case 111://Fermer la pince arrière haute
-            msgTx.id=SERVO_AX12_ACTION;
-            msgTx.format=CANStandard;
-            msgTx.type=CANData;
-            msgTx.len=3;
-        
-            // action et le cote selectionné
-            msgTx.data[0]=11;
-            msgTx.data[1]=speed;
-            msgTx.data[2]=angle;
-        
-            can1.write(msgTx);
-        break;
-        
-        case 112://Ouvrir la pince arrière basse
+        case 124: // remettre le bras arriere en posiion initiale
             msgTx.id=SERVO_AX12_ACTION;
             msgTx.format=CANStandard;
             msgTx.type=CANData;
             msgTx.len=2;
+            speed = BRAS_ARRIERE;
+            if (InversStrat){ // si on est inversé, on echange les bras
+                if (speed == BRAS_AVANT) speed = BRAS_ARRIERE;
+                else speed = BRAS_AVANT;
+            }
+            if (speed == BRAS_AVANT)localData = 0x0F;
+            else localData = 0x23; 
+            
+            msgTx.data[0]=localData;
+            msgTx.data[1]=speed;
+            can1.write(msgTx);
+        break;
         
-            // action et le cote selectionné
-            msgTx.data[0]=12;
-            msgTx.data[1]=speed;
+        case 125: // pompe pwm arriere ON
+            msgTx.id=0x400;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            localData = BRAS_ARRIERE;
+            if (InversStrat){ // si on est inversé, on echange les bras
+                if (localData == BRAS_AVANT) localData = BRAS_ARRIERE;
+                else localData = BRAS_AVANT;
+            } 
+            
+            msgTx.data[0]=1;
+            msgTx.data[1]=localData;
+            
+            can1.write(msgTx);
+            wait_ms(1);
+            can1.write(msgTx);
+        break;
+        
+        case 126: // pompe arriere pwm OFF
+            msgTx.id=0x400;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            localData = BRAS_ARRIERE;
+            if (InversStrat){ // si on est inversé, on echange les bras
+                if (localData == BRAS_AVANT) localData = BRAS_ARRIERE;
+                else localData = BRAS_AVANT;
+            } 
+            
+            msgTx.data[0]=0;
+            msgTx.data[1]=localData;
+            
+            can1.write(msgTx);
+            wait_ms(1);
+            can1.write(msgTx);
+        break;
+        
+        case 130: // baiser bras turbine
+            msgTx.id=SERVO_AX12_ACTION;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            msgTx.data[0]=0x14;
+            msgTx.data[1]=BRAS_AVANT;
+            can1.write(msgTx);
+        break;
         
+        case 131: // lever bras turbine
+            msgTx.id=SERVO_AX12_ACTION;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            msgTx.data[0]=0x15;
+            msgTx.data[1]=BRAS_AVANT;
+            can1.write(msgTx);
+        break;
+        
+        case 132: // allumer turbine
+            msgTx.id=0x403;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            msgTx.data[0]=1;
+            msgTx.data[1]=BRAS_AVANT;
+            can1.write(msgTx);
+        break;
+        
+        case 133: // stop turbine
+            msgTx.id=0x403;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            msgTx.data[0]=0;
+            msgTx.data[1]=BRAS_AVANT;
+            can1.write(msgTx);
+        break;
+        
+        case 140:// lanceur ON
+            msgTx.id=0x402;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            
+            msgTx.data[0]=1;
+            msgTx.data[1]=0x02;
+            can1.write(msgTx);
+        break;
+        
+        case 141: // lanceur OFF
+            msgTx.id=0x402;
+            msgTx.format=CANStandard;
+            msgTx.type=CANData;
+            msgTx.len=2;
+            
+            msgTx.data[0]=0;
+            msgTx.data[1]=0x02;
             can1.write(msgTx);
         break;
 
-        case 120://Activer les pompes
-            /*AX12_setGoal(AX12_ID_VENTOUSE, AX12_ANGLE_VENTOUSE_UP,AX12_SPEED_VENTOUSE);
-            AX12_processChange();*/
-        
-            
-            msgTx.id=POMPE_PWM;
+        case 150:
+            msgTx.id=0x404;
             msgTx.format=CANStandard;
             msgTx.type=CANData;
-            msgTx.len=6;
-        
-            // x sur 2 octets
-            msgTx.data[0]=(unsigned char)POMPES_PWM;
-            msgTx.data[1]=(unsigned char)POMPES_PWM;
-            msgTx.data[2]=(unsigned char)POMPES_PWM;
-            msgTx.data[3]=(unsigned char)POMPES_PWM;
-            msgTx.data[4]=(unsigned char)POMPES_PWM;
-            msgTx.data[5]=(unsigned char)POMPES_PWM;
-        
+            msgTx.len=2;
+            
+            msgTx.data[0]=1;
+            msgTx.data[1]=BRAS_AVANT;
+            
             can1.write(msgTx);
         break;
-        case 121://Désactiver les pompes
-            msgTx.id=POMPE_PWM;
+        
+        case 151:
+            msgTx.id=0x404;
             msgTx.format=CANStandard;
             msgTx.type=CANData;
-            msgTx.len=6;
-        
-            // x sur 2 octets
-            msgTx.data[0]=(unsigned char)0;
-            msgTx.data[1]=(unsigned char)0;
-            msgTx.data[2]=(unsigned char)0;
-            msgTx.data[3]=(unsigned char)0;
-            msgTx.data[4]=(unsigned char)0;
-            msgTx.data[5]=(unsigned char)0;
-        
+            msgTx.len=2;
+            
+            msgTx.data[0]=0;
+            msgTx.data[1]=BRAS_AVANT;
+            
             can1.write(msgTx);
         break;
         
@@ -210,7 +531,7 @@
             wait_ms(speed);
         break;
         
-        case 40: // demande au telemetre la position d'un objet
+        /*case 40: // demande au telemetre la position d'un objet
             //SendRawId(TELEMETRE_RECHERCHE_OBJET);
             
             modeTelemetre = 1;
@@ -224,7 +545,7 @@
             // indice du module sur le terrain
             msgTx.data[0] = (unsigned char)speed;
             
-            /*
+            
             // x sur 2 octets
             msgTx.data[0]=(unsigned char)speed;
             msgTx.data[1]=(unsigned char)(speed>>8);
@@ -235,20 +556,20 @@
             //msgTx.data[4]=(unsigned char)theta;
             //msgTx.data[5]=(unsigned char)(theta>>8);
             msgTx.data[4]=0;
-            msgTx.data[5]=0;*/
+            msgTx.data[5]=0;
             
             can1.write(msgTx);
             
-        break;
+        break;*/
         
-        case 130://Lancer mouvement de sortie de la zone de départ
+       /* case 130://Lancer mouvement de sortie de la zone de départ
             msgTx.id=ACTION_BIG_DEMARRAGE;
             msgTx.format=CANStandard;
             msgTx.type=CANData;
             msgTx.len=1;
             msgTx.data[0] = (unsigned char)speed;
             can1.write(msgTx);
-        break;
+        break;*/
         
         default:
             return 0;//L'action n'existe pas, il faut utiliser le CAN
@@ -285,12 +606,14 @@
 /****************************************************************************************/
 void initRobotActionneur(void)
 {
-    doAction(110,0,0);//Ouverture pince arrière haute
-    doAction(112,0,0);//Ouverture pince arrière basse
-    doAction(114,0,0);//Ouverture porte arrière
-    doAction(100,0,0);//Ouvrir les portes avant
-    doAction(102,0,0);//Remonter le peigne
-    doAction(106,0,0);//Remonter le support du cone arriere
+    wait(2);
+    doAction(101,1,0);// preparation prise pince arriere
+    doAction(101,0,0);// preparation prise pince avant
+    doAction(130,0,0);// baisser aspitr 
+    wait(2);
+    doAction(100,1,0);// preparation prise pince arriere
+    doAction(100,0,0);// preparation prise pince avant
+    doAction(131,0,0);// baisser aspitr  
 }
 
 /****************************************************************************************/
@@ -299,6 +622,7 @@
 /****************************************************************************************/
 void runRobotTest(void) 
 {
+    /*
     int waitTime = 500;
     
     //Test des AX12 dans l'ordre
@@ -320,7 +644,7 @@
     wait_ms(waitTime);
     doAction(103,0,0);//Descendre le peigne
     wait_ms(waitTime);
-    doAction(102,0,0);//Remonter le peigne
+    doAction(102,0,0);//Remonter le peigne*/
 }
 
 /****************************************************************************************/