IUT GEII SEMESTRE 3 SCOOTER PROJECT

Dependencies:   EthernetInterface bloc_io html mbed-rtos mbed

Fork of scooter_mbed_etudiant by ERS3 2015-2016

Committer:
syasya
Date:
Mon Jan 22 19:02:58 2018 +0000
Revision:
1:8d356d22e69c
Parent:
0:e30c9ba95bd4
IUT GEII NICE SEMESTRE 3 SCOOTER PROJECT

Who changed what in which revision?

UserRevisionLine numberNew contents of line
syasya 1:8d356d22e69c 1 #include "EthernetInterface.h"
superphil06 0:e30c9ba95bd4 2 #include <stdlib.h>
superphil06 0:e30c9ba95bd4 3 #include <string.h>
superphil06 0:e30c9ba95bd4 4 #include "mbed.h"
superphil06 0:e30c9ba95bd4 5 #include "rtos.h" // need for main thread sleep
superphil06 0:e30c9ba95bd4 6 #include "html.h" // need for html patch working with web server
superphil06 0:e30c9ba95bd4 7 #include "bloc_io.h"
syasya 1:8d356d22e69c 8 #define RADIUS 0.22F // wheel size
syasya 1:8d356d22e69c 9 #define NBPOLES 19 // magnetic pole number
syasya 1:8d356d22e69c 10 #define DELTA_T 0.2F // speed measurement counting period
syasya 1:8d356d22e69c 11 #define T_TICKER 0.05 // time for ticker to call function Gaz
syasya 1:8d356d22e69c 12 #define PI 3.1415 // pie value
syasya 1:8d356d22e69c 13 #define RESISTANCE // resistance value
syasya 1:8d356d22e69c 14 #define T_COEF 0.01 // constant for temperature calculation
syasya 1:8d356d22e69c 15 #define T_REST 0.2 // constant for current mesure
syasya 1:8d356d22e69c 16 #define INIT_IREST 60000 // capacite initial en mAs
superphil06 0:e30c9ba95bd4 17
superphil06 0:e30c9ba95bd4 18 Bloc_IO MyPLD(p25,p26,p5,p6,p7,p8,p9,p10,p23,p24);// instantiate object needed to communicate with PLD
syasya 1:8d356d22e69c 19 AnalogIn Val_Poignee(p17);// analog input for gaz connected to mbed
syasya 1:8d356d22e69c 20 AnalogIn Vbat(p18);// analog input for battery connected to mbed
syasya 1:8d356d22e69c 21 AnalogIn Vtemp(p19);// analog input for temperature connected to mbed
syasya 1:8d356d22e69c 22 AnalogIn VImes(p20);// analog input for current connected to mbed
syasya 1:8d356d22e69c 23 DigitalOut Valid_PWM(p21);// valid pmw mbed pin
syasya 1:8d356d22e69c 24 InterruptIn Valid_PWM_In(p22); // count value for pole number
superphil06 0:e30c9ba95bd4 25 Serial pc(USBTX, USBRX); // tx, rx
syasya 1:8d356d22e69c 26 // Top_Hall Pin
superphil06 0:e30c9ba95bd4 27
superphil06 0:e30c9ba95bd4 28
superphil06 0:e30c9ba95bd4 29
superphil06 0:e30c9ba95bd4 30
syasya 1:8d356d22e69c 31 /************ persistent file parameters section *****************/
syasya 1:8d356d22e69c 32 LocalFileSystem local("local"); // Create the local filesystem under the name "local"
superphil06 0:e30c9ba95bd4 33
superphil06 0:e30c9ba95bd4 34
superphil06 0:e30c9ba95bd4 35
superphil06 0:e30c9ba95bd4 36
superphil06 0:e30c9ba95bd4 37
superphil06 0:e30c9ba95bd4 38
superphil06 0:e30c9ba95bd4 39
syasya 1:8d356d22e69c 40 /********************* web server section **********************************/
syasya 1:8d356d22e69c 41 var_field_t tab_balise[10]; //une balise est présente dans le squelette
syasya 1:8d356d22e69c 42 int giCounter=0,giCounter2=0;// acces counting
syasya 1:8d356d22e69c 43 int giMode=0,giFlag=0;//to validate between mode automatic or manual
syasya 1:8d356d22e69c 44 float gfNmax=0.0,gfNmin=0.0,gfVit=0.0;//initialising values minimum and maximum for equation
syasya 1:8d356d22e69c 45 int giBrake = 0;
syasya 1:8d356d22e69c 46 int giPwm=0; //value initial for PWM mode manuel
syasya 1:8d356d22e69c 47 float gfPwm=0.0; //value initial for PWM mode auto
syasya 1:8d356d22e69c 48 float gfPwm_final=0.0; //value initial for incrementation PWM mode auto
syasya 1:8d356d22e69c 49 float gfVit_bride; //speed value (bride) in mode auto
syasya 1:8d356d22e69c 50 float gfVbat,gfIbat,gfTemp,gfPourc,gfGIrest,gfImes;
syasya 1:8d356d22e69c 51 float gfIrest = 60000;
superphil06 0:e30c9ba95bd4 52
syasya 1:8d356d22e69c 53 Ticker Tick;//Ticker to call function Gaz
syasya 1:8d356d22e69c 54 Ticker Tick2;//Ticker to call function Vitesse
syasya 1:8d356d22e69c 55 Ticker Tick3;//Ticker to call function Imesure
superphil06 0:e30c9ba95bd4 56
syasya 1:8d356d22e69c 57 /*********************** can bus section ************/
syasya 1:8d356d22e69c 58 // determine message ID used to send Gaz ref over can bus
syasya 1:8d356d22e69c 59 #define _CAN_DEBUG // used to debug can bus activity
syasya 1:8d356d22e69c 60 #define USE_CAN_REF // uncomment to receive gaz ref over can_bus
syasya 1:8d356d22e69c 61 CAN can_port (p30, p29); // initialisation du Bus CAN sur les broches 30 (rd) et 29(td) for lpc1768 + mbed shield
syasya 1:8d356d22e69c 62 bool bCan_Active=false;
syasya 1:8d356d22e69c 63 int iCounter=0;// a counter for speed counting
superphil06 0:e30c9ba95bd4 64
superphil06 0:e30c9ba95bd4 65
syasya 1:8d356d22e69c 66 DigitalOut led1(LED1); //initialisation des Leds présentes sur le micro-controleur Mbed*/
syasya 1:8d356d22e69c 67 DigitalOut led2(LED2);
syasya 1:8d356d22e69c 68 DigitalOut led3(LED3); // blink when can message is sent
syasya 1:8d356d22e69c 69 DigitalOut led4(LED4); // blink when can message is received
superphil06 0:e30c9ba95bd4 70
superphil06 0:e30c9ba95bd4 71
superphil06 0:e30c9ba95bd4 72
superphil06 0:e30c9ba95bd4 73
superphil06 0:e30c9ba95bd4 74
syasya 1:8d356d22e69c 75 //************ local function prototypes *******************
syasya 1:8d356d22e69c 76
syasya 1:8d356d22e69c 77 void Imessure () //function for mesuring battery current capacity to be called every 200ms
syasya 1:8d356d22e69c 78 {
syasya 1:8d356d22e69c 79
syasya 1:8d356d22e69c 80 int ic; // local counter
syasya 1:8d356d22e69c 81
syasya 1:8d356d22e69c 82 ic++;
syasya 1:8d356d22e69c 83 if(ic>5) { // to wait for calculation after 1s
syasya 1:8d356d22e69c 84 gfIrest = gfIrest - 1000; // because every 1s, the battery consume 1000
syasya 1:8d356d22e69c 85 gfGIrest = (gfIrest/INIT_IREST)*100;
syasya 1:8d356d22e69c 86
syasya 1:8d356d22e69c 87 if(gfGIrest>100)
syasya 1:8d356d22e69c 88 gfGIrest = 100;
syasya 1:8d356d22e69c 89 if(gfGIrest<0)
syasya 1:8d356d22e69c 90 gfGIrest=0;
syasya 1:8d356d22e69c 91
syasya 1:8d356d22e69c 92 ic=1;
syasya 1:8d356d22e69c 93 gfImes = 0;
syasya 1:8d356d22e69c 94 }
syasya 1:8d356d22e69c 95 //gfImes = (gfImes + gfVbat)/ic ;
syasya 1:8d356d22e69c 96 }
syasya 1:8d356d22e69c 97
syasya 1:8d356d22e69c 98
syasya 1:8d356d22e69c 99 void Affiche(void) //function only for display
syasya 1:8d356d22e69c 100 {
syasya 1:8d356d22e69c 101 gfVbat=(25*Vbat.read())/0.33; // battery tension value
syasya 1:8d356d22e69c 102 gfIbat=(33000*VImes.read())-13510; // current value
syasya 1:8d356d22e69c 103 gfTemp=((Vtemp.read()*3.3)/T_COEF)-273; // surrounding temperature
syasya 1:8d356d22e69c 104 gfPourc=((gfPwm*100)/255); // pedal turning percentage
syasya 1:8d356d22e69c 105
syasya 1:8d356d22e69c 106 pc.printf(" Vitesse = %g m/h\n\r",gfVit); //speed diplay
syasya 1:8d356d22e69c 107 pc.printf(" Vbat=%.3g \n\r",gfVbat); // battery tension display
syasya 1:8d356d22e69c 108 pc.printf(" Ibat=%.2f mA\n\r",gfIbat); //current value display
syasya 1:8d356d22e69c 109 pc.printf(" Temperature = %g C\n\r",gfTemp); // surrounding temperature display
syasya 1:8d356d22e69c 110 pc.printf(" Pourcentage = %.0f %% \n\r",gfPourc); //pedal turning percentage display
syasya 1:8d356d22e69c 111 pc.printf(" Capacite = %.0f %% \n\r",gfGIrest); // battery capacity display
syasya 1:8d356d22e69c 112
syasya 1:8d356d22e69c 113 }
syasya 1:8d356d22e69c 114
syasya 1:8d356d22e69c 115 void Registre_PLD(void) // function for internal checkups display
syasya 1:8d356d22e69c 116 {
syasya 1:8d356d22e69c 117
syasya 1:8d356d22e69c 118 /**** association with block io****/
syasya 1:8d356d22e69c 119 int iSect = MyPLD.read() & 7;
syasya 1:8d356d22e69c 120 int iDir = MyPLD.read() & 8;
syasya 1:8d356d22e69c 121 int iFLTA = MyPLD.read() & 16;
syasya 1:8d356d22e69c 122 int iOver_Current = MyPLD.read() & 64;
syasya 1:8d356d22e69c 123
syasya 1:8d356d22e69c 124 pc.printf("\n\r\n\r");
syasya 1:8d356d22e69c 125
syasya 1:8d356d22e69c 126 pc.printf(" Secteur : %d\n\r" , iSect);
syasya 1:8d356d22e69c 127
syasya 1:8d356d22e69c 128 //direction
syasya 1:8d356d22e69c 129 if ( iDir == 0)
syasya 1:8d356d22e69c 130 pc.printf(" Direction = ARRIERE \n\r");
syasya 1:8d356d22e69c 131 else {
syasya 1:8d356d22e69c 132 pc.printf(" Direction = AVANCE \n\r");
syasya 1:8d356d22e69c 133 }
syasya 1:8d356d22e69c 134 //braking system
syasya 1:8d356d22e69c 135 if ( giBrake == 0)
syasya 1:8d356d22e69c 136 pc.printf(" Brake = ON \n\r");
syasya 1:8d356d22e69c 137 if ( giBrake != 0)
syasya 1:8d356d22e69c 138 pc.printf(" Brake = OFF \n\r");
syasya 1:8d356d22e69c 139 //internal error
syasya 1:8d356d22e69c 140 if ( iFLTA == 1)
syasya 1:8d356d22e69c 141 pc.printf(" Il y a un erreur \n\r");
syasya 1:8d356d22e69c 142 if ( iFLTA != 1)
syasya 1:8d356d22e69c 143 pc.printf(" Pas d'erreur \n\r");
syasya 1:8d356d22e69c 144 //overcurrent
syasya 1:8d356d22e69c 145 if ( iOver_Current == 0)
syasya 1:8d356d22e69c 146 pc.printf(" Over Current \n\r");
syasya 1:8d356d22e69c 147 if ( iOver_Current != 0)
syasya 1:8d356d22e69c 148 pc.printf(" Normal Current \n\r");
syasya 1:8d356d22e69c 149
syasya 1:8d356d22e69c 150 pc.printf("\n\r");
syasya 1:8d356d22e69c 151
syasya 1:8d356d22e69c 152 }
syasya 1:8d356d22e69c 153
syasya 1:8d356d22e69c 154
syasya 1:8d356d22e69c 155
syasya 1:8d356d22e69c 156 /**************** Read persistent data from text file located on local file system ****************/
syasya 1:8d356d22e69c 157 void Read_file(void)
syasya 1:8d356d22e69c 158 {
syasya 1:8d356d22e69c 159 FILE* Calibrage = fopen("/local/TEST.txt","r");
syasya 1:8d356d22e69c 160
syasya 1:8d356d22e69c 161 if(Calibrage != NULL) {
syasya 1:8d356d22e69c 162 pc.printf(" OK\n\r");
syasya 1:8d356d22e69c 163 fscanf (Calibrage, "%g %g %g %g", &gfNmin,&gfNmax,&gfVit_bride);
syasya 1:8d356d22e69c 164 pc.printf(" Nmin = %.3g \n\r",gfNmin);
syasya 1:8d356d22e69c 165 pc.printf(" Nmax = %.3g \n\r",gfNmax);
syasya 1:8d356d22e69c 166 pc.printf(" Vbride = %.2f\n\r",gfVit_bride);
syasya 1:8d356d22e69c 167
syasya 1:8d356d22e69c 168 } else {
syasya 1:8d356d22e69c 169
syasya 1:8d356d22e69c 170 pc.printf(" KO\n\r");
syasya 1:8d356d22e69c 171 }
syasya 1:8d356d22e69c 172
syasya 1:8d356d22e69c 173 fclose(Calibrage);
syasya 1:8d356d22e69c 174 }
syasya 1:8d356d22e69c 175
syasya 1:8d356d22e69c 176 //************** calibation gaz function needed to record min_gaz and max_gaz value to persistent text file ******************
syasya 1:8d356d22e69c 177 void Calibration(void)
syasya 1:8d356d22e69c 178 {
syasya 1:8d356d22e69c 179 char cNext=0; //a variable just to exit command scanf
syasya 1:8d356d22e69c 180
syasya 1:8d356d22e69c 181 FILE* Calibrage =fopen("/local/TEST.txt","w"); //opening file
syasya 1:8d356d22e69c 182 if(Calibrage != NULL) { //validation for file existence
syasya 1:8d356d22e69c 183 pc.printf(" OK\n\r");
syasya 1:8d356d22e69c 184 switch (giFlag) {
syasya 1:8d356d22e69c 185 case 0 ://calibration of pedal
syasya 1:8d356d22e69c 186
syasya 1:8d356d22e69c 187 pc.printf(" lachez la poignee, appuyez 'k' et 'entree' \n\r");
syasya 1:8d356d22e69c 188 pc.scanf(" %c",&cNext);
syasya 1:8d356d22e69c 189 gfNmin = Val_Poignee.read();
syasya 1:8d356d22e69c 190 pc.printf(" Nmin = %.3g \n\r",gfNmin);
syasya 1:8d356d22e69c 191
syasya 1:8d356d22e69c 192 pc.printf(" enfoncez la poignee, appuyez 'k' et 'entree'\n\r");
syasya 1:8d356d22e69c 193 pc.scanf(" %c",&cNext);
syasya 1:8d356d22e69c 194 gfNmax = Val_Poignee.read();
syasya 1:8d356d22e69c 195 pc.printf(" Nmax = %.3g \n\r",gfNmax);
syasya 1:8d356d22e69c 196 break;
syasya 1:8d356d22e69c 197
syasya 1:8d356d22e69c 198 case 1 ://calibration of maximum speed
syasya 1:8d356d22e69c 199 pc.printf(" veuillez saisir la vitesse de la bride : \n\r");
syasya 1:8d356d22e69c 200 pc.scanf(" %f",&gfVit_bride);
syasya 1:8d356d22e69c 201 break;
syasya 1:8d356d22e69c 202
syasya 1:8d356d22e69c 203
syasya 1:8d356d22e69c 204 }
syasya 1:8d356d22e69c 205 } else {
syasya 1:8d356d22e69c 206 pc.printf(" KO\n\r");
syasya 1:8d356d22e69c 207 }
syasya 1:8d356d22e69c 208 fprintf(Calibrage,"%f %f %f %f",gfNmin,gfNmax,gfVit_bride,gfIrest);//saving infos in text file
syasya 1:8d356d22e69c 209 fclose(Calibrage);
syasya 1:8d356d22e69c 210 }
syasya 1:8d356d22e69c 211
syasya 1:8d356d22e69c 212
syasya 1:8d356d22e69c 213
syasya 1:8d356d22e69c 214 // ************top hall counting interrupt needed for speed measurement
syasya 1:8d356d22e69c 215 void toggle(void)
syasya 1:8d356d22e69c 216 {
syasya 1:8d356d22e69c 217 giCounter=giCounter+1;
syasya 1:8d356d22e69c 218
syasya 1:8d356d22e69c 219 }
syasya 1:8d356d22e69c 220
syasya 1:8d356d22e69c 221 //********************** timer interrupt for speed measurement each 100ms *************************
syasya 1:8d356d22e69c 222 void Vitesse(void)
syasya 1:8d356d22e69c 223 {
syasya 1:8d356d22e69c 224 giCounter2=giCounter;
syasya 1:8d356d22e69c 225 giCounter=0;
syasya 1:8d356d22e69c 226
syasya 1:8d356d22e69c 227 gfVit=((float)giCounter2*2*PI*RADIUS*3600)/(6*NBPOLES*DELTA_T);// speed calculation
syasya 1:8d356d22e69c 228 }
syasya 1:8d356d22e69c 229
syasya 1:8d356d22e69c 230 /*********************** INITIALISATION **********************/
syasya 1:8d356d22e69c 231 void Initial(void)
syasya 1:8d356d22e69c 232 {
syasya 1:8d356d22e69c 233 Valid_PWM.write(0);
syasya 1:8d356d22e69c 234 MyPLD.write(0);
syasya 1:8d356d22e69c 235 Valid_PWM.write(1);
syasya 1:8d356d22e69c 236 Read_file();
syasya 1:8d356d22e69c 237 Valid_PWM_In.mode(PullUp);
syasya 1:8d356d22e69c 238
syasya 1:8d356d22e69c 239 }
syasya 1:8d356d22e69c 240
syasya 1:8d356d22e69c 241
syasya 1:8d356d22e69c 242 //********************* Timer Interrupt for gaz ref management each 10ms ********************
syasya 1:8d356d22e69c 243 void Gaz(void)
syasya 1:8d356d22e69c 244 {
syasya 1:8d356d22e69c 245 giBrake = MyPLD.read() & 32;
syasya 1:8d356d22e69c 246
syasya 1:8d356d22e69c 247
syasya 1:8d356d22e69c 248 switch (giMode) {
syasya 1:8d356d22e69c 249 case 0 ://mode manuel
syasya 1:8d356d22e69c 250
syasya 1:8d356d22e69c 251 if (giPwm<0)
syasya 1:8d356d22e69c 252 giPwm=0;
syasya 1:8d356d22e69c 253 if (giPwm>255)
syasya 1:8d356d22e69c 254 giPwm=255;
syasya 1:8d356d22e69c 255
syasya 1:8d356d22e69c 256 MyPLD.write(giPwm);
syasya 1:8d356d22e69c 257 break;
syasya 1:8d356d22e69c 258 case 1 :// mode auto
syasya 1:8d356d22e69c 259
syasya 1:8d356d22e69c 260 gfPwm = 255*(Val_Poignee.read()-gfNmin)/(gfNmax-gfNmin);
syasya 1:8d356d22e69c 261 if (gfPwm<0)
syasya 1:8d356d22e69c 262 gfPwm=0;
syasya 1:8d356d22e69c 263 if (gfPwm>255)
syasya 1:8d356d22e69c 264 gfPwm=255;
syasya 1:8d356d22e69c 265
syasya 1:8d356d22e69c 266 //safety
syasya 1:8d356d22e69c 267 if ( giBrake == 0) {
syasya 1:8d356d22e69c 268 gfPwm_final = 0;
syasya 1:8d356d22e69c 269 } else if (gfVit >= gfVit_bride) {
syasya 1:8d356d22e69c 270 if (gfPwm_final >= 1.0)
syasya 1:8d356d22e69c 271 gfPwm_final = gfPwm_final-1.0;
syasya 1:8d356d22e69c 272 } else if (gfPwm_final < gfPwm) {
syasya 1:8d356d22e69c 273 gfPwm_final = gfPwm_final+1.0;
syasya 1:8d356d22e69c 274 } else if (gfPwm_final >= gfPwm) {
syasya 1:8d356d22e69c 275 gfPwm_final = gfPwm_final-1.0;
syasya 1:8d356d22e69c 276 }
syasya 1:8d356d22e69c 277
syasya 1:8d356d22e69c 278
syasya 1:8d356d22e69c 279 MyPLD.write(gfPwm_final);
syasya 1:8d356d22e69c 280 break;
syasya 1:8d356d22e69c 281 }
syasya 1:8d356d22e69c 282 }
syasya 1:8d356d22e69c 283
syasya 1:8d356d22e69c 284
superphil06 0:e30c9ba95bd4 285 /********* main cgi function used to patch data to the web server thread **********************************/
superphil06 0:e30c9ba95bd4 286
superphil06 0:e30c9ba95bd4 287
superphil06 0:e30c9ba95bd4 288
superphil06 0:e30c9ba95bd4 289
syasya 1:8d356d22e69c 290
syasya 1:8d356d22e69c 291 void CGI_Function(void) // cgi function that patch web data to empty web page
syasya 1:8d356d22e69c 292 {
syasya 1:8d356d22e69c 293
syasya 1:8d356d22e69c 294 gfVbat=(25*Vbat.read())/0.33;
syasya 1:8d356d22e69c 295 gfIbat=(33000*VImes.read())-13510;
syasya 1:8d356d22e69c 296 gfTemp=((Vtemp.read()*3.3)/T_COEF)-273;
syasya 1:8d356d22e69c 297 gfPourc=((gfPwm*100)/255);
syasya 1:8d356d22e69c 298
syasya 1:8d356d22e69c 299 char ma_chaine4[20]= {}; // needed to form html response
syasya 1:8d356d22e69c 300 sprintf (ma_chaine4,"%d",iCounter);// convert speed as ascii string
syasya 1:8d356d22e69c 301 Html_Patch (tab_balise,0,ma_chaine4);
syasya 1:8d356d22e69c 302 iCounter++;
syasya 1:8d356d22e69c 303
syasya 1:8d356d22e69c 304 sprintf (ma_chaine4,"%f",gfVbat);
syasya 1:8d356d22e69c 305 Html_Patch (tab_balise,1,ma_chaine4);// patch first label with dyn.string
syasya 1:8d356d22e69c 306
syasya 1:8d356d22e69c 307 sprintf (ma_chaine4,"%.4f",gfIbat);
syasya 1:8d356d22e69c 308 Html_Patch (tab_balise,2,ma_chaine4);
syasya 1:8d356d22e69c 309
syasya 1:8d356d22e69c 310 sprintf (ma_chaine4,"%.4f",gfTemp);
syasya 1:8d356d22e69c 311 Html_Patch (tab_balise,3,ma_chaine4);
syasya 1:8d356d22e69c 312
syasya 1:8d356d22e69c 313 sprintf (ma_chaine4,"%.4f",gfPourc);
syasya 1:8d356d22e69c 314 Html_Patch (tab_balise,4,ma_chaine4);
syasya 1:8d356d22e69c 315
syasya 1:8d356d22e69c 316 sprintf (ma_chaine4,"%.4f",gfVit);
syasya 1:8d356d22e69c 317 Html_Patch (tab_balise,5,ma_chaine4);
syasya 1:8d356d22e69c 318
syasya 1:8d356d22e69c 319 sprintf (ma_chaine4,"%.4f",gfGIrest);
syasya 1:8d356d22e69c 320 Html_Patch (tab_balise,6,ma_chaine4);
syasya 1:8d356d22e69c 321
syasya 1:8d356d22e69c 322
syasya 1:8d356d22e69c 323 }
syasya 1:8d356d22e69c 324
syasya 1:8d356d22e69c 325
syasya 1:8d356d22e69c 326 /*********************** CAN BUS SECTION **********************/
syasya 1:8d356d22e69c 327
syasya 1:8d356d22e69c 328
syasya 1:8d356d22e69c 329
syasya 1:8d356d22e69c 330 void CAN_REC_THREAD(void const *args)
syasya 1:8d356d22e69c 331 {
syasya 1:8d356d22e69c 332 int iCount,iError;
syasya 1:8d356d22e69c 333
syasya 1:8d356d22e69c 334 while (bCan_Active) {
syasya 1:8d356d22e69c 335 Thread::wait(100);// wait 100ms
syasya 1:8d356d22e69c 336
syasya 1:8d356d22e69c 337 }
syasya 1:8d356d22e69c 338
syasya 1:8d356d22e69c 339 }
syasya 1:8d356d22e69c 340
syasya 1:8d356d22e69c 341
syasya 1:8d356d22e69c 342
syasya 1:8d356d22e69c 343 //*************************** main function *****************************************
syasya 1:8d356d22e69c 344 int main()
syasya 1:8d356d22e69c 345 {
syasya 1:8d356d22e69c 346 //pc.printf("\n demarrage\n\r");
syasya 1:8d356d22e69c 347 Initial();
syasya 1:8d356d22e69c 348
syasya 1:8d356d22e69c 349 Valid_PWM_In.rise(&toggle);
syasya 1:8d356d22e69c 350 Tick.attach(&Gaz,T_TICKER);
syasya 1:8d356d22e69c 351 Tick2.attach(&Vitesse,DELTA_T);
syasya 1:8d356d22e69c 352 Tick3.attach(&Imessure,T_REST);
syasya 1:8d356d22e69c 353
syasya 1:8d356d22e69c 354 char cChoix=0;
syasya 1:8d356d22e69c 355
syasya 1:8d356d22e69c 356 //***************************************** web section ********************************************/
syasya 1:8d356d22e69c 357 Init_Web_Server(&CGI_Function); // create and initialize tcp server socket and pass function pointer to local CGI function
syasya 1:8d356d22e69c 358 Thread WebThread(Web_Server_Thread);// create and launch web server thread
syasya 1:8d356d22e69c 359 /********* main cgi function used to patch data to the web server thread **********************************/
syasya 1:8d356d22e69c 360 Gen_HtmlCode_From_File("/local/pagecgi4.htm",tab_balise,7);// read and localise ^VARDEF[X] tag in empty html file
syasya 1:8d356d22e69c 361 //******************************************* end web section ************************************* /
syasya 1:8d356d22e69c 362
superphil06 0:e30c9ba95bd4 363
superphil06 0:e30c9ba95bd4 364
superphil06 0:e30c9ba95bd4 365
superphil06 0:e30c9ba95bd4 366 //********************* can bus section initialisation *******************************************
syasya 1:8d356d22e69c 367 bCan_Active=true;// needed to lauchn CAN thread
syasya 1:8d356d22e69c 368 Thread CanThread(CAN_REC_THREAD);// create and launch can receiver thread
superphil06 0:e30c9ba95bd4 369 //********************* end can bus section *****************************************************
superphil06 0:e30c9ba95bd4 370
superphil06 0:e30c9ba95bd4 371
syasya 1:8d356d22e69c 372 while(cChoix!='q' and cChoix!='Q') {
syasya 1:8d356d22e69c 373 pc.printf(" veuillez saisir un choix parmi la liste proposee: \n\r");
syasya 1:8d356d22e69c 374 pc.printf(" a:Mode Manuel\n\r");
syasya 1:8d356d22e69c 375 pc.printf(" b:Mode Auto \n\r");
syasya 1:8d356d22e69c 376 pc.printf(" c:Calibration \n\r");
syasya 1:8d356d22e69c 377 pc.printf(" d:Registre PLD \n\r");
syasya 1:8d356d22e69c 378 pc.printf(" e:Affiche vitesse \n\r");
syasya 1:8d356d22e69c 379 pc.printf(" f:Reset capacite \n\r");
syasya 1:8d356d22e69c 380 pc.printf(" q:Quitter \n\r");
syasya 1:8d356d22e69c 381
syasya 1:8d356d22e69c 382 /************* multithreading : main thread need to sleep in order to allow web response */
syasya 1:8d356d22e69c 383 while (pc.readable()==0) { // determine if char available
syasya 1:8d356d22e69c 384 Thread::wait(10); // wait 10 until char available on serial input
syasya 1:8d356d22e69c 385 }
syasya 1:8d356d22e69c 386 /************* end of main thread sleep ****************/
syasya 1:8d356d22e69c 387
syasya 1:8d356d22e69c 388
syasya 1:8d356d22e69c 389
syasya 1:8d356d22e69c 390 pc.scanf(" %c",&cChoix);
syasya 1:8d356d22e69c 391 switch (cChoix) {
syasya 1:8d356d22e69c 392 case 'a':
syasya 1:8d356d22e69c 393 giMode=0;//activation mode manual
syasya 1:8d356d22e69c 394 pc.printf(" veuillez saisir la valeur Pwm (0 jusqu'au 255) : \n\r");
syasya 1:8d356d22e69c 395 pc.scanf("%d",&giPwm);
syasya 1:8d356d22e69c 396 break;
syasya 1:8d356d22e69c 397
syasya 1:8d356d22e69c 398 case 'b':
syasya 1:8d356d22e69c 399 giMode=1;//activation mode auto
syasya 1:8d356d22e69c 400 giFlag=1;//activation calibration for speed limit
syasya 1:8d356d22e69c 401 Calibration();
syasya 1:8d356d22e69c 402 break;
syasya 1:8d356d22e69c 403
syasya 1:8d356d22e69c 404 case 'c':
syasya 1:8d356d22e69c 405 giMode=0;//activation mode manual to stop speed ticker function
syasya 1:8d356d22e69c 406 giFlag=0;//activation calibration for pedal
syasya 1:8d356d22e69c 407 Calibration();
syasya 1:8d356d22e69c 408 break;
syasya 1:8d356d22e69c 409
syasya 1:8d356d22e69c 410 case 'd':
syasya 1:8d356d22e69c 411 giMode=1;//activation mode auto to start speed ticker function
syasya 1:8d356d22e69c 412 Registre_PLD();
syasya 1:8d356d22e69c 413 break;
syasya 1:8d356d22e69c 414
syasya 1:8d356d22e69c 415 case 'e':
syasya 1:8d356d22e69c 416 giMode=1;//activation mode auto
syasya 1:8d356d22e69c 417 Affiche();
syasya 1:8d356d22e69c 418 break;
syasya 1:8d356d22e69c 419
syasya 1:8d356d22e69c 420 case 'f':
syasya 1:8d356d22e69c 421 giMode=1;//activation mode auto
syasya 1:8d356d22e69c 422 gfIrest=60000; // initialisation
syasya 1:8d356d22e69c 423 break;
syasya 1:8d356d22e69c 424
syasya 1:8d356d22e69c 425 case 'q':
syasya 1:8d356d22e69c 426 giMode=0;//activation mode manual
syasya 1:8d356d22e69c 427 Valid_PWM.write(0);
syasya 1:8d356d22e69c 428 break;
syasya 1:8d356d22e69c 429 }
syasya 1:8d356d22e69c 430 } // end while
syasya 1:8d356d22e69c 431
syasya 1:8d356d22e69c 432 //************** thread deinit *********************
syasya 1:8d356d22e69c 433 // DeInit_Web_Server();
syasya 1:8d356d22e69c 434 //bCan_Active=false;
syasya 1:8d356d22e69c 435 //CanThread=false;// close can received thread
syasya 1:8d356d22e69c 436 pc.printf(" fin programme scooter mbed \n\r");
superphil06 0:e30c9ba95bd4 437 } // end main