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: mbed Herkulex_Library_2019
main.cpp
- Committer:
- maximilienlv
- Date:
- 2020-06-02
- Revision:
- 0:0cb11adecfc6
File content as of revision 0:0cb11adecfc6:
#include "main.h"
#define SIZE_FIFO 50
CAN can(PB_8,PB_9,1000000); // Rx&Tx pour le CAN
Serial pc(USBTX,USBRX);
CANMessage msgRxBuffer[SIZE_FIFO];
unsigned char FIFO_ecriture=0; //Position du fifo pour la reception CAN
signed char FIFO_lecture=0;//Position du fifo de lecture des messages CAN
unsigned short ackFinAction = 0;
void canProcessRx(void);
/*********************************************************************************************/
/* FUNCTION NAME: canRx_ISR */
/* DESCRIPTION : lit les messages sur le can et les stocke dans la FIFO */
/*********************************************************************************************/
void canRx_ISR (void)
{
if (can.read(msgRxBuffer[FIFO_ecriture]))
{
FIFO_ecriture=(FIFO_ecriture+1)%SIZE_FIFO;
}
}
int main()
{
can.attach(&canRx_ISR); // création de l'interrupt attachée à la réception sur le CAN
servo_interrupt_en(); //permettre les interuptions
wait_ms(200);
deverouillage_torque();
pc.printf("\nLAUNCHED\n\r");
while(1)
{
canProcessRx();
f_mesure();
}
}
/****************************************************************************************/
/* FUNCTION NAME: canProcessRx */
/* DESCRIPTION : Fonction de traitement des messages CAN */
/****************************************************************************************/
void canProcessRx(void)
{
static signed char FIFO_occupation=0,FIFO_max_occupation=0;
CANMessage msgTx=CANMessage();
FIFO_occupation=FIFO_ecriture-FIFO_lecture;
if(FIFO_occupation<0)
FIFO_occupation=FIFO_occupation+SIZE_FIFO;
if(FIFO_max_occupation<FIFO_occupation)
FIFO_max_occupation=FIFO_occupation;
if(FIFO_occupation!=0) {
int identifiant=msgRxBuffer[FIFO_lecture].id;
switch(identifiant)
{
case TEST_BRAS_1:
test_BRAS_1();
break;
case TEST_BRAS_2:
test_BRAS_2();
break;
case TEST_BRAS_3:
test_BRAS_3();
break;
case TEST_BRAS_4:
test_BRAS_4();
break;
case TEST_BRAS_5:
test_BRAS_5();
break;
case TEST_TELEMETRE_1:
short distance1=lecture_telemetre(1);
unsigned char distance_telemetre_1 = distance1;
SendMsgCan(TELEMETRE_1_REP, &distance_telemetre_1,1);
break;
case TEST_TELEMETRE_2:
short distance2=lecture_telemetre(2);
unsigned char distance_telemetre_2 = distance2;
SendMsgCan(TELEMETRE_2_REP, &distance_telemetre_2,1);
break;
case TEST_TELEMETRE_3:
short distance3=lecture_telemetre(3);
unsigned char distance_telemetre_3 = distance3;
SendMsgCan(TELEMETRE_3_REP, &distance_telemetre_3,1);
break;
case TEST_TELEMETRE_4:
short distance4=lecture_telemetre(4);
unsigned char distance_telemetre_4 = distance4;
SendMsgCan(TELEMETRE_4_REP, &distance_telemetre_4,1);
break;
default:
break;
}
FIFO_lecture=(FIFO_lecture+1)%SIZE_FIFO;
}
}