CAN_Servomoteur_V1_Haoxuan avec lib de servo
Dependencies: mbed
Diff: main.cpp
- Revision:
- 0:3b683da943e6
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Apr 12 08:54:49 2018 +0000 @@ -0,0 +1,104 @@ +#include "mbed.h" +#include "ident_crac.h" +#include "lib.h" + +#define SIZE_FIFO 50 //Taille du buffer pour le bus CAN + +AnalogIn analog_value(A0); + +DigitalOut led(LED1); + +void canProcessRx(void); +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 + +CAN can1(PB_8,PB_9); // Rx&Tx pour le CAN +CANMessage msgRxBuffer[SIZE_FIFO]; // buffer en r�ception pour le CAN + +void canRx_ISR (void) +{ + if (can1.read(msgRxBuffer[FIFO_ecriture])) { + //if(msgRxBuffer[FIFO_ecriture].id==RESET_STRAT) mbed_reset(); + /*else*/ FIFO_ecriture=(FIFO_ecriture+1)%SIZE_FIFO; + } +} + +int Combinaison_cube = 0; + +int main() { + + can1.frequency(1000000); // fr�quence de travail 1Mbit/s + can1.attach(&canRx_ISR); // cr�ation de l'interrupt attach�e � la r�ception sur le CAN + + wait_ms(500); + + while(1) { + canProcessRx(); + } +} + +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) { + + switch(msgRxBuffer[FIFO_lecture].id) { + case DEBUG_FAKE_JAKE://Permet de lancer le match � distance + case GLOBAL_JACK: + break; + case ALIVE_BALISE: + case ALIVE_MOTEUR: + case ALIVE_IHM: + case ALIVE_ACTIONNEURS_AVANT: + case ALIVE_ACTIONNEURS_ARRIERE: + case ALIVE_AX12: + case ECRAN_ALL_CHECK: + break; + case ACKNOWLEDGE_BALISE: + case ACKNOWLEDGE_MOTEUR: + case ACKNOWLEDGE_IHM: + case ACKNOWLEDGE_TELEMETRE: + case ACKNOWLEDGE_AX12: + case INSTRUCTION_END_BALISE: + case INSTRUCTION_END_MOTEUR: + case INSTRUCTION_END_IHM: + case INSTRUCTION_END_AX12: + break; + case ECRAN_START_MATCH: + break; + case SERVO_AX12_PROCESS: + break; + case SERVO_AX12_DONE: + break; + case ECRAN_CHOICE_COLOR: + break; + case ECRAN_CHOICE_STRAT: + break; + case BALISE_DANGER : + break; + case BALISE_STOP: + break; + case BALISE_END_DANGER: + break; + + case ECRAN_CHOICE_START_ACTION: + break; + case OBJET_SUR_TABLE: + break; + case Monter_immeuble: + unsigned char Combinaison_cube_1 = msgRxBuffer[FIFO_lecture].data[0]; + unsigned char Combinaison_cube_2 = msgRxBuffer[FIFO_lecture].data[1]; + unsigned char Combinaison_cube_3 = msgRxBuffer[FIFO_lecture].data[2]; + monter_immeble(1,Combinaison_cube_1,Combinaison_cube_2,Combinaison_cube_3); + break; + } + + FIFO_lecture=(FIFO_lecture+1)%SIZE_FIFO; + } +} \ No newline at end of file