carte esclave pompe 2020 V1
Dependencies: mbed ident_crac
main.cpp@23:7f62f27c028f, 2020-07-13 (annotated)
- Committer:
- maximilienlv
- Date:
- Mon Jul 13 11:31:08 2020 +0000
- Revision:
- 23:7f62f27c028f
- Parent:
- 22:f104afbecb98
- Child:
- 24:3fb41d2b91af
version pompe normalement final 2020
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
marwanesaich | 4:82c90657da4a | 1 | #include "extern.h" |
kyxstark | 8:a25a9c22ba91 | 2 | #define SIZE_FIFO 50 |
marwanesaich | 1:8a55f1d5cb26 | 3 | |
kyxstark | 8:a25a9c22ba91 | 4 | |
marwanesaich | 0:84a8c24e29ae | 5 | CANMessage msgRxBuffer[SIZE_FIFO]; |
marwanesaich | 0:84a8c24e29ae | 6 | unsigned char FIFO_ecriture=0; //Position du fifo pour la reception CAN |
marwanesaich | 0:84a8c24e29ae | 7 | signed char FIFO_lecture=0;//Position du fifo de lecture des messages CAN |
kyxstark | 8:a25a9c22ba91 | 8 | char end_game = 0; |
marwanesaich | 0:84a8c24e29ae | 9 | |
kyxstark | 8:a25a9c22ba91 | 10 | Ventouse* ventouse[NB_VENTOUSES]; |
kyxstark | 8:a25a9c22ba91 | 11 | |
kyxstark | 17:fcfdd7de9039 | 12 | BusIn contacts(PC_11, PC_12, PB_4, PB_5, PC_13, PC_14, PC_2, PC_3); |
kyxstark | 17:fcfdd7de9039 | 13 | DigitalIn Contact1(PC_11, PullNone); |
kyxstark | 17:fcfdd7de9039 | 14 | DigitalIn Contact2(PC_12, PullNone); |
kyxstark | 17:fcfdd7de9039 | 15 | DigitalIn Contact3(PB_4, PullNone); |
kyxstark | 17:fcfdd7de9039 | 16 | DigitalIn Contact4(PB_5, PullNone); |
kyxstark | 17:fcfdd7de9039 | 17 | DigitalIn Contact5(PC_13, PullNone); |
kyxstark | 17:fcfdd7de9039 | 18 | DigitalIn Contact6(PC_14, PullNone); |
kyxstark | 17:fcfdd7de9039 | 19 | DigitalIn Contact7(PC_2, PullNone); |
kyxstark | 17:fcfdd7de9039 | 20 | DigitalIn Contact8(PC_3, PullNone); |
kyxstark | 17:fcfdd7de9039 | 21 | |
kyxstark | 17:fcfdd7de9039 | 22 | void lecture_contacts(void); |
marwanesaich | 0:84a8c24e29ae | 23 | void get_etat_ventouses(); |
marwanesaich | 0:84a8c24e29ae | 24 | |
kyxstark | 8:a25a9c22ba91 | 25 | |
marwanesaich | 2:4cc8fa2f64be | 26 | CAN can(PB_8,PB_9,1000000); |
marwanesaich | 2:4cc8fa2f64be | 27 | Serial pc(USBTX,USBRX); |
marwanesaich | 0:84a8c24e29ae | 28 | |
marwanesaich | 0:84a8c24e29ae | 29 | /*********************************************************************************************************/ |
marwanesaich | 0:84a8c24e29ae | 30 | /* FUNCTION NAME: canRx_ISR */ |
marwanesaich | 0:84a8c24e29ae | 31 | /* DESCRIPTION : lit les messages sur le can et les stocke dans la FIFO */ |
marwanesaich | 0:84a8c24e29ae | 32 | /*********************************************************************************************************/ |
marwanesaich | 0:84a8c24e29ae | 33 | void canRx_ISR (void) |
marwanesaich | 0:84a8c24e29ae | 34 | { |
marwanesaich | 0:84a8c24e29ae | 35 | if (can.read(msgRxBuffer[FIFO_ecriture])) |
marwanesaich | 0:84a8c24e29ae | 36 | FIFO_ecriture=(FIFO_ecriture+1)%SIZE_FIFO; |
marwanesaich | 0:84a8c24e29ae | 37 | } |
marwanesaich | 0:84a8c24e29ae | 38 | |
marwanesaich | 0:84a8c24e29ae | 39 | |
marwanesaich | 0:84a8c24e29ae | 40 | /*********************************************************************************************************/ |
marwanesaich | 0:84a8c24e29ae | 41 | /* FUNCTION NAME: canProcessRx */ |
marwanesaich | 0:84a8c24e29ae | 42 | /* DESCRIPTION : Fonction de traitement des messages CAN */ |
marwanesaich | 0:84a8c24e29ae | 43 | /*********************************************************************************************************/ |
maximilienlv | 23:7f62f27c028f | 44 | void canProcessRx(void) |
maximilienlv | 23:7f62f27c028f | 45 | { |
marwanesaich | 0:84a8c24e29ae | 46 | static signed char FIFO_occupation=0,FIFO_max_occupation=0; |
marwanesaich | 0:84a8c24e29ae | 47 | CANMessage msgTx=CANMessage(); |
marwanesaich | 0:84a8c24e29ae | 48 | FIFO_occupation=FIFO_ecriture-FIFO_lecture; |
marwanesaich | 0:84a8c24e29ae | 49 | if(FIFO_occupation<0) |
marwanesaich | 0:84a8c24e29ae | 50 | FIFO_occupation=FIFO_occupation+SIZE_FIFO; |
marwanesaich | 0:84a8c24e29ae | 51 | if(FIFO_max_occupation<FIFO_occupation) |
marwanesaich | 0:84a8c24e29ae | 52 | FIFO_max_occupation=FIFO_occupation; |
marwanesaich | 0:84a8c24e29ae | 53 | if(FIFO_occupation!=0) { |
marwanesaich | 0:84a8c24e29ae | 54 | int identifiant=msgRxBuffer[FIFO_lecture].id; |
maximilienlv | 23:7f62f27c028f | 55 | char BRAS_VENTOUSE = 0; |
marwanesaich | 1:8a55f1d5cb26 | 56 | |
maximilienlv | 20:677dcf689523 | 57 | switch(identifiant) |
maximilienlv | 23:7f62f27c028f | 58 | { |
maximilienlv | 23:7f62f27c028f | 59 | |
maximilienlv | 23:7f62f27c028f | 60 | case VENT_AT: |
maximilienlv | 23:7f62f27c028f | 61 | BRAS_VENTOUSE = msgRxBuffer[FIFO_lecture].data[0]; |
maximilienlv | 23:7f62f27c028f | 62 | ventouse[BRAS_VENTOUSE]->action(1); |
marwanesaich | 0:84a8c24e29ae | 63 | break; |
kyxstark | 8:a25a9c22ba91 | 64 | |
maximilienlv | 23:7f62f27c028f | 65 | case VENT_RE: |
maximilienlv | 23:7f62f27c028f | 66 | BRAS_VENTOUSE = msgRxBuffer[FIFO_lecture].data[0]; |
maximilienlv | 23:7f62f27c028f | 67 | ventouse[BRAS_VENTOUSE]->action(0); |
kyxstark | 8:a25a9c22ba91 | 68 | break; |
kyxstark | 8:a25a9c22ba91 | 69 | |
maximilienlv | 23:7f62f27c028f | 70 | case VENT_ETAT: |
kyxstark | 8:a25a9c22ba91 | 71 | get_etat_ventouses(); |
maximilienlv | 23:7f62f27c028f | 72 | break; |
kyxstark | 8:a25a9c22ba91 | 73 | |
kyxstark | 8:a25a9c22ba91 | 74 | case GLOBAL_GAME_END: |
kyxstark | 8:a25a9c22ba91 | 75 | end_game = 1; |
kyxstark | 8:a25a9c22ba91 | 76 | break; |
kyxstark | 17:fcfdd7de9039 | 77 | |
maximilienlv | 21:42d6cead9cc2 | 78 | case TEST_VENT_1_ON: |
maximilienlv | 21:42d6cead9cc2 | 79 | ventouse[AV_DROIT]->action(1); |
maximilienlv | 23:7f62f27c028f | 80 | ventouse[AV_CENTRE]->action(1); |
maximilienlv | 23:7f62f27c028f | 81 | ventouse[AV_GAUCHE]->action(1); |
maximilienlv | 23:7f62f27c028f | 82 | ventouse[AR_DROIT]->action(1); |
maximilienlv | 23:7f62f27c028f | 83 | ventouse[AR_CENTRE]->action(1); |
maximilienlv | 23:7f62f27c028f | 84 | ventouse[AR_GAUCHE]->action(1); |
maximilienlv | 21:42d6cead9cc2 | 85 | break; |
maximilienlv | 21:42d6cead9cc2 | 86 | |
maximilienlv | 21:42d6cead9cc2 | 87 | case TEST_VENT_1_OFF: |
maximilienlv | 23:7f62f27c028f | 88 | ventouse[AV_CENTRE]->action(0); |
maximilienlv | 21:42d6cead9cc2 | 89 | ventouse[AV_GAUCHE]->action(0); |
maximilienlv | 23:7f62f27c028f | 90 | ventouse[AR_DROIT]->action(0); |
maximilienlv | 23:7f62f27c028f | 91 | ventouse[AR_CENTRE]->action(0); |
maximilienlv | 23:7f62f27c028f | 92 | ventouse[AR_GAUCHE]->action(0); |
maximilienlv | 23:7f62f27c028f | 93 | ventouse[AV_DROIT]->action(0); |
maximilienlv | 23:7f62f27c028f | 94 | break; |
maximilienlv | 22:f104afbecb98 | 95 | default: |
maximilienlv | 21:42d6cead9cc2 | 96 | break; |
maximilienlv | 21:42d6cead9cc2 | 97 | |
maximilienlv | 20:677dcf689523 | 98 | } |
marwanesaich | 0:84a8c24e29ae | 99 | FIFO_lecture=(FIFO_lecture+1)%SIZE_FIFO; |
marwanesaich | 0:84a8c24e29ae | 100 | } |
marwanesaich | 0:84a8c24e29ae | 101 | } |
marwanesaich | 0:84a8c24e29ae | 102 | |
marwanesaich | 0:84a8c24e29ae | 103 | int main() { |
marwanesaich | 0:84a8c24e29ae | 104 | |
marwanesaich | 0:84a8c24e29ae | 105 | can.attach(&canRx_ISR); // création de l'interrupt attachée à la réception sur le CAN |
maximilienlv | 22:f104afbecb98 | 106 | wait_ms(100); |
maximilienlv | 19:952208276c63 | 107 | |
maximilienlv | 23:7f62f27c028f | 108 | ventouse[AR_DROIT] = new Ventouse(PB_7, PB_6, PC_0, AR_DROIT); |
marwanesaich | 2:4cc8fa2f64be | 109 | ventouse[AR_CENTRE] = new Ventouse(PC_9, PA_8, PB_0, AR_CENTRE); |
maximilienlv | 21:42d6cead9cc2 | 110 | ventouse[AR_GAUCHE] = new Ventouse(PA_9, PA_10, PB_1, AR_GAUCHE); |
marwanesaich | 0:84a8c24e29ae | 111 | |
maximilienlv | 23:7f62f27c028f | 112 | ventouse[AV_DROIT] = new Ventouse(PA_0, PA_1, PA_4, AV_DROIT); //PA_6, PA_5, PA_7, |
maximilienlv | 23:7f62f27c028f | 113 | ventouse[AV_CENTRE] = new Ventouse(PB_10, PB_2, PC_4, AV_CENTRE); |
maximilienlv | 21:42d6cead9cc2 | 114 | ventouse[AV_GAUCHE] = new Ventouse(PC_7,PC_8 , PC_5, AV_GAUCHE); |
kyxstark | 8:a25a9c22ba91 | 115 | |
maximilienlv | 22:f104afbecb98 | 116 | pc.printf("Launched carte ventouse"); |
maximilienlv | 23:7f62f27c028f | 117 | //on force les ventouses à être éteintes au début |
maximilienlv | 21:42d6cead9cc2 | 118 | ventouse[AV_DROIT]->action(0); |
maximilienlv | 21:42d6cead9cc2 | 119 | ventouse[AV_CENTRE]->action(0); |
maximilienlv | 21:42d6cead9cc2 | 120 | ventouse[AV_GAUCHE]->action(0); |
maximilienlv | 21:42d6cead9cc2 | 121 | ventouse[AR_DROIT]->action(0); |
maximilienlv | 21:42d6cead9cc2 | 122 | ventouse[AR_CENTRE]->action(0); |
maximilienlv | 21:42d6cead9cc2 | 123 | ventouse[AR_GAUCHE]->action(0); |
maximilienlv | 21:42d6cead9cc2 | 124 | while(1) |
maximilienlv | 21:42d6cead9cc2 | 125 | { |
marwanesaich | 0:84a8c24e29ae | 126 | canProcessRx(); |
maximilienlv | 22:f104afbecb98 | 127 | for(int i=0; i<NB_VENTOUSES; i++) |
maximilienlv | 22:f104afbecb98 | 128 | { |
marwanesaich | 2:4cc8fa2f64be | 129 | ventouse[i]->automate(); |
kyxstark | 17:fcfdd7de9039 | 130 | } |
maximilienlv | 23:7f62f27c028f | 131 | //lecture_contacts(); |
maximilienlv | 22:f104afbecb98 | 132 | if(end_game) |
maximilienlv | 22:f104afbecb98 | 133 | { |
maximilienlv | 22:f104afbecb98 | 134 | for(int i=0; i<NB_VENTOUSES;i++) |
maximilienlv | 22:f104afbecb98 | 135 | { |
marwanesaich | 0:84a8c24e29ae | 136 | ventouse[i]->setPompe(0.0); |
kyxstark | 8:a25a9c22ba91 | 137 | ventouse[i]->setElectrovanne(0); |
marwanesaich | 0:84a8c24e29ae | 138 | } |
maximilienlv | 22:f104afbecb98 | 139 | while(1); |
marwanesaich | 0:84a8c24e29ae | 140 | } |
marwanesaich | 0:84a8c24e29ae | 141 | } |
marwanesaich | 0:84a8c24e29ae | 142 | } |
marwanesaich | 0:84a8c24e29ae | 143 | |
kyxstark | 17:fcfdd7de9039 | 144 | void lecture_contacts(void) |
kyxstark | 17:fcfdd7de9039 | 145 | { |
maximilienlv | 22:f104afbecb98 | 146 | static char prev_contacts = contacts; |
kyxstark | 17:fcfdd7de9039 | 147 | if(contacts != prev_contacts) |
kyxstark | 17:fcfdd7de9039 | 148 | { |
kyxstark | 17:fcfdd7de9039 | 149 | prev_contacts = contacts; |
kyxstark | 17:fcfdd7de9039 | 150 | } |
kyxstark | 17:fcfdd7de9039 | 151 | } |
kyxstark | 8:a25a9c22ba91 | 152 | |
marwanesaich | 0:84a8c24e29ae | 153 | void get_etat_ventouses() |
marwanesaich | 0:84a8c24e29ae | 154 | { |
maximilienlv | 22:f104afbecb98 | 155 | CANMessage etat_ventouses = CANMessage(); |
marwanesaich | 0:84a8c24e29ae | 156 | etat_ventouses.len=2; |
marwanesaich | 0:84a8c24e29ae | 157 | etat_ventouses.format=CANStandard; |
marwanesaich | 0:84a8c24e29ae | 158 | etat_ventouses.type=CANData; |
marwanesaich | 2:4cc8fa2f64be | 159 | etat_ventouses.data[0]=0; |
marwanesaich | 2:4cc8fa2f64be | 160 | etat_ventouses.data[0]=1; |
maximilienlv | 23:7f62f27c028f | 161 | for(int i = (NB_VENTOUSES - 1); i >= 0; i--) |
maximilienlv | 23:7f62f27c028f | 162 | { |
marwanesaich | 0:84a8c24e29ae | 163 | etat_ventouses.data[0] = (etat_ventouses.data[0]<<1) + ventouse[i]->getPompe(); |
marwanesaich | 0:84a8c24e29ae | 164 | etat_ventouses.data[1] = (etat_ventouses.data[1]<<1) + ventouse[i]->getPression(); |
marwanesaich | 0:84a8c24e29ae | 165 | } |
marwanesaich | 0:84a8c24e29ae | 166 | can.write(etat_ventouses); |
maximilienlv | 22:f104afbecb98 | 167 | } |