code de la carte à tout faire / carte strat
Dependencies: mbed
main.cpp@0:76bc3ed27822, 2017-05-10 (annotated)
- Committer:
- ClementBreteau
- Date:
- Wed May 10 09:10:26 2017 +0000
- Revision:
- 0:76bc3ed27822
pour gatien le 10 5 2017
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ClementBreteau | 0:76bc3ed27822 | 1 | #include "global.h" |
ClementBreteau | 0:76bc3ed27822 | 2 | |
ClementBreteau | 0:76bc3ed27822 | 3 | /****************************************************************************************/ |
ClementBreteau | 0:76bc3ed27822 | 4 | /* FUNCTION NAME: automate_process */ |
ClementBreteau | 0:76bc3ed27822 | 5 | /* DESCRIPTION : Automate de gestion de la stratégie du robot */ |
ClementBreteau | 0:76bc3ed27822 | 6 | /****************************************************************************************/ |
ClementBreteau | 0:76bc3ed27822 | 7 | void automate_process(void); |
ClementBreteau | 0:76bc3ed27822 | 8 | |
ClementBreteau | 0:76bc3ed27822 | 9 | /****************************************************************************************/ |
ClementBreteau | 0:76bc3ed27822 | 10 | /* FUNCTION NAME: canProcessRx */ |
ClementBreteau | 0:76bc3ed27822 | 11 | /* DESCRIPTION : Fonction de traitement des messages CAN */ |
ClementBreteau | 0:76bc3ed27822 | 12 | /****************************************************************************************/ |
ClementBreteau | 0:76bc3ed27822 | 13 | void canProcessRx(void); |
ClementBreteau | 0:76bc3ed27822 | 14 | |
ClementBreteau | 0:76bc3ed27822 | 15 | /*********************************************************************************************************/ |
ClementBreteau | 0:76bc3ed27822 | 16 | /* FUNCTION NAME: SendRawId */ |
ClementBreteau | 0:76bc3ed27822 | 17 | /* DESCRIPTION : Envoie un message sans donnée, c'est-à-dire contenant uniquement un ID, sur le bus CAN */ |
ClementBreteau | 0:76bc3ed27822 | 18 | /*********************************************************************************************************/ |
ClementBreteau | 0:76bc3ed27822 | 19 | void SendRawId (unsigned short id); |
ClementBreteau | 0:76bc3ed27822 | 20 | |
ClementBreteau | 0:76bc3ed27822 | 21 | DigitalOut led(LED1); |
ClementBreteau | 0:76bc3ed27822 | 22 | Serial pc(SERIAL_TX, SERIAL_RX); |
ClementBreteau | 0:76bc3ed27822 | 23 | /*DigitalIn IO1(PB_7); |
ClementBreteau | 0:76bc3ed27822 | 24 | DigitalIn IO2(PB_6); |
ClementBreteau | 0:76bc3ed27822 | 25 | DigitalIn IO3(PF_1); |
ClementBreteau | 0:76bc3ed27822 | 26 | DigitalIn IO4(PA_8); |
ClementBreteau | 0:76bc3ed27822 | 27 | |
ClementBreteau | 0:76bc3ed27822 | 28 | DigitalIn A_in1(PB_7); |
ClementBreteau | 0:76bc3ed27822 | 29 | DigitalIn A_in2(PA_6); |
ClementBreteau | 0:76bc3ed27822 | 30 | DigitalIn A_in3(PA_4); |
ClementBreteau | 0:76bc3ed27822 | 31 | DigitalIn A_in4(PA_1); |
ClementBreteau | 0:76bc3ed27822 | 32 | DigitalIn A_in5(PA_0); |
ClementBreteau | 0:76bc3ed27822 | 33 | |
ClementBreteau | 0:76bc3ed27822 | 34 | DigitalOut AX12(PA_9); |
ClementBreteau | 0:76bc3ed27822 | 35 | */ |
ClementBreteau | 0:76bc3ed27822 | 36 | |
ClementBreteau | 0:76bc3ed27822 | 37 | AnalogIn cptGauche(PA_1); |
ClementBreteau | 0:76bc3ed27822 | 38 | AnalogIn cptDroit(PA_0); |
ClementBreteau | 0:76bc3ed27822 | 39 | DigitalIn pressionGauche(PA_8); |
ClementBreteau | 0:76bc3ed27822 | 40 | DigitalIn pressionDroit(PB_7); |
ClementBreteau | 0:76bc3ed27822 | 41 | |
ClementBreteau | 0:76bc3ed27822 | 42 | |
ClementBreteau | 0:76bc3ed27822 | 43 | |
ClementBreteau | 0:76bc3ed27822 | 44 | |
ClementBreteau | 0:76bc3ed27822 | 45 | CAN can1(PA_11,PA_12); // Rx&Tx pour le CAN |
ClementBreteau | 0:76bc3ed27822 | 46 | CANMessage msgRxBuffer[SIZE_FIFO]; // buffer en réception pour le CAN |
ClementBreteau | 0:76bc3ed27822 | 47 | unsigned char FIFO_ecriture=0; //Position du fifo pour la reception CAN |
ClementBreteau | 0:76bc3ed27822 | 48 | |
ClementBreteau | 0:76bc3ed27822 | 49 | signed char FIFO_lecture=0;//Position du fifo de lecture des messages CAN |
ClementBreteau | 0:76bc3ed27822 | 50 | |
ClementBreteau | 0:76bc3ed27822 | 51 | extern "C" void mbed_reset();//Pour pouvoir reset la carte |
ClementBreteau | 0:76bc3ed27822 | 52 | |
ClementBreteau | 0:76bc3ed27822 | 53 | E_GameEtat carte_etat = ETAT_ATTENTE; |
ClementBreteau | 0:76bc3ed27822 | 54 | E_Couleur couleurSelect = BLEU; |
ClementBreteau | 0:76bc3ed27822 | 55 | |
ClementBreteau | 0:76bc3ed27822 | 56 | AX12 *myAX12; |
ClementBreteau | 0:76bc3ed27822 | 57 | |
ClementBreteau | 0:76bc3ed27822 | 58 | |
ClementBreteau | 0:76bc3ed27822 | 59 | |
ClementBreteau | 0:76bc3ed27822 | 60 | |
ClementBreteau | 0:76bc3ed27822 | 61 | void canRx_ISR (void) |
ClementBreteau | 0:76bc3ed27822 | 62 | { |
ClementBreteau | 0:76bc3ed27822 | 63 | if (can1.read(msgRxBuffer[FIFO_ecriture])) { |
ClementBreteau | 0:76bc3ed27822 | 64 | /*if(msgRxBuffer[FIFO_ecriture].id==RESET_ACTIONNEURS) mbed_reset(); |
ClementBreteau | 0:76bc3ed27822 | 65 | else FIFO_ecriture=(FIFO_ecriture+1)%SIZE_FIFO;*/ |
ClementBreteau | 0:76bc3ed27822 | 66 | FIFO_ecriture=(FIFO_ecriture+1)%SIZE_FIFO; |
ClementBreteau | 0:76bc3ed27822 | 67 | } |
ClementBreteau | 0:76bc3ed27822 | 68 | } |
ClementBreteau | 0:76bc3ed27822 | 69 | int main() { |
ClementBreteau | 0:76bc3ed27822 | 70 | char truc = 0; |
ClementBreteau | 0:76bc3ed27822 | 71 | |
ClementBreteau | 0:76bc3ed27822 | 72 | can1.frequency(1000000); // fréquence de travail 1Mbit/s |
ClementBreteau | 0:76bc3ed27822 | 73 | can1.attach(&canRx_ISR); // création de l'interrupt attachée à la réception sur le CAN |
ClementBreteau | 0:76bc3ed27822 | 74 | |
ClementBreteau | 0:76bc3ed27822 | 75 | CANMessage msgTx=CANMessage(); |
ClementBreteau | 0:76bc3ed27822 | 76 | |
ClementBreteau | 0:76bc3ed27822 | 77 | myAX12-> Set_Goal_speed(vitesse); |
ClementBreteau | 0:76bc3ed27822 | 78 | myAX12-> Set_Mode(0); |
ClementBreteau | 0:76bc3ed27822 | 79 | |
ClementBreteau | 0:76bc3ed27822 | 80 | pc.printf("Hello World\n"); |
ClementBreteau | 0:76bc3ed27822 | 81 | while(1) { |
ClementBreteau | 0:76bc3ed27822 | 82 | |
ClementBreteau | 0:76bc3ed27822 | 83 | led = ((led == 1)?0:1); |
ClementBreteau | 0:76bc3ed27822 | 84 | |
ClementBreteau | 0:76bc3ed27822 | 85 | automate_process(); |
ClementBreteau | 0:76bc3ed27822 | 86 | canProcessRx(); |
ClementBreteau | 0:76bc3ed27822 | 87 | //SendRawId(cpt); |
ClementBreteau | 0:76bc3ed27822 | 88 | wait(0.5); |
ClementBreteau | 0:76bc3ed27822 | 89 | } |
ClementBreteau | 0:76bc3ed27822 | 90 | } |
ClementBreteau | 0:76bc3ed27822 | 91 | |
ClementBreteau | 0:76bc3ed27822 | 92 | |
ClementBreteau | 0:76bc3ed27822 | 93 | |
ClementBreteau | 0:76bc3ed27822 | 94 | |
ClementBreteau | 0:76bc3ed27822 | 95 | int action; |
ClementBreteau | 0:76bc3ed27822 | 96 | char localAX12 = AX12_POSIOTION_BASSE; |
ClementBreteau | 0:76bc3ed27822 | 97 | /****************************************************************************************/ |
ClementBreteau | 0:76bc3ed27822 | 98 | /* FUNCTION NAME: automate_process */ |
ClementBreteau | 0:76bc3ed27822 | 99 | /* DESCRIPTION : Automate de gestion de la stratégie du robot */ |
ClementBreteau | 0:76bc3ed27822 | 100 | /****************************************************************************************/ |
ClementBreteau | 0:76bc3ed27822 | 101 | void automate_process(void){ |
ClementBreteau | 0:76bc3ed27822 | 102 | SendRawId(carte_etat); |
ClementBreteau | 0:76bc3ed27822 | 103 | switch(carte_etat){ |
ClementBreteau | 0:76bc3ed27822 | 104 | case ETAT_ATTENTE: |
ClementBreteau | 0:76bc3ed27822 | 105 | break; |
ClementBreteau | 0:76bc3ed27822 | 106 | |
ClementBreteau | 0:76bc3ed27822 | 107 | case ETAT_TRAITEMENT_ACTION_AX12: |
ClementBreteau | 0:76bc3ed27822 | 108 | switch(action){ |
ClementBreteau | 0:76bc3ed27822 | 109 | #define ACTION_TOURNER_MODULE_GAUCHE 0x10 |
ClementBreteau | 0:76bc3ed27822 | 110 | #define ACTION_TOURNER_MODULE_DROIT 0x11 |
ClementBreteau | 0:76bc3ed27822 | 111 | case ACTION_TOURNER_MODULE_GAUCHE: |
ClementBreteau | 0:76bc3ed27822 | 112 | carte_etat = ETAT_BAISSER_MAIN_GAUCHE; |
ClementBreteau | 0:76bc3ed27822 | 113 | break; |
ClementBreteau | 0:76bc3ed27822 | 114 | case ACTION_TOURNER_MODULE_DROIT: |
ClementBreteau | 0:76bc3ed27822 | 115 | carte_etat = ETAT_BAISSER_MAIN_DROITE; |
ClementBreteau | 0:76bc3ed27822 | 116 | break; |
ClementBreteau | 0:76bc3ed27822 | 117 | default: |
ClementBreteau | 0:76bc3ed27822 | 118 | carte_etat = ETAT_ATTENTE; |
ClementBreteau | 0:76bc3ed27822 | 119 | } |
ClementBreteau | 0:76bc3ed27822 | 120 | break; |
ClementBreteau | 0:76bc3ed27822 | 121 | |
ClementBreteau | 0:76bc3ed27822 | 122 | case ETAT_BAISSER_MAIN_GAUCHE: |
ClementBreteau | 0:76bc3ed27822 | 123 | if(pressionGauche.read() == ENFONCER){ |
ClementBreteau | 0:76bc3ed27822 | 124 | carte_etat = ETAT_CHECK_COULEUR; |
ClementBreteau | 0:76bc3ed27822 | 125 | } else{ |
ClementBreteau | 0:76bc3ed27822 | 126 | // |
ClementBreteau | 0:76bc3ed27822 | 127 | localAX12 = AX12BaisserMainGauche(localAX12); |
ClementBreteau | 0:76bc3ed27822 | 128 | } |
ClementBreteau | 0:76bc3ed27822 | 129 | break; |
ClementBreteau | 0:76bc3ed27822 | 130 | |
ClementBreteau | 0:76bc3ed27822 | 131 | case ETAT_BAISSER_MAIN_DROITE: |
ClementBreteau | 0:76bc3ed27822 | 132 | if(pressionDroit.read() == ENFONCER){ |
ClementBreteau | 0:76bc3ed27822 | 133 | carte_etat = ETAT_CHECK_COULEUR; |
ClementBreteau | 0:76bc3ed27822 | 134 | }else{ |
ClementBreteau | 0:76bc3ed27822 | 135 | // |
ClementBreteau | 0:76bc3ed27822 | 136 | localAX12 = AX12BaisserMainDroite(localAX12); |
ClementBreteau | 0:76bc3ed27822 | 137 | } |
ClementBreteau | 0:76bc3ed27822 | 138 | break; |
ClementBreteau | 0:76bc3ed27822 | 139 | |
ClementBreteau | 0:76bc3ed27822 | 140 | case ETAT_CHECK_COULEUR: |
ClementBreteau | 0:76bc3ed27822 | 141 | //if (((unsigned short)cptGauche.read()&(unsigned short)cptDroit.read()) == 0){ |
ClementBreteau | 0:76bc3ed27822 | 142 | if ((unsigned short)cptDroit.read() == 0){ |
ClementBreteau | 0:76bc3ed27822 | 143 | carte_etat = ETAT_ATTENTE; |
ClementBreteau | 0:76bc3ed27822 | 144 | }else{ |
ClementBreteau | 0:76bc3ed27822 | 145 | // on active les moteurs |
ClementBreteau | 0:76bc3ed27822 | 146 | localAX12 = AX12BaisserMainGauche(localAX12); |
ClementBreteau | 0:76bc3ed27822 | 147 | } |
ClementBreteau | 0:76bc3ed27822 | 148 | break; |
ClementBreteau | 0:76bc3ed27822 | 149 | |
ClementBreteau | 0:76bc3ed27822 | 150 | case ETAT_TURBINE: |
ClementBreteau | 0:76bc3ed27822 | 151 | carte_etat = ETAT_ATTENTE; |
ClementBreteau | 0:76bc3ed27822 | 152 | turbineWritePWM(50); |
ClementBreteau | 0:76bc3ed27822 | 153 | break; |
ClementBreteau | 0:76bc3ed27822 | 154 | |
ClementBreteau | 0:76bc3ed27822 | 155 | case ETAT_POMPES: |
ClementBreteau | 0:76bc3ed27822 | 156 | carte_etat = ETAT_ATTENTE; |
ClementBreteau | 0:76bc3ed27822 | 157 | pompeWritePWM(50); |
ClementBreteau | 0:76bc3ed27822 | 158 | break; |
ClementBreteau | 0:76bc3ed27822 | 159 | |
ClementBreteau | 0:76bc3ed27822 | 160 | |
ClementBreteau | 0:76bc3ed27822 | 161 | |
ClementBreteau | 0:76bc3ed27822 | 162 | default: |
ClementBreteau | 0:76bc3ed27822 | 163 | pc.printf("etat non identifie"); |
ClementBreteau | 0:76bc3ed27822 | 164 | } |
ClementBreteau | 0:76bc3ed27822 | 165 | } |
ClementBreteau | 0:76bc3ed27822 | 166 | |
ClementBreteau | 0:76bc3ed27822 | 167 | |
ClementBreteau | 0:76bc3ed27822 | 168 | /*********************************************************************************************************/ |
ClementBreteau | 0:76bc3ed27822 | 169 | /* FUNCTION NAME: SendRawId */ |
ClementBreteau | 0:76bc3ed27822 | 170 | /* DESCRIPTION : Envoie un message sans donnée, c'est-à-dire contenant uniquement un ID, sur le bus CAN */ |
ClementBreteau | 0:76bc3ed27822 | 171 | /*********************************************************************************************************/ |
ClementBreteau | 0:76bc3ed27822 | 172 | void SendRawId (unsigned short id) |
ClementBreteau | 0:76bc3ed27822 | 173 | { |
ClementBreteau | 0:76bc3ed27822 | 174 | CANMessage msgTx=CANMessage(); |
ClementBreteau | 0:76bc3ed27822 | 175 | msgTx.id=id; |
ClementBreteau | 0:76bc3ed27822 | 176 | msgTx.len=0; |
ClementBreteau | 0:76bc3ed27822 | 177 | can1.write(msgTx); |
ClementBreteau | 0:76bc3ed27822 | 178 | wait_us(200); |
ClementBreteau | 0:76bc3ed27822 | 179 | } |
ClementBreteau | 0:76bc3ed27822 | 180 | |
ClementBreteau | 0:76bc3ed27822 | 181 | |
ClementBreteau | 0:76bc3ed27822 | 182 | /****************************************************************************************/ |
ClementBreteau | 0:76bc3ed27822 | 183 | /* FUNCTION NAME: canProcessRx */ |
ClementBreteau | 0:76bc3ed27822 | 184 | /* DESCRIPTION : Fonction de traitement des messages CAN */ |
ClementBreteau | 0:76bc3ed27822 | 185 | /****************************************************************************************/ |
ClementBreteau | 0:76bc3ed27822 | 186 | void canProcessRx(void){ |
ClementBreteau | 0:76bc3ed27822 | 187 | static signed char FIFO_occupation=0,FIFO_max_occupation=0; |
ClementBreteau | 0:76bc3ed27822 | 188 | CANMessage msgTx=CANMessage(); |
ClementBreteau | 0:76bc3ed27822 | 189 | FIFO_occupation=FIFO_ecriture-FIFO_lecture; |
ClementBreteau | 0:76bc3ed27822 | 190 | if(FIFO_occupation<0) |
ClementBreteau | 0:76bc3ed27822 | 191 | FIFO_occupation=FIFO_occupation+SIZE_FIFO; |
ClementBreteau | 0:76bc3ed27822 | 192 | if(FIFO_max_occupation<FIFO_occupation) |
ClementBreteau | 0:76bc3ed27822 | 193 | FIFO_max_occupation=FIFO_occupation; |
ClementBreteau | 0:76bc3ed27822 | 194 | if(FIFO_occupation!=0) { |
ClementBreteau | 0:76bc3ed27822 | 195 | |
ClementBreteau | 0:76bc3ed27822 | 196 | switch(msgRxBuffer[FIFO_lecture].id) { |
ClementBreteau | 0:76bc3ed27822 | 197 | case CHECK_ACTIONNEURS: |
ClementBreteau | 0:76bc3ed27822 | 198 | SendRawId(ALIVE_ACTIONNEURS); |
ClementBreteau | 0:76bc3ed27822 | 199 | break; |
ClementBreteau | 0:76bc3ed27822 | 200 | |
ClementBreteau | 0:76bc3ed27822 | 201 | case SERVO_AX12_ACTION : |
ClementBreteau | 0:76bc3ed27822 | 202 | carte_etat = ETAT_TRAITEMENT_ACTION_AX12; |
ClementBreteau | 0:76bc3ed27822 | 203 | |
ClementBreteau | 0:76bc3ed27822 | 204 | action = msgRxBuffer[FIFO_lecture].data[0]; |
ClementBreteau | 0:76bc3ed27822 | 205 | couleurSelect = (E_Couleur)msgRxBuffer[FIFO_lecture].data[1]; |
ClementBreteau | 0:76bc3ed27822 | 206 | //ACK de reception des actions a effectuer |
ClementBreteau | 0:76bc3ed27822 | 207 | msgTx.id = ACKNOWLEDGE_AX12; |
ClementBreteau | 0:76bc3ed27822 | 208 | msgTx.len = 1; |
ClementBreteau | 0:76bc3ed27822 | 209 | msgTx.data[0] = msgRxBuffer[FIFO_lecture].data[0]; |
ClementBreteau | 0:76bc3ed27822 | 210 | can1.write(msgTx); |
ClementBreteau | 0:76bc3ed27822 | 211 | break; |
ClementBreteau | 0:76bc3ed27822 | 212 | |
ClementBreteau | 0:76bc3ed27822 | 213 | case POMPE_PWM: |
ClementBreteau | 0:76bc3ed27822 | 214 | carte_etat = ETAT_POMPES; |
ClementBreteau | 0:76bc3ed27822 | 215 | |
ClementBreteau | 0:76bc3ed27822 | 216 | msgTx.id = ACKNOWLEDGE_POMPES; |
ClementBreteau | 0:76bc3ed27822 | 217 | msgTx.len = 1; |
ClementBreteau | 0:76bc3ed27822 | 218 | msgTx.data[0] = msgRxBuffer[FIFO_lecture].data[0]; |
ClementBreteau | 0:76bc3ed27822 | 219 | can1.write(msgTx); |
ClementBreteau | 0:76bc3ed27822 | 220 | break; |
ClementBreteau | 0:76bc3ed27822 | 221 | |
ClementBreteau | 0:76bc3ed27822 | 222 | #define TURBINE_PWM 0xa1 |
ClementBreteau | 0:76bc3ed27822 | 223 | #define ACKNOWLEDGE_TURBINE 0x107 |
ClementBreteau | 0:76bc3ed27822 | 224 | case TURBINE_PWM: |
ClementBreteau | 0:76bc3ed27822 | 225 | carte_etat = ETAT_TURBINE; |
ClementBreteau | 0:76bc3ed27822 | 226 | |
ClementBreteau | 0:76bc3ed27822 | 227 | msgTx.id = ACKNOWLEDGE_TURBINE; |
ClementBreteau | 0:76bc3ed27822 | 228 | msgTx.len = 1; |
ClementBreteau | 0:76bc3ed27822 | 229 | msgTx.data[0] = msgRxBuffer[FIFO_lecture].data[0]; |
ClementBreteau | 0:76bc3ed27822 | 230 | can1.write(msgTx); |
ClementBreteau | 0:76bc3ed27822 | 231 | break; |
ClementBreteau | 0:76bc3ed27822 | 232 | |
ClementBreteau | 0:76bc3ed27822 | 233 | } |
ClementBreteau | 0:76bc3ed27822 | 234 | FIFO_lecture=(FIFO_lecture+1)%SIZE_FIFO; |
ClementBreteau | 0:76bc3ed27822 | 235 | } |
ClementBreteau | 0:76bc3ed27822 | 236 | } |
ClementBreteau | 0:76bc3ed27822 | 237 |