carte esclave pompe 2020 V1

Dependencies:   mbed ident_crac

Committer:
marwanesaich
Date:
Mon May 06 07:53:34 2019 +0000
Revision:
0:84a8c24e29ae
Child:
1:8a55f1d5cb26
Code petit robot sans ISR capteurs pompes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marwanesaich 0:84a8c24e29ae 1 #include "mbed.h"
marwanesaich 0:84a8c24e29ae 2 #include "class_ventouse.h"
marwanesaich 0:84a8c24e29ae 3 #include "ident_CRAC.h"
marwanesaich 0:84a8c24e29ae 4 #include "def.h"
marwanesaich 0:84a8c24e29ae 5
marwanesaich 0:84a8c24e29ae 6 #define SIZE_FIFO 50
marwanesaich 0:84a8c24e29ae 7
marwanesaich 0:84a8c24e29ae 8 CAN can(PB_8,PB_9,1000000);
marwanesaich 0:84a8c24e29ae 9 Serial pc(USBTX,USBRX);
marwanesaich 0:84a8c24e29ae 10 Ticker tick;
marwanesaich 0:84a8c24e29ae 11
marwanesaich 0:84a8c24e29ae 12 CANMessage msgRxBuffer[SIZE_FIFO];
marwanesaich 0:84a8c24e29ae 13 unsigned char FIFO_ecriture=0; //Position du fifo pour la reception CAN
marwanesaich 0:84a8c24e29ae 14 signed char FIFO_lecture=0;//Position du fifo de lecture des messages CAN
marwanesaich 0:84a8c24e29ae 15
marwanesaich 0:84a8c24e29ae 16 Ventouse* ventouse[8];
marwanesaich 0:84a8c24e29ae 17 char end_game = 0;
marwanesaich 0:84a8c24e29ae 18
marwanesaich 0:84a8c24e29ae 19
marwanesaich 0:84a8c24e29ae 20 void get_etat_ventouses();
marwanesaich 0:84a8c24e29ae 21 void isr_pression();
marwanesaich 0:84a8c24e29ae 22
marwanesaich 0:84a8c24e29ae 23 //ajouter ticker pour isr_presison
marwanesaich 0:84a8c24e29ae 24
marwanesaich 0:84a8c24e29ae 25 /*********************************************************************************************************/
marwanesaich 0:84a8c24e29ae 26 /* FUNCTION NAME: canRx_ISR */
marwanesaich 0:84a8c24e29ae 27 /* DESCRIPTION : lit les messages sur le can et les stocke dans la FIFO */
marwanesaich 0:84a8c24e29ae 28 /*********************************************************************************************************/
marwanesaich 0:84a8c24e29ae 29 void canRx_ISR (void)
marwanesaich 0:84a8c24e29ae 30 {
marwanesaich 0:84a8c24e29ae 31 if (can.read(msgRxBuffer[FIFO_ecriture]))
marwanesaich 0:84a8c24e29ae 32 FIFO_ecriture=(FIFO_ecriture+1)%SIZE_FIFO;
marwanesaich 0:84a8c24e29ae 33 }
marwanesaich 0:84a8c24e29ae 34
marwanesaich 0:84a8c24e29ae 35
marwanesaich 0:84a8c24e29ae 36 /*********************************************************************************************************/
marwanesaich 0:84a8c24e29ae 37 /* FUNCTION NAME: canProcessRx */
marwanesaich 0:84a8c24e29ae 38 /* DESCRIPTION : Fonction de traitement des messages CAN */
marwanesaich 0:84a8c24e29ae 39 /*********************************************************************************************************/
marwanesaich 0:84a8c24e29ae 40 void canProcessRx(void){
marwanesaich 0:84a8c24e29ae 41 static signed char FIFO_occupation=0,FIFO_max_occupation=0;
marwanesaich 0:84a8c24e29ae 42 CANMessage msgTx=CANMessage();
marwanesaich 0:84a8c24e29ae 43 FIFO_occupation=FIFO_ecriture-FIFO_lecture;
marwanesaich 0:84a8c24e29ae 44 if(FIFO_occupation<0)
marwanesaich 0:84a8c24e29ae 45 FIFO_occupation=FIFO_occupation+SIZE_FIFO;
marwanesaich 0:84a8c24e29ae 46 if(FIFO_max_occupation<FIFO_occupation)
marwanesaich 0:84a8c24e29ae 47 FIFO_max_occupation=FIFO_occupation;
marwanesaich 0:84a8c24e29ae 48 if(FIFO_occupation!=0) {
marwanesaich 0:84a8c24e29ae 49 int identifiant=msgRxBuffer[FIFO_lecture].id;
marwanesaich 0:84a8c24e29ae 50 int BRAS = msgRxBuffer[FIFO_lecture].data[0];
marwanesaich 0:84a8c24e29ae 51 switch(identifiant){
marwanesaich 0:84a8c24e29ae 52
marwanesaich 0:84a8c24e29ae 53 #ifdef ROBOT_SMALL
marwanesaich 0:84a8c24e29ae 54 case HACHEUR_GET_ATOM:
marwanesaich 0:84a8c24e29ae 55 pc.printf("HACHEUR_GET_ATOM bras %d\n", int(BRAS));
marwanesaich 0:84a8c24e29ae 56 ventouse[BRAS]->attraper();
marwanesaich 0:84a8c24e29ae 57 break;
marwanesaich 0:84a8c24e29ae 58
marwanesaich 0:84a8c24e29ae 59 case HACHEUR_RELEASE_ATOM:
marwanesaich 0:84a8c24e29ae 60 pc.printf("HACHEUR_RELEASE_ATOM\n");
marwanesaich 0:84a8c24e29ae 61 ventouse[BRAS]->relacher();
marwanesaich 0:84a8c24e29ae 62 break;
marwanesaich 0:84a8c24e29ae 63
marwanesaich 0:84a8c24e29ae 64 case HACHEUR_GET_DISTRIB_AR:
marwanesaich 0:84a8c24e29ae 65 pc.printf("HACHEUR_GET_DISTRIB_AR\n");
marwanesaich 0:84a8c24e29ae 66 ventouse[AR_GAUCHE]->attraper();
marwanesaich 0:84a8c24e29ae 67 ventouse[AR_CENTRE]->attraper();
marwanesaich 0:84a8c24e29ae 68 ventouse[AR_DROIT]->attraper();
marwanesaich 0:84a8c24e29ae 69 break;
marwanesaich 0:84a8c24e29ae 70
marwanesaich 0:84a8c24e29ae 71 case HACHEUR_GET_DISTRIB_AV:
marwanesaich 0:84a8c24e29ae 72 //SendAck();
marwanesaich 0:84a8c24e29ae 73 pc.printf("HACHEUR_GET_DISTRIB_AV\n");
marwanesaich 0:84a8c24e29ae 74 ventouse[AV_GAUCHE]->relacher();
marwanesaich 0:84a8c24e29ae 75 ventouse[AV_CENTRE]->relacher();
marwanesaich 0:84a8c24e29ae 76 ventouse[AV_DROIT]->relacher();
marwanesaich 0:84a8c24e29ae 77 break;
marwanesaich 0:84a8c24e29ae 78
marwanesaich 0:84a8c24e29ae 79 case HACHEUR_STATUT_VENTOUSES:
marwanesaich 0:84a8c24e29ae 80 pc.printf("HACHEUR_GET_STATUS\n");
marwanesaich 0:84a8c24e29ae 81 get_etat_ventouses();
marwanesaich 0:84a8c24e29ae 82 break;
marwanesaich 0:84a8c24e29ae 83
marwanesaich 0:84a8c24e29ae 84 case GLOBAL_GAME_END:
marwanesaich 0:84a8c24e29ae 85 end_game = 1;
marwanesaich 0:84a8c24e29ae 86 break;
marwanesaich 0:84a8c24e29ae 87 #endif
marwanesaich 0:84a8c24e29ae 88
marwanesaich 0:84a8c24e29ae 89 #ifdef ROBOT_BIG
marwanesaich 0:84a8c24e29ae 90
marwanesaich 0:84a8c24e29ae 91 #endif
marwanesaich 0:84a8c24e29ae 92 }
marwanesaich 0:84a8c24e29ae 93 FIFO_lecture=(FIFO_lecture+1)%SIZE_FIFO;
marwanesaich 0:84a8c24e29ae 94 }
marwanesaich 0:84a8c24e29ae 95 }
marwanesaich 0:84a8c24e29ae 96
marwanesaich 0:84a8c24e29ae 97 int main() {
marwanesaich 0:84a8c24e29ae 98
marwanesaich 0:84a8c24e29ae 99 char i =0;
marwanesaich 0:84a8c24e29ae 100
marwanesaich 0:84a8c24e29ae 101 pc.printf("Hello World");
marwanesaich 0:84a8c24e29ae 102 can.attach(&canRx_ISR); // création de l'interrupt attachée à la réception sur le CAN
marwanesaich 0:84a8c24e29ae 103 //tick.attach(&isr_pression, 0.5);
marwanesaich 0:84a8c24e29ae 104 wait(1);
marwanesaich 0:84a8c24e29ae 105 // #ifdef ROBOT_SMALL
marwanesaich 0:84a8c24e29ae 106 //DEFINITION DES VENTOUSES
marwanesaich 0:84a8c24e29ae 107 ventouse[AV_GAUCHE] = new Ventouse(PC_9, PA_8, PB_0);
marwanesaich 0:84a8c24e29ae 108 ventouse[AV_CENTRE] = new Ventouse(PA_9, PA_10, PB_1);
marwanesaich 0:84a8c24e29ae 109 ventouse[AV_DROIT] = new Ventouse(PA_11, PA_15, PC_1);
marwanesaich 0:84a8c24e29ae 110 ventouse[AV_BAS] = new Ventouse(PB_7, PB_6, PC_0);
marwanesaich 0:84a8c24e29ae 111
marwanesaich 0:84a8c24e29ae 112 ventouse[AR_GAUCHE] = new Ventouse(PC_7,PC_8 , PC_5);
marwanesaich 0:84a8c24e29ae 113 ventouse[AR_CENTRE] = new Ventouse(PB_10, PB_2, PC_4);
marwanesaich 0:84a8c24e29ae 114 ventouse[AR_DROIT] = new Ventouse(PA_6, PA_5, PA_7);
marwanesaich 0:84a8c24e29ae 115 ventouse[AR_BAS] = new Ventouse(PA_0, PA_1, PA_4);
marwanesaich 0:84a8c24e29ae 116
marwanesaich 0:84a8c24e29ae 117
marwanesaich 0:84a8c24e29ae 118 // #endif
marwanesaich 0:84a8c24e29ae 119
marwanesaich 0:84a8c24e29ae 120 while(1) {
marwanesaich 0:84a8c24e29ae 121 canProcessRx();
marwanesaich 0:84a8c24e29ae 122 pc.printf("%d\n",i);
marwanesaich 0:84a8c24e29ae 123 i++;
marwanesaich 0:84a8c24e29ae 124 wait_ms(10);
marwanesaich 0:84a8c24e29ae 125 //isr_pression();
marwanesaich 0:84a8c24e29ae 126 if(end_game){
marwanesaich 0:84a8c24e29ae 127 for(int i=0; i<8;i++){
marwanesaich 0:84a8c24e29ae 128 ventouse[i]->setPompe(0.0);
marwanesaich 0:84a8c24e29ae 129 ventouse[i]->setElectrovanne(0.0);
marwanesaich 0:84a8c24e29ae 130 }
marwanesaich 0:84a8c24e29ae 131 while(1){;}
marwanesaich 0:84a8c24e29ae 132 }
marwanesaich 0:84a8c24e29ae 133 }
marwanesaich 0:84a8c24e29ae 134 }
marwanesaich 0:84a8c24e29ae 135
marwanesaich 0:84a8c24e29ae 136
marwanesaich 0:84a8c24e29ae 137
marwanesaich 0:84a8c24e29ae 138
marwanesaich 0:84a8c24e29ae 139 void get_etat_ventouses()
marwanesaich 0:84a8c24e29ae 140 {
marwanesaich 0:84a8c24e29ae 141 CANMessage etat_ventouses = CANMessage();
marwanesaich 0:84a8c24e29ae 142 etat_ventouses.id=HACHEUR_STATUT_VENTOUSES;
marwanesaich 0:84a8c24e29ae 143 etat_ventouses.len=2;
marwanesaich 0:84a8c24e29ae 144 etat_ventouses.format=CANStandard;
marwanesaich 0:84a8c24e29ae 145 etat_ventouses.type=CANData;
marwanesaich 0:84a8c24e29ae 146 for(int i=7; i>=0; i--){
marwanesaich 0:84a8c24e29ae 147 etat_ventouses.data[0] = (etat_ventouses.data[0]<<1) + ventouse[i]->getPompe();
marwanesaich 0:84a8c24e29ae 148 etat_ventouses.data[1] = (etat_ventouses.data[1]<<1) + ventouse[i]->getPression();
marwanesaich 0:84a8c24e29ae 149 }
marwanesaich 0:84a8c24e29ae 150 can.write(etat_ventouses);
marwanesaich 0:84a8c24e29ae 151
marwanesaich 0:84a8c24e29ae 152 }
marwanesaich 0:84a8c24e29ae 153
marwanesaich 0:84a8c24e29ae 154 void isr_pression()
marwanesaich 0:84a8c24e29ae 155 {
marwanesaich 0:84a8c24e29ae 156 static char i = 1;
marwanesaich 0:84a8c24e29ae 157 can.write(CANMessage(100,&i,1));
marwanesaich 0:84a8c24e29ae 158 i++;
marwanesaich 0:84a8c24e29ae 159 /*
marwanesaich 0:84a8c24e29ae 160 static char new_pression = 0;
marwanesaich 0:84a8c24e29ae 161 static char old_pression = 0;
marwanesaich 0:84a8c24e29ae 162
marwanesaich 0:84a8c24e29ae 163 for(int i=7; i>=0; i--){
marwanesaich 0:84a8c24e29ae 164 new_pression = (new_pression<<1) + ventouse[i]->getPression();
marwanesaich 0:84a8c24e29ae 165 }
marwanesaich 0:84a8c24e29ae 166
marwanesaich 0:84a8c24e29ae 167 if(old_pression^new_pression){
marwanesaich 0:84a8c24e29ae 168 CANMessage chgt_pression = CANMessage();
marwanesaich 0:84a8c24e29ae 169 chgt_pression.id=HACHEUR_ISR_PRESSION ;
marwanesaich 0:84a8c24e29ae 170 chgt_pression.len=2;
marwanesaich 0:84a8c24e29ae 171 chgt_pression.format=CANStandard;
marwanesaich 0:84a8c24e29ae 172 chgt_pression.type=CANData;
marwanesaich 0:84a8c24e29ae 173 chgt_pression.data[0] = old_pression^new_pression ;
marwanesaich 0:84a8c24e29ae 174 chgt_pression.data[1] = new_pression;
marwanesaich 0:84a8c24e29ae 175 can.write(chgt_pression);
marwanesaich 0:84a8c24e29ae 176 }
marwanesaich 0:84a8c24e29ae 177
marwanesaich 0:84a8c24e29ae 178 new_pression = old_pression;
marwanesaich 0:84a8c24e29ae 179 */
marwanesaich 0:84a8c24e29ae 180
marwanesaich 0:84a8c24e29ae 181
marwanesaich 0:84a8c24e29ae 182 }