Carte esclave gros robot
Dependencies: mbed Herkulex_Library_2019 ident_crac actions_Pr
Diff: main.cpp
- Revision:
- 45:11614fc23e53
- Parent:
- 44:381ecf63e6ab
- Child:
- 46:67c0d8d971b0
--- a/main.cpp Sun May 26 10:51:35 2019 +0000 +++ b/main.cpp Fri May 31 20:53:19 2019 +0000 @@ -11,13 +11,15 @@ CANMessage msgRxBuffer[SIZE_FIFO]; 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 -unsigned char EtatGameEnd=0; - +unsigned char EtatGameEnd=0, EtatGameStart = 0, EtatGameRecalage = 0; +unsigned short x_goldenium,y_goldenium; +unsigned short ackFinAction = 0; char cote=0; unsigned short distance_recalage,distance_revenir; unsigned short distance_goldenium; + void canProcessRx(void); @@ -39,6 +41,7 @@ int main() { + can.attach(&canRx_ISR); // création de l'interrupt attachée à la réception sur le CAN servo_interrupt_en(); //permettre les interuptions @@ -61,7 +64,7 @@ gabarit_robot(); - pc.printf("\nLAUNCHED"); + pc.printf("\nLAUNCHED\n\n"); while(1) { /*setTorque(doigt,TORQUE_FREE,2); pc.printf("pos : %d\n", getPos(doigt,2)); @@ -94,24 +97,41 @@ #endif #ifdef ROBOT_BIG - automate_ventouse_presentoir_avant(); - automate_ventouse_goldenium_avant(); - automate_ventouse_relache_avant(); - automate_ventouse_accelerateur_avant(); - - fifo_couleur(); - ascenseur(); - if(cote) { - convoyeur_gauche_violet(); - convoyeur_droit_violet(); - } else { - convoyeur_gauche_jaune(); //ok - convoyeur_droit_jaune(); //ok + if(EtatGameStart){ + automate_ventouse_presentoir_avant(); + automate_ventouse_goldenium_avant(); + automate_ventouse_relache_avant(); + automate_ventouse_accelerateur_avant(); + + fifo_couleur(); + ascenseur(); + } + + if(EtatGameRecalage || EtatGameStart){ + if(cote) { + convoyeur_gauche_violet(); + convoyeur_droit_violet(); + } else { + convoyeur_gauche_jaune(); //ok + convoyeur_droit_jaune(); //ok + } } #endif if(EtatGameEnd==1) { + gabarit_robot(); + SendCharCan(HACHEUR_ID_COUROIES,0); + + setTorque(roue_G, TORQUE_FREE,1); + setTorque(stockage_G, TORQUE_FREE,1); + setTorque(doigt, TORQUE_FREE,2); + setTorque(AV_EP_C, TORQUE_FREE,2); + setTorque(AV_poigne_C, TORQUE_FREE,2); + setTorque(stockage_D, TORQUE_FREE,3); + setTorque(roue_D, TORQUE_FREE,3); + + while(1); } @@ -135,8 +155,17 @@ int identifiant=msgRxBuffer[FIFO_lecture].id; switch(identifiant) { - - + + case GLOBAL_START: + EtatGameStart = 1; + break; + case RECALAGE_START : + EtatGameRecalage = 1; + break; + + case INSTRUCTION_END_MOTEUR: + ackFinAction = msgRxBuffer[FIFO_lecture].data[0]|((unsigned short)(msgRxBuffer[FIFO_lecture].data[1])<<8); + break; case CHOICE_COLOR: cote = msgRxBuffer[FIFO_lecture].data[0]; /*SendMsgCan(0x788, (unsigned char*)&cote, 1); @@ -227,7 +256,7 @@ case PRESENTOIR_AVANT: fpresentoir_avant=1; - + break; case GABARIT_ROBOT: @@ -240,6 +269,19 @@ favant_relache=1; break; + case GOLDENIUM_AVANT: + fgoldenium_avant=1; + x_goldenium=msgRxBuffer[FIFO_lecture].data[0]|((unsigned short)(msgRxBuffer[FIFO_lecture].data[1])<<8); + y_goldenium=msgRxBuffer[FIFO_lecture].data[2]|((unsigned short)(msgRxBuffer[FIFO_lecture].data[3])<<8); + break; + + case VENTOUSE_AV_CENTRE_BALANCE: + SendAck(ACKNOWLEDGE_HERKULEX, ACK_ACTION); + goldenium_avant(); + verification(); + SendAck(ACKNOWLEDGE_HERKULEX, ACK_FIN_ACTION); + break; + #ifdef ROBOT_SMALL @@ -270,11 +312,6 @@ faccelerateur_arriere=1; break; - case GOLDENIUM_AVANT: - fgoldenium_avant=1; - distance_goldenium=msgRxBuffer[FIFO_lecture].data[0]|((unsigned short)(msgRxBuffer[FIFO_lecture].data[1])<<8); - break; - case GOLDENIUM_ARRIERE: fgoldenium_arriere=1; break; @@ -339,15 +376,48 @@ #endif #ifdef ROBOT_BIG + case VIDER_CONVOYEUR : + if(msgRxBuffer[FIFO_lecture].data[0]) { + flag_vide_vert_rouge = 1; + } else { + flag_vide_bleu = 1; + } + break; case ASCENSEUR: - flag_ascenseur = msgRxBuffer[FIFO_lecture].data[0]; + switch(msgRxBuffer[FIFO_lecture].data[0]) + { + case 0: + flag_ascenseur_force_on = 0; + flag_ascenseur_force_off = 0; + break; + case 1: + flag_ascenseur_force_on = 1; + flag_ascenseur_force_off = 0; + break; + case 2 : + flag_ascenseur_force_on = 0; + flag_ascenseur_force_off = 1; + break; + } + if(flag_ascenseur_force_on) { + SendCharCan(HACHEUR_ID_COUROIES,1); + } + else if(flag_ascenseur_force_off){ + SendCharCan(HACHEUR_ID_COUROIES,0); + } break; case HACHEUR_ETAT_CONTACTS : status_contact = msgRxBuffer[FIFO_lecture].data[0]; break; + + case RATEAU : + SendAck(ACKNOWLEDGE_HERKULEX, ACK_ACTION); + rateau(msgRxBuffer[FIFO_lecture].data[0]); + SendAck(ACKNOWLEDGE_HERKULEX, ACK_FIN_ACTION); + break; #endif }