Programme carte strategie (disco)
Dependencies: mbed SerialHalfDuplex SDFileSystem DISCO-F469NI_portrait liaison_Bluetooth ident_crac
Robots/Strategie_small.cpp
- Committer:
- Sitkah
- Date:
- 2018-04-06
- Revision:
- 29:41e02746041d
- Parent:
- 28:acd18776ed2d
- Child:
- 30:a1e37af4bbde
File content as of revision 29:41e02746041d:
#include "global.h" #ifdef ROBOT_SMALL unsigned char isStopEnable = 1;//Permet de savoir si il faut autoriser le stop via les balises //unsigned short telemetreDistance; /****************************************************************************************/ /* FUNCTION NAME: doFunnyAction */ /* DESCRIPTION : Permet de faire la funny action en fin de partie */ /****************************************************************************************/ void doFunnyAction(void) { } //L'angle est entre 0 et 1023 void XL320_setGoal(unsigned char id, unsigned short angle); void XL320_setGoal(unsigned char id, unsigned short angle) { CANMessage msgTx=CANMessage(); msgTx.id=SERVO_XL320; msgTx.len=3; msgTx.format=CANStandard; msgTx.type=CANData; msgTx.data[0]=(unsigned char)id; // from sur 2 octets msgTx.data[1]=(unsigned char)angle; msgTx.data[2]=(unsigned char)(angle>>8); can1.write(msgTx); } /****************************************************************************************/ /* FUNCTION NAME: doAction */ /* DESCRIPTION : Effectuer une action specifique */ /****************************************************************************************/ unsigned char doAction(unsigned char id, unsigned short speed, short angle) { int retour = 1; switch(id) { case 100: // preparation prise bras central AX12_automate(AX12_PINCE_CENTRALE_PREPARATION_PRISE); break; case 101:// stockage haut bras central AX12_automate(AX12_PINCE_CENTRALE_STOCKAGE_HAUT); break; case 102:// stockage bas bras central AX12_automate(AX12_PINCE_CENTRALE_STOCKAGE_BAS); break; case 103:// ouvrir la main du bras cental AX12_automate(AX12_PINCE_CENTRALE_DEPOSER); break; case 104:// preparation de depot du module bas du bras central AX12_automate(AX12_PINCE_CENTRALE_PREPARATION_DEPOT); break; case 105:// preparation de depot du module haut du bras central AX12_automate(AX12_PINCE_CENTRALE_DEPOT_HAUT); AX12_automate(AX12_PINCE_CENTRALE_PREPARATION_DEPOT); break; case 106:// on rentre la pince dans le robot AX12_automate(AX12_PINCE_CENTRALE_POSITION_INITIALE); break; case 107: // on ferme la pince du robot AX12_automate(AX12_PINCE_CENTRALE_PRISE_MODULE); break; case 110:// ouvrir une porte avant if(InversStrat == 1) {//Si c'est inversé, On utilise le bras coté droit if(speed == 1) speed = 0; else speed = 1; } if (speed == 1){ AX12_automate(AX12_DROIT_CROC_OUVERT); }else{ AX12_automate(AX12_GAUCHE_CROC_OUVERT); } break; case 111:// securiser un module avec une porte avant if(InversStrat == 1) {//Si c'est inversé, On utilise le bras coté droit if(speed == 1) speed = 0; else speed = 1; } if (speed == 1){ AX12_automate(AX12_DROIT_CROC_FERME); }else{ AX12_automate(AX12_GAUCHE_CROC_FERME); } break; case 112:// ranger le porte avant dans le robot if(InversStrat == 1) {//Si c'est inversé, On utilise le bras coté droit if(speed == 1) speed = 0; else speed = 1; } if (speed == 1){ AX12_automate(AX12_DROIT_CROC_INITIALE); }else{ AX12_automate(AX12_GAUCHE_CROC_INITIALE); } break; case 120:// poser une main tourneuse if(InversStrat == 1) {//Si c'est inversé, On utilise le bras coté droit if(speed == 2) speed = 1; else speed = 2; if(angle == 1) angle = 0; else angle = 1; } if (speed == 1){ AX12_automate(AX12_TOURNANTE_DROIT_PREPARATION); }else{ AX12_automate(AX12_TOURNANTE_GAUCHE_PREPARATION); } break; case 121:// relever une main tourneuse if(InversStrat == 1) {//Si c'est inversé, On utilise le bras coté droit if(speed == 2) speed = 1; else speed = 2; if(angle == 1) angle = 0; else angle = 1; } if (speed == 1){ AX12_automate(AX12_TOURNANTE_DROIT_POSITION_INITIALE); }else{ AX12_automate(AX12_TOURNANTE_GAUCHE_POSITION_INITIALE); } break; case 122:// tourner un module if(InversStrat == 1) {//Si c'est inversé if(speed == 2) speed = 1; else speed = 2; if(angle == 1) angle = 0; else angle = 1; } if (speed == 1){ AX12_automate(AX12_TOURNANTE_DROIT_MODULE); Tourner_module_droit(); }else{ AX12_automate(AX12_TOURNANTE_GAUCHE_MODULE); Tourner_module_gauche(); } break; case 200 : telemetreDistance = dataTelemetre(); wait_ms(1); telemetreDistance = dataTelemetre(); telemetreDistance = telemetreDistance - 170; break; case 201 : SendRawId(0x96); retour = 2; break; case 10://Désactiver le stop isStopEnable = 0; break; case 11://Activer le stop isStopEnable = 1; break; case 20://Désactiver l'asservissement setAsservissementEtat(0); break; case 21://Activer l'asservissement setAsservissementEtat(1); break; case 22://Changer la vitesse du robot SendSpeed(speed,(unsigned short)angle); wait_us(200); waitingAckFrom = 0; waitingAckID = 0; break; case 19: // CHANGER LA VITESSE + DECELERATION SendSpeedDecel(speed,(unsigned short) angle); wait_us(200); waitingAckFrom = 0; waitingAckID =0; break; case 30://Action tempo wait_ms(speed); break; default: retour = 0;//L'action n'existe pas, il faut utiliser le CAN } return retour;//L'action est spécifique. } /****************************************************************************************/ /* FUNCTION NAME: initRobot */ /* DESCRIPTION : initialiser le robot */ /****************************************************************************************/ void initRobot(void) { /** On enregistre les id des AX12 présent sur la carte **/ /*AX12_register(1,AX12_SERIAL1,0x0FF); AX12_register(2,AX12_SERIAL1); AX12_register(18,AX12_SERIAL1); AX12_register(4,AX12_SERIAL2); AX12_register(16,AX12_SERIAL2); AX12_register(17,AX12_SERIAL2,0x0FF);*/ //runRobotTest(); /* AX12_setGoal(AX12_ID_BRAS_BASE_INV,278,0x0FF); AX12_setGoal(AX12_ID_BRAS_RELACHEUR_INV,160);//fermer le bras AX12_setGoal(AX12_ID_BRAS_BASE,278,0x0FF); AX12_setGoal(AX12_ID_BRAS_RELACHEUR,160);//fermer le bras AX12_processChange();*/ initialisation_AX12(); } /****************************************************************************************/ /* FUNCTION NAME: initRobotActionneur */ /* DESCRIPTION : Initialiser la position des actionneurs du robot */ /****************************************************************************************/ void initRobotActionneur(void) { moteurGauchePWM(0); moteurDroitPWM(0); AX12_automate(AX12_PINCE_CENTRALE_POSITION_INITIALE); AX12_automate(AX12_GAUCHE_CROC_INITIALE); AX12_automate(AX12_DROIT_CROC_INITIALE); AX12_automate(AX12_TOURNANTE_GAUCHE_POSITION_INITIALE); AX12_automate(AX12_TOURNANTE_DROIT_POSITION_INITIALE); } /****************************************************************************************/ /* FUNCTION NAME: runTest */ /* DESCRIPTION : tester l'ensemble des actionneurs du robot */ /****************************************************************************************/ void runRobotTest(void) { } /****************************************************************************************/ /* FUNCTION NAME: SelectStrategy */ /* DESCRIPTION : Charger le fichier de stratégie correspondante à un id */ /* RETURN : 0=> Erreur, 1=> OK si le fichier existe */ /****************************************************************************************/ int SelectStrategy(unsigned char id) { switch(id) { case 1: strcpy(cheminFileStart,"/sd/strat1.txt"); return FileExists(cheminFileStart); case 2: strcpy(cheminFileStart,"/sd/strat2.txt"); return FileExists(cheminFileStart); case 3: strcpy(cheminFileStart,"/sd/strat3.txt"); return FileExists(cheminFileStart); case 4: strcpy(cheminFileStart,"/sd/strat4.txt"); return FileExists(cheminFileStart); case 5: strcpy(cheminFileStart,"/sd/strat5.txt"); return FileExists(cheminFileStart); case 6: strcpy(cheminFileStart,"/sd/strat6.txt"); return FileExists(cheminFileStart); case 7: strcpy(cheminFileStart,"/sd/strat7.txt"); return FileExists(cheminFileStart); case 8: strcpy(cheminFileStart,"/sd/strat8.txt"); return FileExists(cheminFileStart); case 9: strcpy(cheminFileStart,"/sd/strat9.txt"); return FileExists(cheminFileStart); case 10: strcpy(cheminFileStart,"/sd/strat10.txt"); return FileExists(cheminFileStart); case 11: strcpy(cheminFileStart,"/sd/grand_8.txt"); return FileExists(cheminFileStart); case 0x10: strcpy(cheminFileStart,"/sd/demoBras.txt"); return FileExists(cheminFileStart); default: strcpy(cheminFileStart,"/sd/strat1.txt"); SendRawId(0x258); return 0; } } /****************************************************************************************/ /* FUNCTION NAME: needToStop */ /* DESCRIPTION : Savoir si il faut autoriser le stop du robot via balise */ /****************************************************************************************/ unsigned char needToStop(void) { return isStopEnable; } /****************************************************************************************/ /* FUNCTION NAME: doBeforeEndAction */ /* DESCRIPTION : Terminer les actions du robot 1s avant la fin du match */ /****************************************************************************************/ void doBeforeEndAction(void) { } #endif