code de la carte à tout faire / carte strat

Dependencies:   mbed

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?

UserRevisionLine numberNew 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