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@0:0cb11adecfc6, 2020-06-02 (annotated)
- Committer:
 - maximilienlv
 - Date:
 - Tue Jun 02 06:44:31 2020 +0000
 - Revision:
 - 0:0cb11adecfc6
 
programme de la carte esclave des bras, debugeur
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| maximilienlv | 0:0cb11adecfc6 | 1 | #include "main.h" | 
| maximilienlv | 0:0cb11adecfc6 | 2 | |
| maximilienlv | 0:0cb11adecfc6 | 3 | #define SIZE_FIFO 50 | 
| maximilienlv | 0:0cb11adecfc6 | 4 | |
| maximilienlv | 0:0cb11adecfc6 | 5 | CAN can(PB_8,PB_9,1000000); // Rx&Tx pour le CAN | 
| maximilienlv | 0:0cb11adecfc6 | 6 | |
| maximilienlv | 0:0cb11adecfc6 | 7 | Serial pc(USBTX,USBRX); | 
| maximilienlv | 0:0cb11adecfc6 | 8 | |
| maximilienlv | 0:0cb11adecfc6 | 9 | CANMessage msgRxBuffer[SIZE_FIFO]; | 
| maximilienlv | 0:0cb11adecfc6 | 10 | unsigned char FIFO_ecriture=0; //Position du fifo pour la reception CAN | 
| maximilienlv | 0:0cb11adecfc6 | 11 | signed char FIFO_lecture=0;//Position du fifo de lecture des messages CAN | 
| maximilienlv | 0:0cb11adecfc6 | 12 | unsigned short ackFinAction = 0; | 
| maximilienlv | 0:0cb11adecfc6 | 13 | |
| maximilienlv | 0:0cb11adecfc6 | 14 | void canProcessRx(void); | 
| maximilienlv | 0:0cb11adecfc6 | 15 | |
| maximilienlv | 0:0cb11adecfc6 | 16 | |
| maximilienlv | 0:0cb11adecfc6 | 17 | /*********************************************************************************************/ | 
| maximilienlv | 0:0cb11adecfc6 | 18 | /* FUNCTION NAME: canRx_ISR */ | 
| maximilienlv | 0:0cb11adecfc6 | 19 | /* DESCRIPTION : lit les messages sur le can et les stocke dans la FIFO */ | 
| maximilienlv | 0:0cb11adecfc6 | 20 | /*********************************************************************************************/ | 
| maximilienlv | 0:0cb11adecfc6 | 21 | void canRx_ISR (void) | 
| maximilienlv | 0:0cb11adecfc6 | 22 | { | 
| maximilienlv | 0:0cb11adecfc6 | 23 | if (can.read(msgRxBuffer[FIFO_ecriture])) | 
| maximilienlv | 0:0cb11adecfc6 | 24 | { | 
| maximilienlv | 0:0cb11adecfc6 | 25 | FIFO_ecriture=(FIFO_ecriture+1)%SIZE_FIFO; | 
| maximilienlv | 0:0cb11adecfc6 | 26 | } | 
| maximilienlv | 0:0cb11adecfc6 | 27 | } | 
| maximilienlv | 0:0cb11adecfc6 | 28 | |
| maximilienlv | 0:0cb11adecfc6 | 29 | int main() | 
| maximilienlv | 0:0cb11adecfc6 | 30 | { | 
| maximilienlv | 0:0cb11adecfc6 | 31 | can.attach(&canRx_ISR); // création de l'interrupt attachée à la réception sur le CAN | 
| maximilienlv | 0:0cb11adecfc6 | 32 | servo_interrupt_en(); //permettre les interuptions | 
| maximilienlv | 0:0cb11adecfc6 | 33 | wait_ms(200); | 
| maximilienlv | 0:0cb11adecfc6 | 34 | deverouillage_torque(); | 
| maximilienlv | 0:0cb11adecfc6 | 35 | pc.printf("\nLAUNCHED\n\r"); | 
| maximilienlv | 0:0cb11adecfc6 | 36 | while(1) | 
| maximilienlv | 0:0cb11adecfc6 | 37 | { | 
| maximilienlv | 0:0cb11adecfc6 | 38 | canProcessRx(); | 
| maximilienlv | 0:0cb11adecfc6 | 39 | f_mesure(); | 
| maximilienlv | 0:0cb11adecfc6 | 40 | } | 
| maximilienlv | 0:0cb11adecfc6 | 41 | } | 
| maximilienlv | 0:0cb11adecfc6 | 42 | |
| maximilienlv | 0:0cb11adecfc6 | 43 | /****************************************************************************************/ | 
| maximilienlv | 0:0cb11adecfc6 | 44 | /* FUNCTION NAME: canProcessRx */ | 
| maximilienlv | 0:0cb11adecfc6 | 45 | /* DESCRIPTION : Fonction de traitement des messages CAN */ | 
| maximilienlv | 0:0cb11adecfc6 | 46 | /****************************************************************************************/ | 
| maximilienlv | 0:0cb11adecfc6 | 47 | void canProcessRx(void) | 
| maximilienlv | 0:0cb11adecfc6 | 48 | { | 
| maximilienlv | 0:0cb11adecfc6 | 49 | static signed char FIFO_occupation=0,FIFO_max_occupation=0; | 
| maximilienlv | 0:0cb11adecfc6 | 50 | CANMessage msgTx=CANMessage(); | 
| maximilienlv | 0:0cb11adecfc6 | 51 | |
| maximilienlv | 0:0cb11adecfc6 | 52 | FIFO_occupation=FIFO_ecriture-FIFO_lecture; | 
| maximilienlv | 0:0cb11adecfc6 | 53 | if(FIFO_occupation<0) | 
| maximilienlv | 0:0cb11adecfc6 | 54 | FIFO_occupation=FIFO_occupation+SIZE_FIFO; | 
| maximilienlv | 0:0cb11adecfc6 | 55 | |
| maximilienlv | 0:0cb11adecfc6 | 56 | if(FIFO_max_occupation<FIFO_occupation) | 
| maximilienlv | 0:0cb11adecfc6 | 57 | FIFO_max_occupation=FIFO_occupation; | 
| maximilienlv | 0:0cb11adecfc6 | 58 | |
| maximilienlv | 0:0cb11adecfc6 | 59 | if(FIFO_occupation!=0) { | 
| maximilienlv | 0:0cb11adecfc6 | 60 | int identifiant=msgRxBuffer[FIFO_lecture].id; | 
| maximilienlv | 0:0cb11adecfc6 | 61 | |
| maximilienlv | 0:0cb11adecfc6 | 62 | switch(identifiant) | 
| maximilienlv | 0:0cb11adecfc6 | 63 | { | 
| maximilienlv | 0:0cb11adecfc6 | 64 | case TEST_BRAS_1: | 
| maximilienlv | 0:0cb11adecfc6 | 65 | test_BRAS_1(); | 
| maximilienlv | 0:0cb11adecfc6 | 66 | break; | 
| maximilienlv | 0:0cb11adecfc6 | 67 | |
| maximilienlv | 0:0cb11adecfc6 | 68 | case TEST_BRAS_2: | 
| maximilienlv | 0:0cb11adecfc6 | 69 | test_BRAS_2(); | 
| maximilienlv | 0:0cb11adecfc6 | 70 | break; | 
| maximilienlv | 0:0cb11adecfc6 | 71 | |
| maximilienlv | 0:0cb11adecfc6 | 72 | case TEST_BRAS_3: | 
| maximilienlv | 0:0cb11adecfc6 | 73 | test_BRAS_3(); | 
| maximilienlv | 0:0cb11adecfc6 | 74 | break; | 
| maximilienlv | 0:0cb11adecfc6 | 75 | |
| maximilienlv | 0:0cb11adecfc6 | 76 | case TEST_BRAS_4: | 
| maximilienlv | 0:0cb11adecfc6 | 77 | test_BRAS_4(); | 
| maximilienlv | 0:0cb11adecfc6 | 78 | break; | 
| maximilienlv | 0:0cb11adecfc6 | 79 | |
| maximilienlv | 0:0cb11adecfc6 | 80 | case TEST_BRAS_5: | 
| maximilienlv | 0:0cb11adecfc6 | 81 | test_BRAS_5(); | 
| maximilienlv | 0:0cb11adecfc6 | 82 | break; | 
| maximilienlv | 0:0cb11adecfc6 | 83 | |
| maximilienlv | 0:0cb11adecfc6 | 84 | case TEST_TELEMETRE_1: | 
| maximilienlv | 0:0cb11adecfc6 | 85 | short distance1=lecture_telemetre(1); | 
| maximilienlv | 0:0cb11adecfc6 | 86 | unsigned char distance_telemetre_1 = distance1; | 
| maximilienlv | 0:0cb11adecfc6 | 87 | SendMsgCan(TELEMETRE_1_REP, &distance_telemetre_1,1); | 
| maximilienlv | 0:0cb11adecfc6 | 88 | break; | 
| maximilienlv | 0:0cb11adecfc6 | 89 | case TEST_TELEMETRE_2: | 
| maximilienlv | 0:0cb11adecfc6 | 90 | short distance2=lecture_telemetre(2); | 
| maximilienlv | 0:0cb11adecfc6 | 91 | unsigned char distance_telemetre_2 = distance2; | 
| maximilienlv | 0:0cb11adecfc6 | 92 | SendMsgCan(TELEMETRE_2_REP, &distance_telemetre_2,1); | 
| maximilienlv | 0:0cb11adecfc6 | 93 | break; | 
| maximilienlv | 0:0cb11adecfc6 | 94 | case TEST_TELEMETRE_3: | 
| maximilienlv | 0:0cb11adecfc6 | 95 | short distance3=lecture_telemetre(3); | 
| maximilienlv | 0:0cb11adecfc6 | 96 | unsigned char distance_telemetre_3 = distance3; | 
| maximilienlv | 0:0cb11adecfc6 | 97 | SendMsgCan(TELEMETRE_3_REP, &distance_telemetre_3,1); | 
| maximilienlv | 0:0cb11adecfc6 | 98 | break; | 
| maximilienlv | 0:0cb11adecfc6 | 99 | case TEST_TELEMETRE_4: | 
| maximilienlv | 0:0cb11adecfc6 | 100 | short distance4=lecture_telemetre(4); | 
| maximilienlv | 0:0cb11adecfc6 | 101 | unsigned char distance_telemetre_4 = distance4; | 
| maximilienlv | 0:0cb11adecfc6 | 102 | SendMsgCan(TELEMETRE_4_REP, &distance_telemetre_4,1); | 
| maximilienlv | 0:0cb11adecfc6 | 103 | break; | 
| maximilienlv | 0:0cb11adecfc6 | 104 | |
| maximilienlv | 0:0cb11adecfc6 | 105 | default: | 
| maximilienlv | 0:0cb11adecfc6 | 106 | break; | 
| maximilienlv | 0:0cb11adecfc6 | 107 | } | 
| maximilienlv | 0:0cb11adecfc6 | 108 | FIFO_lecture=(FIFO_lecture+1)%SIZE_FIFO; | 
| maximilienlv | 0:0cb11adecfc6 | 109 | } | 
| maximilienlv | 0:0cb11adecfc6 | 110 | } |