carte esclave petit robot

Dependencies:   mbed Herkulex_Library_2019 actions_Gr ident_crac actions_Pr

Revision:
14:b1abd2f6df75
Parent:
13:9e19048eb065
Child:
15:119fc452dcaf
--- a/main.cpp	Tue May 21 08:56:49 2019 +0000
+++ b/main.cpp	Tue May 21 14:37:51 2019 +0000
@@ -17,11 +17,12 @@
 unsigned char EtatGameEnd=0;
 
 char fpresentoir_avant=0, fpresentoir_arriere=0;
-char  fgoldenium_avant=0, fgoldenium_arriere=0;
+char fgoldenium_avant=0, fgoldenium_arriere=0;
 char fsol_avant=0,fsol_arriere=0;
 char fsol_avant_relache=0,fsol_arriere_relache=0;
 char fbalance_avant=0,fbalance_arriere=0;
 char favant_relache=0,farriere_relache=0;
+char faccelerateur_avant=0,faccelerateur_arriere=0;;
 
 
 
@@ -51,8 +52,10 @@
 void automate_ventouse_relache_avant(void);
 void automate_ventouse_relache_arriere (void);
 
-void automate_ventouse_sol_avant_relache (void);
-void automate_ventouse_sol_arriere_relache (void);
+void automate_ventouse_accelerateur_avant(void);
+void automate_ventouse_accelerateur_arriere(void);
+
+
 /*********************************************************************************************/
 /* FUNCTION NAME: canRx_ISR                                                                  */
 /* DESCRIPTION  : lit les messages sur le can et les stocke dans la FIFO                     */
@@ -173,9 +176,12 @@
 
         automate_ventouse_relache_avant();
         automate_ventouse_relache_arriere();
-        
+
         automate_ventouse_sol_avant_relache();
-        automate_ventouse_sol_arriere_relache(); 
+        automate_ventouse_sol_arriere_relache();
+
+        automate_ventouse_accelerateur_avant();
+        automate_ventouse_accelerateur_arriere();
 
         if(EtatGameEnd==1) {
             while(1);
@@ -271,15 +277,11 @@
                 break;
 
             case ACCELERATEUR_AVANT:
-                SendAck(ACKNOWLEDGE_HERKULEX, ACK_ACTION);
-                accelerateur_avant();
-                SendAck(ACKNOWLEDGE_HERKULEX, ACK_FIN_ACTION);
+                faccelerateur_avant=1;
                 break;
 
             case ACCELERATEUR_ARRIERE:
-                SendAck(ACKNOWLEDGE_HERKULEX, ACK_ACTION);
-                accelerateur_arriere();
-                SendAck(ACKNOWLEDGE_HERKULEX, ACK_FIN_ACTION);
+                faccelerateur_arriere=1;
                 break;
 
             case GOLDENIUM_AVANT:
@@ -312,6 +314,13 @@
             case ARRIERE_RELACHE:
                 farriere_relache=1;
                 break;
+            case RECROQUEVILLER:
+                SendAck(ACKNOWLEDGE_HERKULEX, ACK_ACTION);
+                recroqueviller_avant();
+                recroqueviller_arriere();
+                verification();
+                SendAck(ACKNOWLEDGE_HERKULEX, ACK_FIN_ACTION);
+                break;
 
 
 //--------------------------------------------------------------------------ACK carte pompe----------------------------------------------
@@ -427,11 +436,13 @@
         case envoi_instruction://envoi instruction
             SendAck(ACKNOWLEDGE_HERKULEX, ACK_ACTION);
             goldenium_avant();
-            SendRawId(HACHEUR_STATUT_VENTOUSES);
+            char pompe=AV_CENTRE;
+            can.write(CANMessage(HACHEUR_GET_ATOM, &pompe,1));
             etat = attente_ack_ventouse;
             break;
 
         case attente_ack_ventouse:
+            SendRawId(HACHEUR_STATUT_VENTOUSES);
             if((status_pompe&MASK_GOLDENIUM_AV)== MASK_GOLDENIUM_AV) {
                 fgoldenium_avant=0;
                 SendAck(ACKNOWLEDGE_HERKULEX, ACK_FIN_ACTION);
@@ -457,11 +468,13 @@
         case envoi_instruction://envoi instruction
             SendAck(ACKNOWLEDGE_HERKULEX, ACK_ACTION);
             goldenium_arriere();
-            SendRawId(HACHEUR_STATUT_VENTOUSES);
+            char pompe=AR_CENTRE;
+            can.write(CANMessage(HACHEUR_GET_ATOM, &pompe,1));
             etat = attente_ack_ventouse;
             break;
 
         case attente_ack_ventouse:
+            SendRawId(HACHEUR_STATUT_VENTOUSES);
             if((status_pompe&MASK_GOLDENIUM_AR)== MASK_GOLDENIUM_AR) {
                 fgoldenium_arriere=0;
                 SendAck(ACKNOWLEDGE_HERKULEX, ACK_FIN_ACTION);
@@ -750,4 +763,50 @@
     }
 
 
-}
\ No newline at end of file
+}
+void automate_ventouse_accelerateur_avant (void)
+{
+    typedef enum {init,envoi_instruction,attente_ack_ventouse} type_etat;
+    static type_etat etat = init;
+
+    switch(etat) {
+        case init: //attente d'initialisation
+            if(faccelerateur_avant)
+                etat=envoi_instruction;
+            break;
+
+        case envoi_instruction://envoi instruction
+            SendAck(ACKNOWLEDGE_HERKULEX, ACK_ACTION);
+            accelerateur_avant();
+            GoStraight(200,1,35,0);//35epaisseur accelerateur
+            etat = attente_ack_ventouse;
+            break;
+
+        case attente_ack_ventouse:
+            char pompe=AV_DROIT;
+            can.write(CANMessage(HACHEUR_RELEASE_ATOM, &pompe,1));
+            pompe=AV_GAUCHE;
+            can.write(CANMessage(HACHEUR_RELEASE_ATOM, &pompe,1));
+            SendRawId(HACHEUR_STATUT_VENTOUSES);
+            if((status_pompe&MASK_AV_DROIT_GAUCHE)== 0) {
+                faccelerateur_avant=0;
+                presentoir_avant();
+                can.write(CANMessage(HACHEUR_RELEASE_ATOM, &pompe,1));//on arrete la pompe car elle est réactivé par presentoir_avant();
+                SendAck(ACKNOWLEDGE_HERKULEX, ACK_FIN_ACTION);
+                etat = init;
+            }
+            break;
+
+    }
+
+
+}
+
+
+void automate_ventouse_accelerateur_arriere (void)
+{
+
+
+}
+
+