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
diff -r 88431b537477 -r dcd817534b57 AX12-V2/AX12-V2.cpp
--- 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;