Carte esclave gros robot

Dependencies:   mbed Herkulex_Library_2019 ident_crac actions_Pr

Revision:
45:11614fc23e53
Parent:
44:381ecf63e6ab
Child:
46:67c0d8d971b0
--- a/main.cpp	Sun May 26 10:51:35 2019 +0000
+++ b/main.cpp	Fri May 31 20:53:19 2019 +0000
@@ -11,13 +11,15 @@
 CANMessage msgRxBuffer[SIZE_FIFO];
 unsigned char FIFO_ecriture=0; //Position du fifo pour la reception CAN
 signed char FIFO_lecture=0;//Position du fifo de lecture des messages CAN
-unsigned char EtatGameEnd=0;
-
+unsigned char EtatGameEnd=0, EtatGameStart = 0, EtatGameRecalage = 0;
+unsigned short x_goldenium,y_goldenium;
+unsigned short ackFinAction = 0;
 char cote=0;
 
 unsigned short distance_recalage,distance_revenir;
 unsigned short  distance_goldenium;
 
+
 void canProcessRx(void);
 
 
@@ -39,6 +41,7 @@
 
 int main()
 {
+    
     can.attach(&canRx_ISR); // création de l'interrupt attachée à la réception sur le CAN
     servo_interrupt_en(); //permettre les interuptions
 
@@ -61,7 +64,7 @@
     gabarit_robot();
 
 
-    pc.printf("\nLAUNCHED");
+    pc.printf("\nLAUNCHED\n\n");
     while(1) {
         /*setTorque(doigt,TORQUE_FREE,2);
         pc.printf("pos : %d\n", getPos(doigt,2));
@@ -94,24 +97,41 @@
 #endif
 
 #ifdef ROBOT_BIG
-        automate_ventouse_presentoir_avant();
-        automate_ventouse_goldenium_avant();
-        automate_ventouse_relache_avant();
-        automate_ventouse_accelerateur_avant();
-
-        fifo_couleur();
-        ascenseur();
-        if(cote) {
-            convoyeur_gauche_violet();
-            convoyeur_droit_violet();
-        } else {
-            convoyeur_gauche_jaune(); //ok
-            convoyeur_droit_jaune(); //ok
+        if(EtatGameStart){
+            automate_ventouse_presentoir_avant();
+            automate_ventouse_goldenium_avant();
+            automate_ventouse_relache_avant();
+            automate_ventouse_accelerateur_avant();
+    
+            fifo_couleur();
+            ascenseur();
+        }
+        
+        if(EtatGameRecalage || EtatGameStart){        
+            if(cote) {
+                convoyeur_gauche_violet();
+                convoyeur_droit_violet();
+            } else {
+                convoyeur_gauche_jaune(); //ok
+                convoyeur_droit_jaune(); //ok
+            }
         }
 
 #endif
 
         if(EtatGameEnd==1) {
+            gabarit_robot();
+            SendCharCan(HACHEUR_ID_COUROIES,0);
+
+            setTorque(roue_G, TORQUE_FREE,1); 
+            setTorque(stockage_G, TORQUE_FREE,1); 
+            setTorque(doigt, TORQUE_FREE,2); 
+            setTorque(AV_EP_C, TORQUE_FREE,2);
+            setTorque(AV_poigne_C, TORQUE_FREE,2);
+            setTorque(stockage_D, TORQUE_FREE,3);
+            setTorque(roue_D, TORQUE_FREE,3);
+            
+            
             while(1);
         }
 
@@ -135,8 +155,17 @@
         int identifiant=msgRxBuffer[FIFO_lecture].id;
 
         switch(identifiant) {
-
-
+            
+            case GLOBAL_START:
+                EtatGameStart = 1;
+                break;
+            case RECALAGE_START :
+                EtatGameRecalage = 1;
+                break;
+                
+            case INSTRUCTION_END_MOTEUR:
+                ackFinAction = msgRxBuffer[FIFO_lecture].data[0]|((unsigned short)(msgRxBuffer[FIFO_lecture].data[1])<<8);
+                break;
             case CHOICE_COLOR:
                 cote = msgRxBuffer[FIFO_lecture].data[0];
                 /*SendMsgCan(0x788, (unsigned char*)&cote, 1);
@@ -227,7 +256,7 @@
 
             case PRESENTOIR_AVANT:
                 fpresentoir_avant=1;
-            
+
                 break;
 
             case GABARIT_ROBOT:
@@ -240,6 +269,19 @@
                 favant_relache=1;
                 break;
 
+            case GOLDENIUM_AVANT:
+                fgoldenium_avant=1;
+                x_goldenium=msgRxBuffer[FIFO_lecture].data[0]|((unsigned short)(msgRxBuffer[FIFO_lecture].data[1])<<8);
+                y_goldenium=msgRxBuffer[FIFO_lecture].data[2]|((unsigned short)(msgRxBuffer[FIFO_lecture].data[3])<<8);
+                break;
+                
+            case VENTOUSE_AV_CENTRE_BALANCE:
+                SendAck(ACKNOWLEDGE_HERKULEX, ACK_ACTION);
+                goldenium_avant();
+                verification();
+                SendAck(ACKNOWLEDGE_HERKULEX, ACK_FIN_ACTION);
+                break;
+
 
 #ifdef ROBOT_SMALL
 
@@ -270,11 +312,6 @@
                 faccelerateur_arriere=1;
                 break;
 
-            case GOLDENIUM_AVANT:
-                fgoldenium_avant=1;
-                distance_goldenium=msgRxBuffer[FIFO_lecture].data[0]|((unsigned short)(msgRxBuffer[FIFO_lecture].data[1])<<8);
-                break;
-
             case GOLDENIUM_ARRIERE:
                 fgoldenium_arriere=1;
                 break;
@@ -339,15 +376,48 @@
 #endif
 
 #ifdef ROBOT_BIG
+            case VIDER_CONVOYEUR :
+                if(msgRxBuffer[FIFO_lecture].data[0]) {
+                    flag_vide_vert_rouge = 1;
+                } else {
+                    flag_vide_bleu = 1;
+                }
 
+                break;
 
             case ASCENSEUR:
-                flag_ascenseur = msgRxBuffer[FIFO_lecture].data[0];
+                switch(msgRxBuffer[FIFO_lecture].data[0])
+                {
+                    case 0:
+                        flag_ascenseur_force_on = 0;
+                        flag_ascenseur_force_off = 0;
+                        break;
+                    case 1:
+                        flag_ascenseur_force_on = 1;
+                        flag_ascenseur_force_off = 0;
+                        break;
+                    case 2 :
+                        flag_ascenseur_force_on = 0;
+                        flag_ascenseur_force_off = 1;
+                        break;
+                }
+                if(flag_ascenseur_force_on) {
+                    SendCharCan(HACHEUR_ID_COUROIES,1);
+                }
+                else if(flag_ascenseur_force_off){
+                    SendCharCan(HACHEUR_ID_COUROIES,0);
+                }
                 break;
 
             case HACHEUR_ETAT_CONTACTS :
                 status_contact = msgRxBuffer[FIFO_lecture].data[0];
                 break;
+                
+            case RATEAU : 
+                SendAck(ACKNOWLEDGE_HERKULEX, ACK_ACTION);
+                rateau(msgRxBuffer[FIFO_lecture].data[0]);
+                SendAck(ACKNOWLEDGE_HERKULEX, ACK_FIN_ACTION);
+                break;
 
 #endif
         }