carte esclave petit robot

Dependencies:   mbed Herkulex_Library_2019 actions_Gr ident_crac actions_Pr

Committer:
kyxstark
Date:
Wed May 22 20:24:42 2019 +0000
Revision:
24:33c7ff467bd9
Parent:
23:93a427b242ce
Child:
25:9627700d989f
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Artiom 0:bc74da1c502f 1 #include "mbed.h"
Artiom 1:568955af8c2b 2 #include "main.h"
Artiom 0:bc74da1c502f 3
Artiom 0:bc74da1c502f 4 #define SIZE_FIFO 50
Artiom 0:bc74da1c502f 5
Artiom 0:bc74da1c502f 6 CAN can(PB_8,PB_9,1000000); // Rx&Tx pour le CAN
Artiom 0:bc74da1c502f 7
kyxstark 22:9e92a2b941ba 8 Serial pc(USBTX,USBRX);
Artiom 0:bc74da1c502f 9
Artiom 0:bc74da1c502f 10 CANMessage msgRxBuffer[SIZE_FIFO];
Artiom 0:bc74da1c502f 11 unsigned char FIFO_ecriture=0; //Position du fifo pour la reception CAN
Artiom 0:bc74da1c502f 12 signed char FIFO_lecture=0;//Position du fifo de lecture des messages CAN
Artiom 0:bc74da1c502f 13 unsigned char EtatGameEnd=0;
Artiom 0:bc74da1c502f 14
kyxstark 21:edf6d03fdb20 15 void canProcessRx(void);
Artiom 12:191486ba5118 16
Artiom 12:191486ba5118 17
kyxstark 21:edf6d03fdb20 18 #ifdef ROBOT_BIG
kyxstark 24:33c7ff467bd9 19 int rotation_couroies = 0;
kyxstark 21:edf6d03fdb20 20 #endif
Artiom 14:b1abd2f6df75 21
Artiom 0:bc74da1c502f 22 /*********************************************************************************************/
Artiom 0:bc74da1c502f 23 /* FUNCTION NAME: canRx_ISR */
Artiom 0:bc74da1c502f 24 /* DESCRIPTION : lit les messages sur le can et les stocke dans la FIFO */
Artiom 0:bc74da1c502f 25 /*********************************************************************************************/
Artiom 0:bc74da1c502f 26 void canRx_ISR (void)
Artiom 0:bc74da1c502f 27 {
Artiom 0:bc74da1c502f 28 if (can.read(msgRxBuffer[FIFO_ecriture])) {
Artiom 0:bc74da1c502f 29 if (msgRxBuffer[FIFO_ecriture].id==GLOBAL_GAME_END) {
Artiom 0:bc74da1c502f 30
Artiom 0:bc74da1c502f 31 }
Artiom 0:bc74da1c502f 32 FIFO_ecriture=(FIFO_ecriture+1)%SIZE_FIFO;
Artiom 0:bc74da1c502f 33
Artiom 0:bc74da1c502f 34 }
Artiom 0:bc74da1c502f 35
Artiom 0:bc74da1c502f 36 }
Artiom 0:bc74da1c502f 37
Artiom 0:bc74da1c502f 38 int main()
Artiom 0:bc74da1c502f 39 {
Artiom 0:bc74da1c502f 40 can.attach(&canRx_ISR); // création de l'interrupt attachée à la réception sur le CAN
Artiom 0:bc74da1c502f 41 servo_interrupt_en(); //permettre les interuptions
Artiom 11:6c11c081c855 42
Artiom 0:bc74da1c502f 43 wait(1);//attente servo boot
kyxstark 21:edf6d03fdb20 44
kyxstark 21:edf6d03fdb20 45
kyxstark 21:edf6d03fdb20 46 #ifdef ROBOT_SMALL
kyxstark 22:9e92a2b941ba 47 pc.printf("\nPetit robot\n\n");
Artiom 2:9e63099cca99 48 gabarit_petit_robot();
kyxstark 21:edf6d03fdb20 49 #endif
kyxstark 21:edf6d03fdb20 50
kyxstark 21:edf6d03fdb20 51
kyxstark 21:edf6d03fdb20 52
kyxstark 21:edf6d03fdb20 53 #ifdef ROBOT_BIG
kyxstark 22:9e92a2b941ba 54 pc.printf("\nGros robot\n\n");
kyxstark 21:edf6d03fdb20 55 clear(doigt,2);
kyxstark 21:edf6d03fdb20 56 setTorque(doigt, TORQUE_ON,2);
kyxstark 21:edf6d03fdb20 57 positionControl(doigt,384,100,BLED_ON,2);
kyxstark 21:edf6d03fdb20 58 wait(1.0);
kyxstark 21:edf6d03fdb20 59 #endif
kyxstark 21:edf6d03fdb20 60
kyxstark 21:edf6d03fdb20 61
kyxstark 22:9e92a2b941ba 62 pc.printf("\nLAUNCHED");
Artiom 0:bc74da1c502f 63 while(1) {
Artiom 0:bc74da1c502f 64 canProcessRx();
Artiom 10:48c0d1b8aed9 65 f_mesure();//dt35
Artiom 11:6c11c081c855 66
kyxstark 21:edf6d03fdb20 67
kyxstark 21:edf6d03fdb20 68 #ifdef ROBOT_SMALL
Artiom 5:6e198cdd99ad 69 automate_ventouse_presentoir_arriere();
kyxstark 24:33c7ff467bd9 70 automate_ventouse_presentoir_avant();
Artiom 7:553f3f1c2c53 71
Artiom 6:45f9cf44718a 72 automate_ventouse_goldenium_arriere();
kyxstark 24:33c7ff467bd9 73 automate_ventouse_goldenium_avant();
kyxstark 24:33c7ff467bd9 74
Artiom 6:45f9cf44718a 75 automate_ventouse_sol_avant();
Artiom 7:553f3f1c2c53 76 automate_ventouse_sol_arriere();
Artiom 7:553f3f1c2c53 77
kyxstark 24:33c7ff467bd9 78 automate_ventouse_balance_avant();
Artiom 12:191486ba5118 79 automate_ventouse_balance_arriere();
Artiom 12:191486ba5118 80
Artiom 12:191486ba5118 81 automate_ventouse_relache_arriere();
kyxstark 24:33c7ff467bd9 82 automate_ventouse_relache_avant();
Artiom 14:b1abd2f6df75 83
Artiom 13:9e19048eb065 84 automate_ventouse_sol_avant_relache();
Artiom 14:b1abd2f6df75 85 automate_ventouse_sol_arriere_relache();
Artiom 14:b1abd2f6df75 86
Artiom 14:b1abd2f6df75 87 automate_ventouse_accelerateur_arriere();
kyxstark 24:33c7ff467bd9 88 automate_ventouse_accelerateur_avant();
kyxstark 21:edf6d03fdb20 89 #endif
kyxstark 21:edf6d03fdb20 90
kyxstark 21:edf6d03fdb20 91 #ifdef ROBOT_BIG
kyxstark 24:33c7ff467bd9 92 automate_ventouse_presentoir_avant();
kyxstark 24:33c7ff467bd9 93 automate_ventouse_goldenium_avant();
kyxstark 24:33c7ff467bd9 94 automate_ventouse_relache_avant();
kyxstark 24:33c7ff467bd9 95 automate_ventouse_accelerateur_avant();
kyxstark 24:33c7ff467bd9 96
kyxstark 21:edf6d03fdb20 97 fifo_couleur();
kyxstark 21:edf6d03fdb20 98 ascenseur();
kyxstark 21:edf6d03fdb20 99
kyxstark 21:edf6d03fdb20 100 #endif
Artiom 13:9e19048eb065 101
Artiom 0:bc74da1c502f 102 if(EtatGameEnd==1) {
Artiom 0:bc74da1c502f 103 while(1);
Artiom 0:bc74da1c502f 104 }
Artiom 0:bc74da1c502f 105
Artiom 0:bc74da1c502f 106 }
Artiom 0:bc74da1c502f 107 }
Artiom 0:bc74da1c502f 108
Artiom 0:bc74da1c502f 109 /****************************************************************************************/
Artiom 0:bc74da1c502f 110 /* FUNCTION NAME: canProcessRx */
Artiom 0:bc74da1c502f 111 /* DESCRIPTION : Fonction de traitement des messages CAN */
Artiom 0:bc74da1c502f 112 /****************************************************************************************/
Artiom 0:bc74da1c502f 113 void canProcessRx(void)
Artiom 0:bc74da1c502f 114 {
Artiom 0:bc74da1c502f 115 static signed char FIFO_occupation=0,FIFO_max_occupation=0;
Artiom 0:bc74da1c502f 116 CANMessage msgTx=CANMessage();
Artiom 0:bc74da1c502f 117 FIFO_occupation=FIFO_ecriture-FIFO_lecture;
Artiom 0:bc74da1c502f 118 if(FIFO_occupation<0)
Artiom 0:bc74da1c502f 119 FIFO_occupation=FIFO_occupation+SIZE_FIFO;
Artiom 0:bc74da1c502f 120 if(FIFO_max_occupation<FIFO_occupation)
Artiom 0:bc74da1c502f 121 FIFO_max_occupation=FIFO_occupation;
Artiom 0:bc74da1c502f 122 if(FIFO_occupation!=0) {
Artiom 0:bc74da1c502f 123 int identifiant=msgRxBuffer[FIFO_lecture].id;
Artiom 0:bc74da1c502f 124
Artiom 0:bc74da1c502f 125 switch(identifiant) {
Artiom 0:bc74da1c502f 126
Artiom 0:bc74da1c502f 127 case GLOBAL_GAME_END:
Artiom 0:bc74da1c502f 128 EtatGameEnd = 1;
Artiom 0:bc74da1c502f 129 break;
Artiom 0:bc74da1c502f 130
Artiom 0:bc74da1c502f 131 case DATA_TELEMETRE: //Lit le telemetre N°X suivant la data dans le CAN
Artiom 0:bc74da1c502f 132 char numero_telemetre=msgRxBuffer[FIFO_lecture].data[0];
Artiom 0:bc74da1c502f 133 short distance=lecture_telemetre(numero_telemetre);
Artiom 0:bc74da1c502f 134
Artiom 0:bc74da1c502f 135
Artiom 0:bc74da1c502f 136 msgTx.id=RECEPTION_DATA; // tx Valeur Telemetre1
Artiom 0:bc74da1c502f 137 msgTx.len=2;
Artiom 0:bc74da1c502f 138 msgTx.format=CANStandard;
Artiom 0:bc74da1c502f 139 msgTx.type=CANData;
Artiom 0:bc74da1c502f 140 // Rayon sur 2 octets
Artiom 0:bc74da1c502f 141 msgTx.data[0]=(unsigned char)distance;
Artiom 0:bc74da1c502f 142 msgTx.data[1]=(unsigned char)(distance>>8);
Artiom 0:bc74da1c502f 143
Artiom 0:bc74da1c502f 144 can.write(msgTx);
Artiom 0:bc74da1c502f 145 SendAck(ACKNOWLEDGE_TELEMETRE,RECEPTION_DATA);
Artiom 0:bc74da1c502f 146 break;
Artiom 0:bc74da1c502f 147
Artiom 0:bc74da1c502f 148 case DATA_RECALAGE:
Artiom 0:bc74da1c502f 149 short distance1=lecture_telemetre(1);
Artiom 0:bc74da1c502f 150 short distance2=lecture_telemetre(2);
Artiom 0:bc74da1c502f 151 short distance3=lecture_telemetre(3);
Artiom 0:bc74da1c502f 152 short distance4=lecture_telemetre(4);
Artiom 0:bc74da1c502f 153
Artiom 0:bc74da1c502f 154 msgTx.id=RECEPTION_RECALAGE; // tx Valeur Telemetre1
Artiom 0:bc74da1c502f 155 msgTx.len=8;
Artiom 0:bc74da1c502f 156 msgTx.format=CANStandard;
Artiom 0:bc74da1c502f 157 msgTx.type=CANData;
Artiom 0:bc74da1c502f 158 // Rayon sur 2 octets
Artiom 0:bc74da1c502f 159 msgTx.data[0]=(unsigned char)distance1;
Artiom 0:bc74da1c502f 160 msgTx.data[1]=(unsigned char)(distance1>>8);
Artiom 0:bc74da1c502f 161 msgTx.data[2]=(unsigned char)distance2;
Artiom 0:bc74da1c502f 162 msgTx.data[3]=(unsigned char)(distance2>>8);
Artiom 0:bc74da1c502f 163 msgTx.data[4]=(unsigned char)distance3;
Artiom 0:bc74da1c502f 164 msgTx.data[5]=(unsigned char)(distance3>>8);
Artiom 0:bc74da1c502f 165 msgTx.data[6]=(unsigned char)distance4;
Artiom 0:bc74da1c502f 166 msgTx.data[7]=(unsigned char)(distance4>>8);
Artiom 0:bc74da1c502f 167 can.write(msgTx);
Artiom 0:bc74da1c502f 168 SendAck(ACKNOWLEDGE_TELEMETRE,RECEPTION_RECALAGE);
Artiom 0:bc74da1c502f 169 break;
kyxstark 23:93a427b242ce 170
kyxstark 23:93a427b242ce 171 case PRESENTOIR_AVANT:
kyxstark 23:93a427b242ce 172 fpresentoir_avant=1;
kyxstark 23:93a427b242ce 173 break;
kyxstark 23:93a427b242ce 174
kyxstark 23:93a427b242ce 175 case BALANCE_AVANT:
kyxstark 23:93a427b242ce 176 fbalance_avant=1;
kyxstark 23:93a427b242ce 177 break;
kyxstark 23:93a427b242ce 178
kyxstark 23:93a427b242ce 179 case ACCELERATEUR_AVANT:
kyxstark 23:93a427b242ce 180 faccelerateur_avant=1;
kyxstark 23:93a427b242ce 181 break;
kyxstark 23:93a427b242ce 182
kyxstark 23:93a427b242ce 183 case GOLDENIUM_AVANT:
kyxstark 23:93a427b242ce 184 fgoldenium_avant=1;
kyxstark 23:93a427b242ce 185 break;
kyxstark 23:93a427b242ce 186
kyxstark 23:93a427b242ce 187 case VENTOUSE_AV_CENTRE_BALANCE:
kyxstark 23:93a427b242ce 188 SendAck(ACKNOWLEDGE_HERKULEX, ACK_ACTION);
kyxstark 23:93a427b242ce 189 goldenium_avant();
kyxstark 23:93a427b242ce 190 verification();
kyxstark 23:93a427b242ce 191 SendAck(ACKNOWLEDGE_HERKULEX, ACK_FIN_ACTION);
kyxstark 23:93a427b242ce 192 break;
kyxstark 23:93a427b242ce 193
kyxstark 23:93a427b242ce 194 case AVANT_RELACHE:
kyxstark 23:93a427b242ce 195 favant_relache=1;
kyxstark 23:93a427b242ce 196 break;
kyxstark 23:93a427b242ce 197
kyxstark 23:93a427b242ce 198 //--------------------------------------------------------------------------ACK carte pompe----------------------------------------------
kyxstark 23:93a427b242ce 199
kyxstark 23:93a427b242ce 200
kyxstark 23:93a427b242ce 201 case HACHEUR_STATUT_VENTOUSES:
kyxstark 23:93a427b242ce 202 status_pompe = msgRxBuffer[FIFO_lecture].data[1];
kyxstark 23:93a427b242ce 203 //can.write(CANMessage(0x529, &status_pompe,1));
kyxstark 23:93a427b242ce 204 break;
kyxstark 23:93a427b242ce 205
kyxstark 23:93a427b242ce 206 case HACHEUR_GET_ATOM_ACK:
kyxstark 23:93a427b242ce 207 status_pompe |= (0x01 << msgRxBuffer[FIFO_lecture].data[0]);
kyxstark 23:93a427b242ce 208 //can.write(CANMessage(0x529, &status_pompe,1));
kyxstark 23:93a427b242ce 209 break;
kyxstark 23:93a427b242ce 210
kyxstark 23:93a427b242ce 211 case HACHEUR_RELEASE_ATOM_ACK :
kyxstark 23:93a427b242ce 212 status_pompe &= ~(0x01 << msgRxBuffer[FIFO_lecture].data[0]);
kyxstark 23:93a427b242ce 213 break;
kyxstark 23:93a427b242ce 214
kyxstark 23:93a427b242ce 215 //-------------------------------------------------------------------------------------------------------------------------------------------
kyxstark 23:93a427b242ce 216
kyxstark 23:93a427b242ce 217
Artiom 0:bc74da1c502f 218
Artiom 0:bc74da1c502f 219 #ifdef ROBOT_SMALL
Artiom 4:4a79942713fa 220 //-------------------------------------------------------------------------Actions petit robot----------------------------------------------
Artiom 2:9e63099cca99 221 case GABARIT_PETIT_ROBOT:
Artiom 2:9e63099cca99 222 SendAck(ACKNOWLEDGE_HERKULEX, ACK_ACTION);
Artiom 2:9e63099cca99 223 gabarit_petit_robot();
Artiom 2:9e63099cca99 224 SendAck(ACKNOWLEDGE_HERKULEX, ACK_FIN_ACTION);
Artiom 0:bc74da1c502f 225 break;
Artiom 0:bc74da1c502f 226
Artiom 0:bc74da1c502f 227 case PRESENTOIR_ARRIERE:
Artiom 5:6e198cdd99ad 228 fpresentoir_arriere=1;
Artiom 0:bc74da1c502f 229 break;
Artiom 0:bc74da1c502f 230
Artiom 0:bc74da1c502f 231 case BALANCE_ARRIERE:
Artiom 12:191486ba5118 232 fbalance_arriere=1;
Artiom 2:9e63099cca99 233 break;
Artiom 2:9e63099cca99 234
Artiom 2:9e63099cca99 235 case ACCELERATEUR_ARRIERE:
Artiom 14:b1abd2f6df75 236 faccelerateur_arriere=1;
Artiom 2:9e63099cca99 237 break;
Artiom 6:45f9cf44718a 238
Artiom 2:9e63099cca99 239 case GOLDENIUM_ARRIERE:
Artiom 6:45f9cf44718a 240 fgoldenium_arriere=1;
Artiom 2:9e63099cca99 241 break;
Artiom 6:45f9cf44718a 242
Artiom 2:9e63099cca99 243 case SOL_AVANT:
Artiom 6:45f9cf44718a 244 fsol_avant=1;
Artiom 2:9e63099cca99 245 break;
Artiom 2:9e63099cca99 246
Artiom 2:9e63099cca99 247 case SOL_ARRIERE:
Artiom 6:45f9cf44718a 248 fsol_arriere=1;
Artiom 2:9e63099cca99 249 break;
Artiom 2:9e63099cca99 250
Artiom 2:9e63099cca99 251 case SOL_AVANT_RELACHE:
Artiom 7:553f3f1c2c53 252 fsol_avant_relache=1;
Artiom 2:9e63099cca99 253 break;
Artiom 2:9e63099cca99 254
Artiom 2:9e63099cca99 255 case SOL_ARRIERE_RELACHE:
Artiom 7:553f3f1c2c53 256 fsol_arriere_relache=1;
Artiom 0:bc74da1c502f 257 break;
Artiom 12:191486ba5118 258
Artiom 12:191486ba5118 259 case ARRIERE_RELACHE:
Artiom 12:191486ba5118 260 farriere_relache=1;
Artiom 12:191486ba5118 261 break;
Artiom 14:b1abd2f6df75 262 case RECROQUEVILLER:
Artiom 14:b1abd2f6df75 263 SendAck(ACKNOWLEDGE_HERKULEX, ACK_ACTION);
Artiom 14:b1abd2f6df75 264 recroqueviller_avant();
Artiom 14:b1abd2f6df75 265 recroqueviller_arriere();
Artiom 14:b1abd2f6df75 266 verification();
Artiom 14:b1abd2f6df75 267 SendAck(ACKNOWLEDGE_HERKULEX, ACK_FIN_ACTION);
Artiom 14:b1abd2f6df75 268 break;
Artiom 13:9e19048eb065 269
Artiom 20:42f8ec726ac8 270 case VENTOUSE_AR_CENTRE_BALANCE:
Artiom 20:42f8ec726ac8 271 SendAck(ACKNOWLEDGE_HERKULEX, ACK_ACTION);
Artiom 20:42f8ec726ac8 272 goldenium_arriere();
Artiom 20:42f8ec726ac8 273 positionControl(AR_poigne_D, 200,1,BLED_ON,3);//actionneur
Artiom 20:42f8ec726ac8 274 verification();
Artiom 20:42f8ec726ac8 275 SendAck(ACKNOWLEDGE_HERKULEX, ACK_FIN_ACTION);
Artiom 20:42f8ec726ac8 276 break;
Artiom 13:9e19048eb065 277
Artiom 0:bc74da1c502f 278
Artiom 0:bc74da1c502f 279 #endif
kyxstark 23:93a427b242ce 280
Artiom 0:bc74da1c502f 281 #ifdef ROBOT_BIG
kyxstark 21:edf6d03fdb20 282 case ASCENSEUR:
kyxstark 22:9e92a2b941ba 283 flag_ascenseur = msgRxBuffer[FIFO_lecture].data[0];
Artiom 0:bc74da1c502f 284 break;
Artiom 0:bc74da1c502f 285
Artiom 0:bc74da1c502f 286 #endif
Artiom 0:bc74da1c502f 287 }
Artiom 0:bc74da1c502f 288 FIFO_lecture=(FIFO_lecture+1)%SIZE_FIFO;
Artiom 0:bc74da1c502f 289
Artiom 0:bc74da1c502f 290 }
Artiom 4:4a79942713fa 291
Artiom 4:4a79942713fa 292
Artiom 4:4a79942713fa 293 }
Artiom 4:4a79942713fa 294
Artiom 4:4a79942713fa 295
Artiom 4:4a79942713fa 296
Artiom 11:6c11c081c855 297