Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of CRAC-Strat_2017_homologation_gros_rob by
Diff: AX12-V2/AX12-V2.cpp
- 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;
