Classes et code de la partie pompe du Robot 2021
Dependencies: mbed ident_crac
main.cpp
- Committer:
- goldmas
- Date:
- 2021-07-17
- Revision:
- 9:6869e3869638
- Parent:
- 8:ba95705cf7d4
File content as of revision 9:6869e3869638:
#include "bloc_8_pompe.h" //initialisations relatives au Bus CAN CAN bus_CAN(PB_8, PB_9, 1000000) ; CANMessage commande_carte ; CANMessage envoie ; int flag_reception_CAN = 0 ; Timer scoreTimer; void interruption_reception(void) ; void gestion_Message_CAN(void) ; void Envoi_msg_CAN(char donnee[6]); void initialisation_CAN(void) ; void ventouse_etat(void); void SendRawId (unsigned short id); //Fin de jeu char end_game = 0; bloc_8_pompe::bloc_8_pompe classe_pompe (PC_9, PA_8, PB_0, //bloc 1 PB_7, PA_10, PB_1, //bloc 2 PA_11, PA_15, PC_1, //bloc 3 PA_9, PB_6, PC_0, //bloc 4 PC_7, PC_8, PC_5, //bloc 5 PB_10, PB_2, PC_4, //bloc 6 PA_6, PA_5, PA_7, //bloc 7 PA_0, PA_1, PA_4); //bloc 8 int main() { bus_CAN.attach(&interruption_reception) ; static int old_Timer=0; initialisation_CAN() ; scoreTimer.start(); while(1) { //bus_CAN(envoie); if(flag_reception_CAN) { gestion_Message_CAN() ; } if(end_game) { for (int i=0 ; i<8 ; i++) { classe_pompe.stop_pompe(i); wait_ms(10) ; } } ventouse_etat(); //Appelle toutes les 100ms pour regarder l'état des pompes /* if((scoreTimer.read_ms()-old_Timer)>=100) { ventouse_etat(); old_Timer=scoreTimer.read_ms(); } */ //Envoi_msg_CAN(1); //envoie un msg pour tester la liaison can } } void interruption_reception(void) { if (bus_CAN.read(commande_carte)) flag_reception_CAN = 1 ; } void gestion_Message_CAN(void) { int identifiant = commande_carte.id ; char num_groupe = 1 ; char etat_groupe = 0 ; switch (identifiant) { case VENT_AT: num_groupe = commande_carte.data[0]; if(num_groupe<6) { if(num_groupe == 0) num_groupe = 3; else if (num_groupe == 1) num_groupe = 2; else if (num_groupe == 2) num_groupe = 1; else if (num_groupe == 3) num_groupe = 5; else if (num_groupe == 4) num_groupe = 6; else if (num_groupe == 5) num_groupe = 7; classe_pompe.aspirer(num_groupe); } else if(num_groupe>5) { switch(num_groupe) { case 10: classe_pompe.aspirer(2); classe_pompe.aspirer(3); break; case 20: classe_pompe.aspirer(1); classe_pompe.aspirer(3); break; case 21: classe_pompe.aspirer(2); classe_pompe.aspirer(1); break; case 210: classe_pompe.aspirer(3); classe_pompe.aspirer(2); classe_pompe.aspirer(1); break; case 43: classe_pompe.aspirer(5); classe_pompe.aspirer(6); break; case 53: classe_pompe.aspirer(5); classe_pompe.aspirer(7); break; case 54: classe_pompe.aspirer(7); classe_pompe.aspirer(6); break; case 66: classe_pompe.aspirer(7); classe_pompe.aspirer(6); classe_pompe.aspirer(5); break; } } break; case VENT_RE: num_groupe = commande_carte.data[0]; if(num_groupe<6) { if(num_groupe == 0) num_groupe = 3; else if (num_groupe == 1) num_groupe = 2; else if (num_groupe == 2) num_groupe = 1; else if (num_groupe == 3) num_groupe = 5; else if (num_groupe == 4) num_groupe = 6; else if (num_groupe == 5) num_groupe = 7; classe_pompe.relacher(num_groupe); } else if(num_groupe>5) { switch(num_groupe) { case 10: classe_pompe.relacher(2); classe_pompe.relacher(3); break; case 20: classe_pompe.relacher(1); classe_pompe.relacher(3); break; case 21: classe_pompe.relacher(2); classe_pompe.relacher(1); break; case 210: classe_pompe.relacher(3); classe_pompe.relacher(2); classe_pompe.relacher(1); break; case 43: classe_pompe.relacher(5); classe_pompe.relacher(6); break; case 53: classe_pompe.relacher(7); classe_pompe.relacher(5); break; case 54: classe_pompe.relacher(7); classe_pompe.relacher(6); break; case 66: classe_pompe.relacher(7); classe_pompe.relacher(6); classe_pompe.relacher(5); break; } } break; case VENT_ETAT: num_groupe = commande_carte.data[0]; if(num_groupe<6) { if(num_groupe == 0) num_groupe = 3; else if (num_groupe == 1) num_groupe = 2; else if (num_groupe == 2) num_groupe = 1; else if (num_groupe == 3) num_groupe = 5; else if (num_groupe == 4) num_groupe = 6; else if (num_groupe == 5) num_groupe = 7; } etat_groupe = classe_pompe.etat_actuel(num_groupe) ; if(etat_groupe == 0x07) { classe_pompe.aspirer(num_groupe) ; etat_groupe = classe_pompe.etat_actuel(num_groupe) ; } //Envoi_msg_CAN(etat_groupe); break; case GLOBAL_GAME_END: end_game = 1; break; /* case TEST_VENT_1_ON: classe_pompe[AV_DROIT]->action(1); classe_pompe[AV_CENTRE]->action(1); classe_pompe[AV_GAUCHE]->action(1); classe_pompe[AR_DROIT]->action(1); classe_pompe[AR_CENTRE]->action(1); classe_pompe[AR_GAUCHE]->action(1); break; case TEST_VENT_1_OFF: classe_pompe[AV_CENTRE]->action(0); classe_pompe[AV_GAUCHE]->action(0); classe_pompe[AR_DROIT]->action(0); classe_pompe[AR_CENTRE]->action(0); classe_pompe[AR_GAUCHE]->action(0); classe_pompe[AV_DROIT]->action(0); break;*/ default: break; } flag_reception_CAN = 0 ; } void Envoi_msg_CAN(char donnee[6]) { CANMessage etat_ventouses=CANMessage(); etat_ventouses.id = 0x220; etat_ventouses.len=6; etat_ventouses.type=CANData; for(int num_octet=0; num_octet<6; num_octet++) { etat_ventouses.data[num_octet]=donnee[num_octet]; } bus_CAN.write(etat_ventouses); } void initialisation_CAN(void) { CANMessage msg_init; msg_init.id = ALIVE_ACTIONNEURS_ARRIERE; msg_init.len=0; bus_CAN.write(msg_init); } void ventouse_etat(void) { char num_groupe; char etat_groupe[6]; static char old_etat_groupe[6] = {0,0,0,0,0,0}; for(int i=0;i<6;i++) { if(i == 0) num_groupe = 3; else if (i == 1) num_groupe = 2; else if (i == 2) num_groupe = 1; else if (i == 3) num_groupe = 5; else if (i == 4) num_groupe = 6; else if (i == 5) num_groupe = 7; etat_groupe[i] = classe_pompe.etat_actuel(num_groupe); } for(int i=0;i<6;i++) { if(old_etat_groupe[i] != etat_groupe[i]) { Envoi_msg_CAN(etat_groupe); } old_etat_groupe[i] = etat_groupe[i]; } } void SendRawId (unsigned short id) { CANMessage msgTx; msgTx.id=id; msgTx.len=0; bus_CAN.write(msgTx); }