code de la carte IHM avant les bugs et avant le travail effectué avec Melchior
Dependencies: mbed SerialHalfDuplex SDFileSystem liaison_Bluetooth ident_crac DISCO-F469NI_portrait
Diff: Compteur_points/Compteur.cpp
- Revision:
- 35:2a745eeb7922
- Child:
- 36:c37dbe2be916
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Compteur_points/Compteur.cpp Fri May 21 16:19:18 2021 +0000 @@ -0,0 +1,160 @@ +#include "global.h" + +#define M_PI 3.14159265358979323846 +#define DEMI_GOBELET 30 + +int Ventouse_coord[6][2]={{145,-75},{145,0},{145,75},{-145,75},{-145,0},{-145,-75}}; +int Bras_coord[6][2]; +int Manche_air_coord[6][2]; + +int score_final=0; +int score_ventouse=0,gobelet_vert=0,gobelet_rouge=0,gobelet_port=0; +int score_manche=0,manche_releve=0; +int score_bon_port=0; +int score_phare=0; +int score_pavillon=0; + +int etat_groupe, gobelet_en_place=0, old_gobelet=0; +unsigned char num_groupe; + +CompteurGameEtat VentEtat[6] = {ETAT_ATTENDRE, ETAT_ATTENDRE, ETAT_ATTENDRE, ETAT_ATTENDRE, ETAT_ATTENDRE, ETAT_ATTENDRE}; +int deja_compter[6] = {0, 0, 0, 0, 0, 0}; + +/********************************************************************************************************************/ +/* FUNCTION NAME: gestion_Message_CAN */ +/* DESCRIPTION : Récupère message CAN et appelle la fonction correspondante à l'action rapportant des points */ +/********************************************************************************************************************/ +void gestion_Message_CAN(void) +{ + int identifiant = msgRxBuffer[FIFO_ecriture].id; + + switch(identifiant) + { + case 0x220: + for(int num_vent=0;num_vent<6;num_vent++) + { + switch(VentEtat[num_vent]) + { + case ETAT_ATTENDRE: + etat_groupe = msgRxBuffer[FIFO_ecriture].data[num_vent]; + if(etat_groupe == 5) //Pompe et capteur + { + VentEtat[num_vent] = ETAT_RECUP; + } + break; + + case ETAT_RECUP: + etat_groupe = msgRxBuffer[FIFO_ecriture].data[num_vent]; + if(etat_groupe == 2) //Electrovane + { + VentEtat[num_vent] = ETAT_COMPTER; + } + break; + + case ETAT_COMPTER: + verif_position_ventouse(num_vent); + compteur_de_points(); + VentEtat[num_vent] = ETAT_ATTENDRE; + break; + } + } + break; + + case BRAS_RE: + num_groupe = msgRxBuffer[FIFO_ecriture].data[0]; + verif_position_bras(num_groupe); + compteur_de_points(); + break; + + case AUTOMATE_MANCHE_BAS: + num_groupe = msgRxBuffer[FIFO_ecriture].data[0]; + verif_position_manche(num_groupe); + compteur_de_points(); + break; + } +} + +void compteur_de_points(void) +{ + int paire_ventouse = abs(gobelet_vert - gobelet_rouge); + + //Points gobelets + score_ventouse = (gobelet_vert*2 + gobelet_rouge*2)*2 - (paire_ventouse)*2 + gobelet_port; + + //Points manche à air + if(manche_releve == 1) score_manche = 5; + else if(manche_releve == 2) score_manche = 15; + + //Points phare + + //Points pavillons + + //Points d'arrivée à bon port + + //Points totaux + score_final = score_ventouse; //+ score_manche + score_phare + score_pavillon + score_bon_port; +} + + + + +/********************************************************************************************************************/ +/* FUNCTION NAME: verif_position_ventouse */ +/* DESCRIPTION : Vérifie si les gobelets posés par les ventouses sont dans un chenal/un port et augmente le score */ +/********************************************************************************************************************/ +void verif_position_ventouse(int num_groupe) +{ + int x_offset = Ventouse_coord[num_groupe][0]*cos(theta_robot*M_PI/1800) - Ventouse_coord[num_groupe][1]*sin(theta_robot*M_PI*1800); + int y_offset = Ventouse_coord[num_groupe][0]*sin(theta_robot*M_PI/1800) + Ventouse_coord[num_groupe][1]*cos(theta_robot*M_PI*1800); + + //chenal vert port départ bleu + if((x_robot+x_offset <= 530+DEMI_GOBELET)&&(x_robot+x_offset >= 500-DEMI_GOBELET) + && (y_robot+y_offset <= 400+DEMI_GOBELET)&&(y_robot+y_offset >= 0)) gobelet_vert++; + //chenal rouge port départ bleu + else if((x_robot+x_offset <= 1100+DEMI_GOBELET)&&(x_robot+x_offset >= 1070-DEMI_GOBELET) + && (y_robot+y_offset <= 400+DEMI_GOBELET)&&(y_robot+y_offset >= 0)) gobelet_rouge++; + //port départ bleu + else if((x_robot+x_offset > 530+DEMI_GOBELET)&&(x_robot+x_offset < 1070-DEMI_GOBELET) + && (y_robot+y_offset <= 400+DEMI_GOBELET)&&(y_robot+y_offset >= 0)) gobelet_port++; + + //chenal vert port ext bleu + else if((x_robot+x_offset >= 1700-DEMI_GOBELET)&&(x_robot+x_offset <= 2000+DEMI_GOBELET) + && (y_robot+y_offset >= 1650-DEMI_GOBELET)&&(y_robot+y_offset <= 1750+DEMI_GOBELET)) gobelet_vert++; + //chenal rouge port ext bleu + else if((x_robot+x_offset >= 1700-DEMI_GOBELET)&&(x_robot+x_offset <= 2000+DEMI_GOBELET) + && (y_robot+y_offset >= 1850-DEMI_GOBELET)&&(y_robot+y_offset <= 1950+DEMI_GOBELET)) gobelet_rouge++; + //port ext bleu + else if((x_robot+x_offset >= 1700-DEMI_GOBELET)&&(x_robot+x_offset <= 2000+DEMI_GOBELET) + && (y_robot+y_offset > 1750+DEMI_GOBELET)&&(y_robot+y_offset < 1850-DEMI_GOBELET)) gobelet_port++; + + + //chenal vert port départ jaune + else if((x_robot+x_offset <= 530+DEMI_GOBELET)&&(x_robot+x_offset >= 500-DEMI_GOBELET) + && (y_robot+y_offset <= 3000+DEMI_GOBELET)&&(y_robot+y_offset >= 2600-DEMI_GOBELET)) gobelet_vert++; + //chenal rouge port départ jaune + else if((x_robot+x_offset <= 1100+DEMI_GOBELET)&&(x_robot+x_offset >= 1070-DEMI_GOBELET) + && (y_robot+y_offset <= 3000+DEMI_GOBELET)&&(y_robot+y_offset >= 2600-DEMI_GOBELET)) gobelet_rouge++; + //port départ jaune + else if((x_robot+x_offset > 530+DEMI_GOBELET)&&(x_robot+x_offset < 1070-DEMI_GOBELET) + && (y_robot+y_offset <= 3000+DEMI_GOBELET)&&(y_robot+y_offset >= 2600-DEMI_GOBELET)) gobelet_port++; + + //chenal vert port ext jaune + else if((x_robot+x_offset >= 1700-DEMI_GOBELET)&&(x_robot+x_offset <= 2000+DEMI_GOBELET) + && (y_robot+y_offset >= 1050-DEMI_GOBELET)&&(y_robot+y_offset <= 1150+DEMI_GOBELET)) gobelet_vert++; + //chenal rouge port ext jaune + else if((x_robot+x_offset >= 1700-DEMI_GOBELET)&&(x_robot+x_offset <= 2000+DEMI_GOBELET) + && (y_robot+y_offset >= 1250-DEMI_GOBELET)&&(y_robot+y_offset <= 1350+DEMI_GOBELET)) gobelet_rouge++; + //port ext jaune + else if((x_robot+x_offset >= 1700-DEMI_GOBELET)&&(x_robot+x_offset <= 2000+DEMI_GOBELET) + && (y_robot+y_offset > 1150+DEMI_GOBELET)&&(y_robot+y_offset < 1250-DEMI_GOBELET)) gobelet_port++; +} + +void verif_position_bras(int num_groupe) +{ + +} + +void verif_position_manche(int num_groupe) +{ + +} \ No newline at end of file