CRAC Team / CRAC-Strat_2019

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

Dependents:   Codeprincipal_2019 CRAC-Strat_2019

Revision:
5:dcd817534b57
Parent:
1:116040d14164
Child:
8:0edc7dfb7f7e
--- a/AX12-V2/AX12-V2.cpp	Sun Apr 17 14:03:03 2016 +0000
+++ b/AX12-V2/AX12-V2.cpp	Sat Apr 23 09:16:14 2016 +0000
@@ -2,7 +2,8 @@
 
 struct S_AX12 AX12_data[MAX_AX12];//La liste de tous les AX12 du robot possible, aussi bien par CAN que en local
 
-SerialHalfDuplex AX12_Serial = SerialHalfDuplex(p9,p10);
+SerialHalfDuplex AX12_Serial1 = SerialHalfDuplex(p9,p10);
+SerialHalfDuplex AX12_Serial2 = SerialHalfDuplex(p28,p27);
 
 int lastAX12Use = 0;
 
@@ -12,7 +13,7 @@
 /* FUNCTION NAME: AX12_register                                                         */
 /* DESCRIPTION  : Indiquer qu'un AX12 est connecté à la carte                           */
 /****************************************************************************************/
-void AX12_register(unsigned char id, unsigned short speed)
+void AX12_register(unsigned char id, unsigned char serial, unsigned short speed)
 {
     int localID = AX12_getLocalID(id);
     char data[2];
@@ -22,14 +23,10 @@
     if(speed > 0x3FF) speed = 0x3FF;//La vitesse ne doit pas depasser 1023
     
     AX12_data[lastAX12Use].speed = speed;
-    /*
-    data[0] = speed & 0xff; // bottom 8 bits
-    data[1] = speed >> 8;   // top 8 bits
-    */
-    AX12_Serial.baud(1000000);//On indique la vitesse de transmission des AX12
-    /*
-    AX12_write(id,AX12_REG_MOVING_SPEED,2,data);
-    */
+    AX12_data[lastAX12Use].serial = serial;
+    
+    AX12_Serial1.baud(1000000);//On indique la vitesse de transmission des AX12
+    AX12_Serial2.baud(1000000);//On indique la vitesse de transmission des AX12
     
 }
 
@@ -128,7 +125,7 @@
     {
         if(AX12_data[i].isUsingCAN == 0 && AX12_data[i].needCheckMoving == 1)//Il faut vérifier si l'AX12 a terminé de bouger
         {
-            if(AX12_isMoving(AX12_data[i].id) == 0) {//L'AX12 a terminé de bouger
+            if(AX12_isMoving(i) == 0) {//L'AX12 a terminé de bouger
                 AX12_data[i].needCheckMoving = 0;
                 
                 msgTx.id=SERVO_AX12_DONE;
@@ -149,7 +146,7 @@
 /* DESCRIPTION  : Permet de prendre en compte les changement d'instruction des AX12     */
 /*    Début du mouvement à partir de l'appel de cette fonction                          */
 /****************************************************************************************/
-void AX12_processChange(void)
+void AX12_processChange(unsigned char fromCan)
 {
     int i=0;
     int dataToSendLength = 0;
@@ -174,11 +171,13 @@
             AX12_data[i].needToUpdate = 0;//Remise à 0 de l'indicatif de mise à jour
         }
     } 
-    SendRawId(SERVO_AX12_PROCESS);//On indique par CAN qu'il faut bouger les AX12
+    if(fromCan == 0)
+        SendRawId(SERVO_AX12_PROCESS);//On indique par CAN qu'il faut bouger les AX12
 
     if(dataToSendLength > 0)//Il y a des données à envoyer en local
     {
-        AX12_syncWrite(AX12_REG_GOAL_POSITION, dataToSendLength, dataToSend);
+        AX12_syncWrite(AX12_Serial1, AX12_REG_GOAL_POSITION, dataToSendLength, dataToSend);
+        AX12_syncWrite(AX12_Serial2, AX12_REG_GOAL_POSITION, dataToSendLength, dataToSend);
     }
     
 }
@@ -190,7 +189,10 @@
 int AX12_isMoving(unsigned char id)
 {
     char data[1];
-    AX12_read(id,AX12_REG_MOVING,1,data);
+    if(AX12_data[id].serial == 0)
+        AX12_read(AX12_Serial1,AX12_data[id].id,AX12_REG_MOVING,1,data);
+    else
+        AX12_read(AX12_Serial2,AX12_data[id].id,AX12_REG_MOVING,1,data);
     return(data[0]);
 }
 
@@ -198,7 +200,7 @@
 /* FUNCTION NAME: AX12_syncWrite                                                        */
 /* DESCRIPTION  : Fonction pour envoyer des trames aux AX12 en mode syncWrite           */
 /****************************************************************************************/
-int AX12_syncWrite(int start, int bytes, char* data)
+int AX12_syncWrite(SerialHalfDuplex& AX12_Serial, int start, int bytes, char* data)
 {
 //0    : 0xff 
 //1    : 0xff
@@ -273,10 +275,10 @@
 /* FUNCTION NAME: AX12_write                                                            */
 /* DESCRIPTION  : Fonction pour envoyer des trames aux AX12                             */
 /****************************************************************************************/
-int AX12_write(int ID, int start, int bytes, char* data, int flag)
+int AX12_write(SerialHalfDuplex& AX12_Serial, int ID, int start, int bytes, char* data, int flag)
 {
 // 0xff, 0xff, ID, Length, Intruction(write), Address, Param(s), Checksum
-
+// = AX12_Serial1;
     char TxBuf[16];
     char sum = 0;
     char Status[6];
@@ -451,10 +453,10 @@
 /* FUNCTION NAME: AX12_read                                                             */
 /* DESCRIPTION  : Lire des données dans un registre de l'AX12                           */
 /****************************************************************************************/
-int AX12_read(int ID, int start, int bytes, char* data)
+int AX12_read(SerialHalfDuplex& AX12_Serial, int ID, int start, int bytes, char* data)
 {
 
-
+//SerialHalfDuplex AX12_Serial = AX12_Serial1;
     char PacketLength = 0x3;
     char TxBuf[16];
     char sum = 0;