#include "system_dumby.h" #include #include #include "cmde_usart.h" #include "Battery.h" #include "motor.h" #include #include "gestionCmde.h" #include /* * Ce fichier gére les commandes reçu dans la variable receiptString * Les données envoyé le seront via la variable sendString */ volatile unsigned char checksum; volatile int length; uint16_t j; /* inclusionCheckSum: * incusionCheckSum(void) inclu le checksum (ou exclusif sur chaque octet) * à la fin de la chaine de caractére sendString */ void inclusionCheckSum(void) { checksum=0; for(j=0;sendString[j]!='\r';j++) checksum^=sendString[j]; if(checksum=='\r') checksum++; sendString[j]=checksum; sendString[j+1]='\r'; } /* verifyCheckSum : * Vérifie le dernier carctére de receiptString sensé être le checksum. * Si celui-ci est bon, ll retournera 0 et supprimera le checksum du tableau receiptString * sinon il retournera 1 sans faire de modification. */ // verifie le checksum. Si le checksum est verifié on l'enléve de la chaine de caractére pour facilité le traitement. char verifyCheckSum(void) { uint16_t j,lenght; checksum=0; lenght = strlen(receiptString); for(j=0;j 0) mod = FORWARD; else mod = BRAKE; laps = laps *2; regulationMoteur(mod,mod,(unsigned)laps,(unsigned)laps,COMMONSPEED, COMMONSPEED); strcpy(sendString,OK_ANS); } else strcpy(sendString,ERR_ANS); } } /* actionTurn: * Fait tourner les 2 roues dans un sens opposé de façon à faire tourner le robot de X degrés. * Attention : Mauvais précision sur les petite valeur < 30 degrés. */ void actionTurn(void) { if(Dumber.StateSystem==RUN||Dumber.StateSystem==LOW) { int degree; uint16_t testReception = sscanf(receiptString, "T=%i\r",°ree); tourPositionG=0; tourPositionD=0; if(testReception==1) { degree = degree *1.40; Dumber.cpt_inactivity=0; Dumber.busyState=TRUE; strcpy(sendString,OK_ANS); if(degree <0) { degree = degree*-1; if(degree < 30) regulationMoteur(FORWARD,REVERSE,(unsigned)degree,(unsigned)degree,LOWSPEED, LOWSPEED); else regulationMoteur(FORWARD,REVERSE,(unsigned)degree,(unsigned)degree,COMMONSPEED, COMMONSPEED); } else { if(degree < 30) regulationMoteur(REVERSE,FORWARD,(unsigned)degree,(unsigned)degree,LOWSPEED, LOWSPEED); else regulationMoteur(REVERSE,FORWARD,(unsigned)degree,(unsigned)degree,COMMONSPEED, COMMONSPEED); } } else strcpy(sendString,ERR_ANS); } } /* actionBatteryVoltage: * Retourne l'état de la batterie. 0 - 1 - 2 */ void actionBatteryVoltage(void) { char battery[2]; battery[0]=Dumber.stateBattery + '0'; battery[1]='\r'; strcpy(sendString,battery); } /* actionDebug: * retourne les valeurs positions à atteindre et la position atteinte; */ void actionDebug(void) { sprintf(sendString,"Th-D=%u G=%u\r",tourPositionD,tourPositionG); sendDataUSART(); for(j=0;j<200;j++); sprintf(sendString,"Re-D=%u G=%u\r",G_lapsRight,G_lapsLeft); sendDataUSART(); }