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.
Dependencies: CRAC-Strat_2019 SerialHalfDuplex SDFileSystem DISCO-F469NI_portrait liaison_Bluetooth ident_crac
Dependents: Codeprincipal_2019 CRAC-Strat_2019
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;