html

Dependencies:   mbed bloc_io mbed-rtos html EthernetInterface

Committer:
viale
Date:
Fri Dec 13 13:50:12 2019 +0000
Revision:
3:5945b9edc15a
Parent:
2:172619ae2eb7
aaaaaaa

Who changed what in which revision?

UserRevisionLine numberNew contents of line
superphil06 0:e30c9ba95bd4 1 //#include "EthernetInterface.h"
superphil06 0:e30c9ba95bd4 2 #include <stdlib.h>
RomainCorradi 1:687bcd4b1c6c 3 #include <stdio.h>
superphil06 0:e30c9ba95bd4 4 #include <string.h>
superphil06 0:e30c9ba95bd4 5 #include "mbed.h"
superphil06 0:e30c9ba95bd4 6 #include "rtos.h" // need for main thread sleep
superphil06 0:e30c9ba95bd4 7 #include "html.h" // need for html patch working with web server
superphil06 0:e30c9ba95bd4 8 #include "bloc_io.h"
superphil06 0:e30c9ba95bd4 9 #define RADIUS 0.2F // wheel size
superphil06 0:e30c9ba95bd4 10 #define NBPOLES 8 // magnetic pole number
superphil06 0:e30c9ba95bd4 11 #define DELTA_T 0.1F // speed measurement counting period
viale 3:5945b9edc15a 12 #define PI 3.14F // PI
viale 3:5945b9edc15a 13 #define SensibiliteTemp 0.01F // doc
viale 3:5945b9edc15a 14 #define CoeffTensionbat 77.5F // determiner manuellemnt
viale 3:5945b9edc15a 15 #define SensibiliteCourant 0.185F // doc ACS712
viale 3:5945b9edc15a 16 #define batt 2 // 2 A pendant 1 minute Jauge d'energie capacité
viale 3:5945b9edc15a 17 #define itest 0.0333 // A*minutes
viale 3:5945b9edc15a 18 #define PDTI 1.85F // 33/(28+33)*3.3 = 1.85
viale 3:5945b9edc15a 19 #define cstCAN 0.001
viale 3:5945b9edc15a 20
viale 3:5945b9edc15a 21
RomainCorradi 2:172619ae2eb7 22 DigitalOut PWM_VALID (p21);
viale 3:5945b9edc15a 23 InterruptIn TopHall (p22);// valid pmw mbed pin
viale 3:5945b9edc15a 24 AnalogIn POIGNEE (p17); // broche poignee
viale 3:5945b9edc15a 25 AnalogIn Temp(p19); // broche temperature
viale 3:5945b9edc15a 26 AnalogIn Vbat(p18);// analog input connected to mbed
viale 3:5945b9edc15a 27 AnalogIn Ibat(p20); // broche courant batterie
superphil06 0:e30c9ba95bd4 28 Bloc_IO MyPLD(p25,p26,p5,p6,p7,p8,p9,p10,p23,p24);// instantiate object needed to communicate with PLD
viale 3:5945b9edc15a 29 Serial pc(USBTX, USBRX);// tx, rx
viale 3:5945b9edc15a 30
RomainCorradi 1:687bcd4b1c6c 31 void PWM ();
RomainCorradi 2:172619ae2eb7 32 void Mesure();
RomainCorradi 2:172619ae2eb7 33 void CalculV ();
viale 3:5945b9edc15a 34 void saveFile();//sauvegarde fichier
viale 3:5945b9edc15a 35 void MesureTemp(void);
viale 3:5945b9edc15a 36 void MesureVbat(void);
viale 3:5945b9edc15a 37 void MesureIbat(void);
viale 3:5945b9edc15a 38 void Mesurepoingnee(void); // pourcentage POIGNEE
viale 3:5945b9edc15a 39 void MesuresWeb(void);
viale 3:5945b9edc15a 40 void Receive ();
viale 3:5945b9edc15a 41
viale 3:5945b9edc15a 42 int iCounter1Sec;
viale 3:5945b9edc15a 43 Ticker T_Mesures;
RomainCorradi 1:687bcd4b1c6c 44 Ticker AUTO;
RomainCorradi 2:172619ae2eb7 45 Ticker CalculVitesse;
viale 3:5945b9edc15a 46 float GazMax, GazMin, caparestante;
RomainCorradi 2:172619ae2eb7 47 int pwmmanuel,x,Overcurrent,Brake,FLTA,Direction,HALLC,HALLB,HALLA;
RomainCorradi 2:172619ae2eb7 48 char cChoix;
RomainCorradi 2:172619ae2eb7 49 int pwm_final=0;
RomainCorradi 2:172619ae2eb7 50 int valpwm=0;
RomainCorradi 2:172619ae2eb7 51 int mode=0;
RomainCorradi 2:172619ae2eb7 52 float vitesse;
RomainCorradi 2:172619ae2eb7 53 int tophall;
RomainCorradi 2:172619ae2eb7 54 int tophalltotal;
RomainCorradi 2:172619ae2eb7 55 int vitesssebride;
RomainCorradi 2:172619ae2eb7 56 float vitessemesure;
RomainCorradi 2:172619ae2eb7 57 float vitessebride = 25.0;
RomainCorradi 2:172619ae2eb7 58 int tophallpartiel;
viale 3:5945b9edc15a 59 float temp,vbat, ibat, pourcentage;
viale 3:5945b9edc15a 60 float batterieAc = 0.0;
viale 3:5945b9edc15a 61 int a; // bus CAN
viale 3:5945b9edc15a 62 float valpoignee; //bus CAN
viale 3:5945b9edc15a 63
viale 3:5945b9edc15a 64
viale 3:5945b9edc15a 65 // UTILISATION DU BUS CAN ENVOIE
viale 3:5945b9edc15a 66 Ticker ticker;
viale 3:5945b9edc15a 67 DigitalOut led1(LED1);
viale 3:5945b9edc15a 68 DigitalOut led2(LED2);
viale 3:5945b9edc15a 69 DigitalOut led3(LED3); // blink when can message is sent
viale 3:5945b9edc15a 70 DigitalOut led4(LED4); // blink when can message is received
viale 3:5945b9edc15a 71
viale 3:5945b9edc15a 72 char counter = 0;
viale 3:5945b9edc15a 73
RomainCorradi 1:687bcd4b1c6c 74 // Top_Hall Pin
RomainCorradi 1:687bcd4b1c6c 75
superphil06 0:e30c9ba95bd4 76 /************ persistent file parameters section *****************/
RomainCorradi 1:687bcd4b1c6c 77 LocalFileSystem local("local");// Create the local filesystem under the name "local"
RomainCorradi 1:687bcd4b1c6c 78
RomainCorradi 1:687bcd4b1c6c 79
superphil06 0:e30c9ba95bd4 80 /********************* web server section **********************************/
superphil06 0:e30c9ba95bd4 81
superphil06 0:e30c9ba95bd4 82 var_field_t tab_balise[10]; //une balise est présente dans le squelette
superphil06 0:e30c9ba95bd4 83 int giCounter=0;// acces counting
superphil06 0:e30c9ba95bd4 84
superphil06 0:e30c9ba95bd4 85
viale 3:5945b9edc15a 86
superphil06 0:e30c9ba95bd4 87 /*********************** can bus section ************/
RomainCorradi 1:687bcd4b1c6c 88 // determine message ID used to send Gaz ref over can bus
superphil06 0:e30c9ba95bd4 89 #define _CAN_DEBUG // used to debug can bus activity
viale 3:5945b9edc15a 90 #define USE_CAN_REF // uncomment to receive gaz ref over can_bus
superphil06 0:e30c9ba95bd4 91 CAN can_port (p30, p29); // initialisation du Bus CAN sur les broches 30 (rd) et 29(td) for lpc1768 + mbed shield
superphil06 0:e30c9ba95bd4 92 bool bCan_Active=false;
superphil06 0:e30c9ba95bd4 93
superphil06 0:e30c9ba95bd4 94
viale 3:5945b9edc15a 95 //DigitalOut led1(LED1); //initialisation des Leds présentes sur le micro-controleur Mbed*/
viale 3:5945b9edc15a 96 //DigitalOut led2(LED2);
viale 3:5945b9edc15a 97 //DigitalOut led3(LED3); // blink when can message is sent
viale 3:5945b9edc15a 98 //DigitalOut led4(LED4); // blink when can message is received
viale 3:5945b9edc15a 99
superphil06 0:e30c9ba95bd4 100
superphil06 0:e30c9ba95bd4 101
RomainCorradi 1:687bcd4b1c6c 102
superphil06 0:e30c9ba95bd4 103 //************ local function prototypes *******************
superphil06 0:e30c9ba95bd4 104 /**************** Read persistent data from text file located on local file system ****************/
superphil06 0:e30c9ba95bd4 105 /**************** write persitant data to text file located on local file system ****************/
superphil06 0:e30c9ba95bd4 106
RomainCorradi 2:172619ae2eb7 107 void saveFile()
RomainCorradi 2:172619ae2eb7 108 {
RomainCorradi 2:172619ae2eb7 109 FILE *fp = fopen("/local/gr1.txt", "w");
viale 3:5945b9edc15a 110 if(fp != NULL) fprintf(fp,"valeur max : %f, valeur min: %f, tophalltotal: %d, vitesse de la bride: %f, tophallpartiel:%d, capacite restante: %f",GazMin,GazMax,tophalltotal,vitessebride,tophallpartiel,caparestante);
RomainCorradi 2:172619ae2eb7 111 else printf("ERREUR FICHIER NON VALIDE");
RomainCorradi 2:172619ae2eb7 112 fclose(fp);
superphil06 0:e30c9ba95bd4 113
RomainCorradi 2:172619ae2eb7 114 }
viale 3:5945b9edc15a 115
superphil06 0:e30c9ba95bd4 116 //************** calibation gaz function needed to record min_gaz and max_gaz value to persistent text file ******************
superphil06 0:e30c9ba95bd4 117
superphil06 0:e30c9ba95bd4 118
superphil06 0:e30c9ba95bd4 119 // ************top hall counting interrupt needed for speed measurement
superphil06 0:e30c9ba95bd4 120
superphil06 0:e30c9ba95bd4 121
superphil06 0:e30c9ba95bd4 122 //********************** timer interrupt for speed measurement each 100ms *************************
superphil06 0:e30c9ba95bd4 123
RomainCorradi 1:687bcd4b1c6c 124
superphil06 0:e30c9ba95bd4 125 //********************* Timer Interrupt for gaz ref management each 10ms ********************
superphil06 0:e30c9ba95bd4 126
superphil06 0:e30c9ba95bd4 127
superphil06 0:e30c9ba95bd4 128 /********* main cgi function used to patch data to the web server thread **********************************/
viale 3:5945b9edc15a 129
viale 3:5945b9edc15a 130
superphil06 0:e30c9ba95bd4 131 void CGI_Function(void) // cgi function that patch web data to empty web page
RomainCorradi 1:687bcd4b1c6c 132 {
RomainCorradi 1:687bcd4b1c6c 133 char ma_chaine4[20]= {}; // needed to form html response
superphil06 0:e30c9ba95bd4 134
viale 3:5945b9edc15a 135 sprintf (ma_chaine4,"%f",vitessemesure);
viale 3:5945b9edc15a 136 printf("chaine4=%s\n",ma_chaine4);
viale 3:5945b9edc15a 137 Html_Patch (tab_balise,0,ma_chaine4);
viale 3:5945b9edc15a 138
viale 3:5945b9edc15a 139 sprintf (ma_chaine4,"%f",vitessemesure);
viale 3:5945b9edc15a 140 printf("chaine4=%s\n",ma_chaine4);
viale 3:5945b9edc15a 141 Html_Patch (tab_balise,1,ma_chaine4);
viale 3:5945b9edc15a 142
viale 3:5945b9edc15a 143 sprintf (ma_chaine4,"%d",(int)((valpwm*100 )/ 255));
viale 3:5945b9edc15a 144 printf("chaine4=%s\n",ma_chaine4);
viale 3:5945b9edc15a 145 Html_Patch (tab_balise,2,ma_chaine4);
viale 3:5945b9edc15a 146
viale 3:5945b9edc15a 147 sprintf (ma_chaine4,"%f",(temp-273.15));
viale 3:5945b9edc15a 148 printf("chaine4=%s\n",ma_chaine4);
viale 3:5945b9edc15a 149 Html_Patch (tab_balise,3,ma_chaine4);
viale 3:5945b9edc15a 150
viale 3:5945b9edc15a 151 sprintf (ma_chaine4,"%f",vbat);
viale 3:5945b9edc15a 152 printf("chaine4=%s\n",ma_chaine4);
viale 3:5945b9edc15a 153 Html_Patch (tab_balise,4,ma_chaine4);
viale 3:5945b9edc15a 154
viale 3:5945b9edc15a 155 sprintf (ma_chaine4,"%f",ibat);
viale 3:5945b9edc15a 156 printf("chaine4=%s\n",ma_chaine4);
viale 3:5945b9edc15a 157 Html_Patch (tab_balise,5,ma_chaine4);
viale 3:5945b9edc15a 158
superphil06 0:e30c9ba95bd4 159 }
RomainCorradi 1:687bcd4b1c6c 160
RomainCorradi 1:687bcd4b1c6c 161
RomainCorradi 1:687bcd4b1c6c 162 /*********************** CAN BUS SECTION **********************/
RomainCorradi 1:687bcd4b1c6c 163
superphil06 0:e30c9ba95bd4 164 void CAN_REC_THREAD(void const *args)
RomainCorradi 1:687bcd4b1c6c 165 {
RomainCorradi 1:687bcd4b1c6c 166 int iCount,iError;
superphil06 0:e30c9ba95bd4 167
RomainCorradi 1:687bcd4b1c6c 168 while (bCan_Active) {
RomainCorradi 1:687bcd4b1c6c 169 Thread::wait(100);// wait 100ms
RomainCorradi 1:687bcd4b1c6c 170 // code todo
RomainCorradi 1:687bcd4b1c6c 171
superphil06 0:e30c9ba95bd4 172 }
viale 3:5945b9edc15a 173 }
RomainCorradi 1:687bcd4b1c6c 174
viale 3:5945b9edc15a 175 void Receive()
viale 3:5945b9edc15a 176 {
viale 3:5945b9edc15a 177 CANMessage msg;
viale 3:5945b9edc15a 178 if(can_port.read(msg)) {
viale 3:5945b9edc15a 179
viale 3:5945b9edc15a 180 valpoignee=*reinterpret_cast<int*>(msg.data)*cstCAN;
viale 3:5945b9edc15a 181 }
superphil06 0:e30c9ba95bd4 182 }
superphil06 0:e30c9ba95bd4 183 //*************************** main function *****************************************
RomainCorradi 1:687bcd4b1c6c 184 int main()
RomainCorradi 1:687bcd4b1c6c 185 {
viale 3:5945b9edc15a 186
viale 3:5945b9edc15a 187 caparestante = (batterieAc*100)/(batt);
RomainCorradi 1:687bcd4b1c6c 188 MyPLD.write(0);
RomainCorradi 2:172619ae2eb7 189 PWM_VALID.write(1);
RomainCorradi 1:687bcd4b1c6c 190 char carac;
RomainCorradi 1:687bcd4b1c6c 191 FILE *fp = fopen("/local/gr1.txt", "r");
RomainCorradi 1:687bcd4b1c6c 192 if(fp != NULL) {
viale 3:5945b9edc15a 193 fscanf(fp,"valeur max : %f, valeur min: %f, tophalltotal: %d, vitesse de la bride: %f, tophallpartiel:%d, capacite restante: %f",&GazMin,&GazMax,&tophalltotal,&vitessebride,&tophallpartiel,&caparestante);
viale 3:5945b9edc15a 194 printf("Valeur min:%f , Valeur max:%f ,tophalltotal:%d,vitesse de la bride:%f,tophallpartiel:%d, capacite restante: %f\n\r",GazMin,GazMax,tophalltotal,vitessebride,tophallpartiel,caparestante);
RomainCorradi 1:687bcd4b1c6c 195 } else
RomainCorradi 2:172619ae2eb7 196 printf("ERREUR FICHIER NON VALIDE\n\r");
RomainCorradi 1:687bcd4b1c6c 197 fclose(fp);
superphil06 0:e30c9ba95bd4 198
viale 3:5945b9edc15a 199 //***************************************** web section ********************************************/
viale 3:5945b9edc15a 200
viale 3:5945b9edc15a 201
superphil06 0:e30c9ba95bd4 202
viale 3:5945b9edc15a 203 Init_Web_Server(&CGI_Function); // create and initialize tcp server socket and pass function pointer to local CGI function
viale 3:5945b9edc15a 204 Thread WebThread(Web_Server_Thread);// create and launch web server thread
viale 3:5945b9edc15a 205 Gen_HtmlCode_From_File("/local/tintin.htm",tab_balise,5);
RomainCorradi 1:687bcd4b1c6c 206 /********* main cgi function used to patch data to the web server thread **********************************/
superphil06 0:e30c9ba95bd4 207
RomainCorradi 1:687bcd4b1c6c 208 //******************************************* end web section ************************************* /
superphil06 0:e30c9ba95bd4 209
superphil06 0:e30c9ba95bd4 210
viale 3:5945b9edc15a 211
viale 3:5945b9edc15a 212
viale 3:5945b9edc15a 213
viale 3:5945b9edc15a 214
superphil06 0:e30c9ba95bd4 215 //********************* can bus section initialisation *******************************************
superphil06 0:e30c9ba95bd4 216 //bCan_Active=true;// needed to lauchn CAN thread
superphil06 0:e30c9ba95bd4 217 //Thread CanThread(CAN_REC_THREAD);// create and launch can receiver thread
superphil06 0:e30c9ba95bd4 218 //********************* end can bus section *****************************************************
viale 3:5945b9edc15a 219 can_port.attach(&Receive,CAN::RxIrq);
RomainCorradi 2:172619ae2eb7 220 TopHall.mode(PullUp);
RomainCorradi 2:172619ae2eb7 221 AUTO.attach(&PWM,0.02);
RomainCorradi 2:172619ae2eb7 222 TopHall.rise(&Mesure);
RomainCorradi 2:172619ae2eb7 223 CalculVitesse.attach(&CalculV,0.1);
viale 3:5945b9edc15a 224 T_Mesures.attach(&MesuresWeb,0.1);
RomainCorradi 1:687bcd4b1c6c 225 pc.printf("programme scooter mbed \n\r");
RomainCorradi 1:687bcd4b1c6c 226 while(cChoix!='q' and cChoix!='Q') {
RomainCorradi 1:687bcd4b1c6c 227 pc.printf("Veuillez saisir un choix parmi la liste proposee:\n\r");
RomainCorradi 1:687bcd4b1c6c 228 pc.printf("a:saisie consigne pwm\n\r");
RomainCorradi 1:687bcd4b1c6c 229 pc.printf("b:Calibration poignee\n\r");
RomainCorradi 1:687bcd4b1c6c 230 pc.printf("d:Mode automatique\n\r");
RomainCorradi 1:687bcd4b1c6c 231 pc.printf("e:Lecture du registre interne\n\r");
RomainCorradi 2:172619ae2eb7 232 pc.printf("f:Mesure de la vitesse\n\r");
RomainCorradi 2:172619ae2eb7 233 pc.printf("g: Saisie bride\n\r");
RomainCorradi 2:172619ae2eb7 234 pc.printf("h: Lecture vitesse\n\r");
RomainCorradi 2:172619ae2eb7 235 pc.printf("i: Compteur kilometrique\n\r");
RomainCorradi 2:172619ae2eb7 236 pc.printf("j: RAZ compteur partiel\n\r");
viale 3:5945b9edc15a 237 pc.printf("k: Valeur de la temperature\n\r");
viale 3:5945b9edc15a 238 pc.printf("l: rechargement batterie\n\r");
viale 3:5945b9edc15a 239 pc.printf("z: BUS CAN \n\r");
RomainCorradi 1:687bcd4b1c6c 240 pc.printf("q:quitter\n\r");
viale 3:5945b9edc15a 241
RomainCorradi 1:687bcd4b1c6c 242 //************* multithreading : main thread need to sleep in order to allow web response */
RomainCorradi 1:687bcd4b1c6c 243 while (pc.readable()==0) { // determine if char availabler
RomainCorradi 1:687bcd4b1c6c 244 Thread::wait(10); // wait 10 until char available on serial input
RomainCorradi 1:687bcd4b1c6c 245 }
RomainCorradi 1:687bcd4b1c6c 246 /************* end of main thread sleep ****************/
RomainCorradi 1:687bcd4b1c6c 247 pc.scanf("%c",&cChoix);
RomainCorradi 1:687bcd4b1c6c 248 switch (cChoix) {
RomainCorradi 2:172619ae2eb7 249 case 'a': // COMMANDE MANUEL
RomainCorradi 2:172619ae2eb7 250 mode=1;
RomainCorradi 1:687bcd4b1c6c 251 printf("veuillez entrer une valeur de PWM entre 0 et 255\n\r");
RomainCorradi 2:172619ae2eb7 252 scanf("%d",&pwmmanuel);
RomainCorradi 1:687bcd4b1c6c 253 break;
RomainCorradi 2:172619ae2eb7 254 case 'b': // CALIBRATION DE LA POIGNEE DE GAZ (VALEUR MIN ET MAX)
RomainCorradi 1:687bcd4b1c6c 255 AUTO.detach();
RomainCorradi 1:687bcd4b1c6c 256 PWM_VALID.write(0);
RomainCorradi 1:687bcd4b1c6c 257 if (PWM_VALID.read()==0) MyPLD.write(0);
RomainCorradi 1:687bcd4b1c6c 258 printf("Veuillez entrer n'importe quel caractere si vous etes OK pour la valeur min\n\r");
RomainCorradi 2:172619ae2eb7 259 scanf("%c",&carac);
RomainCorradi 1:687bcd4b1c6c 260 GazMin=POIGNEE.read();
RomainCorradi 1:687bcd4b1c6c 261 printf("\n\r");
RomainCorradi 1:687bcd4b1c6c 262 printf("Veuillez entrer n'importe quel caractere si vous etes OK pour la valeur max\n\r");
RomainCorradi 2:172619ae2eb7 263 scanf("%c",&carac);
viale 3:5945b9edc15a 264 GazMax=valpoignee;
RomainCorradi 1:687bcd4b1c6c 265 printf("\n\r");
RomainCorradi 1:687bcd4b1c6c 266 printf("Valeur de la poignee min:%g\n\r",GazMin);
RomainCorradi 1:687bcd4b1c6c 267 printf("Valeur de la poignee max:%g\n\r",GazMax);
RomainCorradi 2:172619ae2eb7 268 saveFile();
RomainCorradi 1:687bcd4b1c6c 269 break;
RomainCorradi 2:172619ae2eb7 270 case 'd':// MODE AUTOMATIQUE
RomainCorradi 2:172619ae2eb7 271 mode=0;
RomainCorradi 1:687bcd4b1c6c 272 break;
RomainCorradi 1:687bcd4b1c6c 273 case 'e':
RomainCorradi 1:687bcd4b1c6c 274 x=MyPLD.read();
RomainCorradi 1:687bcd4b1c6c 275 Overcurrent= (x & 64)/64 ; //Technique pour avoir la valeur en binaire
RomainCorradi 1:687bcd4b1c6c 276 Brake= (x & 32)/32;
RomainCorradi 1:687bcd4b1c6c 277 FLTA=(x & 16)/16;
RomainCorradi 1:687bcd4b1c6c 278 Direction=(x & 8)/8;
RomainCorradi 1:687bcd4b1c6c 279 HALLC=(x & 4)/4;
RomainCorradi 1:687bcd4b1c6c 280 HALLB=(x & 2)/2;
RomainCorradi 1:687bcd4b1c6c 281 HALLA= x & 1;
RomainCorradi 1:687bcd4b1c6c 282 int hall=0;
RomainCorradi 2:172619ae2eb7 283 if (HALLA == 1) {
RomainCorradi 2:172619ae2eb7 284 hall++;
RomainCorradi 1:687bcd4b1c6c 285 }
RomainCorradi 2:172619ae2eb7 286 if (HALLB == 1) {
RomainCorradi 2:172619ae2eb7 287 hall+=2;
RomainCorradi 1:687bcd4b1c6c 288 }
RomainCorradi 2:172619ae2eb7 289 if (HALLC == 1) {
RomainCorradi 1:687bcd4b1c6c 290 hall+=4;
RomainCorradi 1:687bcd4b1c6c 291 }
RomainCorradi 1:687bcd4b1c6c 292 pc.printf("hall=%d\r\n", hall);
RomainCorradi 2:172619ae2eb7 293 if (Overcurrent == 0) {
RomainCorradi 2:172619ae2eb7 294 printf("Surintensite dans le moteur\n\r ");
RomainCorradi 1:687bcd4b1c6c 295 } else {
RomainCorradi 2:172619ae2eb7 296 printf( "Pas de surintensite dans le moteur\n\r");
RomainCorradi 1:687bcd4b1c6c 297 }
RomainCorradi 2:172619ae2eb7 298
RomainCorradi 1:687bcd4b1c6c 299 if (Brake == 1) {
RomainCorradi 2:172619ae2eb7 300 printf("Frein desactive\n\r");
RomainCorradi 1:687bcd4b1c6c 301 } else {
RomainCorradi 2:172619ae2eb7 302 printf( "Frein active\n\r");
RomainCorradi 1:687bcd4b1c6c 303 }
RomainCorradi 2:172619ae2eb7 304
RomainCorradi 2:172619ae2eb7 305 if (FLTA == 1) { // verifier s'il n'y a pas de registre interne
RomainCorradi 2:172619ae2eb7 306 printf("pas erreur registre interne\n\r");
RomainCorradi 1:687bcd4b1c6c 307 } else {
RomainCorradi 2:172619ae2eb7 308 printf( "erreur registre interne \n\r");
RomainCorradi 1:687bcd4b1c6c 309 }
RomainCorradi 2:172619ae2eb7 310
RomainCorradi 1:687bcd4b1c6c 311 if (Direction == 1) {
RomainCorradi 2:172619ae2eb7 312 printf("marche avant active\n\r");
RomainCorradi 1:687bcd4b1c6c 313 } else {
RomainCorradi 2:172619ae2eb7 314 printf( "marche avant desactive\n\r");
RomainCorradi 1:687bcd4b1c6c 315 }
RomainCorradi 2:172619ae2eb7 316 break;
RomainCorradi 2:172619ae2eb7 317 case 'f': // VITESSE DE LA ROUE DU SCOOT
RomainCorradi 2:172619ae2eb7 318 printf("vitesse de la roue: %f\n\r",vitesse);
RomainCorradi 2:172619ae2eb7 319 break;
RomainCorradi 2:172619ae2eb7 320 case 'g': // SAISIE DE LA BRIDE
RomainCorradi 2:172619ae2eb7 321 printf("Veuillez saisir la valeur de la bride entre 0 et 30 km/h \n\r");
RomainCorradi 2:172619ae2eb7 322 scanf("%f",&vitessebride);
RomainCorradi 2:172619ae2eb7 323 saveFile();
viale 3:5945b9edc15a 324 printf("Valeur de la bride \n\r",vitessebride);
RomainCorradi 2:172619ae2eb7 325 break;
RomainCorradi 2:172619ae2eb7 326 case 'h': // VITESSE DE LA ROUE DU SCOOT
RomainCorradi 2:172619ae2eb7 327 printf("Vitesse:%1.3f km/h \n\r",vitessemesure*3.6);
RomainCorradi 2:172619ae2eb7 328 break;
RomainCorradi 2:172619ae2eb7 329 case 'i': // DISTANCE DE LA ROUE TOTAL ET PARTIEL
RomainCorradi 2:172619ae2eb7 330 printf("Distance parcourue totale: %f metres\n\r",(tophalltotal*2*PI*RADIUS)/(6*NBPOLES));
RomainCorradi 2:172619ae2eb7 331 printf("Distance parcourue partielle: %f metres\n\r",(tophallpartiel*2*PI*RADIUS)/(6*NBPOLES));
RomainCorradi 2:172619ae2eb7 332 break;
RomainCorradi 2:172619ae2eb7 333 case 'j': // REMISE A ZERO DU COMPTEUR PARTIEL
RomainCorradi 2:172619ae2eb7 334 printf("Appuyez sur n'importe quel caractere pour remettre a zero le compteur partiel\n\r");
RomainCorradi 2:172619ae2eb7 335 scanf("%c",&carac);
RomainCorradi 2:172619ae2eb7 336 tophallpartiel=0;
RomainCorradi 2:172619ae2eb7 337 saveFile();
RomainCorradi 2:172619ae2eb7 338 break;
viale 3:5945b9edc15a 339 case 'k': //VALEUR DE LA TEMPERATURE , TENSION BATTERIE, COURANT , POURCENTAGE POINGNEE ,JAUGE D'ENERGIE
viale 3:5945b9edc15a 340
viale 3:5945b9edc15a 341 MesureTemp();
viale 3:5945b9edc15a 342 MesureVbat();
viale 3:5945b9edc15a 343 MesureIbat();
viale 3:5945b9edc15a 344 Mesurepoingnee();
viale 3:5945b9edc15a 345 printf("l'intensite de la batterie est de %1.3fA et jauge d'energie = %f pourcentage\n\r", ibat,(batterieAc*100)/(batt) );
viale 3:5945b9edc15a 346 break;
viale 3:5945b9edc15a 347 case 'l':
viale 3:5945b9edc15a 348 batterieAc = batt;
viale 3:5945b9edc15a 349 printf("batterie rechargee\n\r");
viale 3:5945b9edc15a 350 break;
RomainCorradi 2:172619ae2eb7 351 case 'q': // QUITTER LE PROGRAMME
RomainCorradi 2:172619ae2eb7 352 AUTO.detach();
RomainCorradi 2:172619ae2eb7 353 CalculVitesse.detach();
RomainCorradi 2:172619ae2eb7 354 PWM_VALID.write(0);
RomainCorradi 2:172619ae2eb7 355 if (PWM_VALID.read()==0) MyPLD.write(0);
RomainCorradi 2:172619ae2eb7 356 printf("BYE");
RomainCorradi 2:172619ae2eb7 357 break;
viale 3:5945b9edc15a 358
viale 3:5945b9edc15a 359 case 'z': //VALEUR CAN
viale 3:5945b9edc15a 360 printf("valeur recu CAN : %f\n\r", valpoignee);
viale 3:5945b9edc15a 361 break;
RomainCorradi 1:687bcd4b1c6c 362 }
RomainCorradi 2:172619ae2eb7 363 saveFile();
RomainCorradi 2:172619ae2eb7 364 pc.printf("fin programme scooter mbed\n\r");
RomainCorradi 2:172619ae2eb7 365 } // end while
RomainCorradi 2:172619ae2eb7 366 }
RomainCorradi 1:687bcd4b1c6c 367 //************** thread deinit *********************
viale 3:5945b9edc15a 368
RomainCorradi 1:687bcd4b1c6c 369 //DeInit_Web_Server();
RomainCorradi 1:687bcd4b1c6c 370 //bCan_Active=false;
RomainCorradi 1:687bcd4b1c6c 371 //CanThread=false;// close can received thread
RomainCorradi 1:687bcd4b1c6c 372
viale 3:5945b9edc15a 373
viale 3:5945b9edc15a 374
viale 3:5945b9edc15a 375
viale 3:5945b9edc15a 376 // END MAIN
RomainCorradi 1:687bcd4b1c6c 377 void PWM()
RomainCorradi 1:687bcd4b1c6c 378 {
viale 3:5945b9edc15a 379 Receive();
RomainCorradi 1:687bcd4b1c6c 380 x=MyPLD.read();
RomainCorradi 1:687bcd4b1c6c 381 Brake= (x & 32)/32;
viale 3:5945b9edc15a 382
viale 3:5945b9edc15a 383
viale 3:5945b9edc15a 384 iCounter1Sec++;
viale 3:5945b9edc15a 385
viale 3:5945b9edc15a 386 if (iCounter1Sec == 50) { // compteur 1 seconde
viale 3:5945b9edc15a 387 iCounter1Sec= 0;
viale 3:5945b9edc15a 388 MesureIbat();
viale 3:5945b9edc15a 389 batterieAc = batterieAc-0.0333; // utiliser le courant
viale 3:5945b9edc15a 390
viale 3:5945b9edc15a 391 if (batterieAc < 0) {
viale 3:5945b9edc15a 392 batterieAc = 0 ;
viale 3:5945b9edc15a 393 }
viale 3:5945b9edc15a 394 }
viale 3:5945b9edc15a 395
RomainCorradi 2:172619ae2eb7 396 if (mode==1) { // MODE MANUEL
RomainCorradi 1:687bcd4b1c6c 397 MyPLD.write(0);
RomainCorradi 2:172619ae2eb7 398 if (pwmmanuel > 0 && pwmmanuel <=255) {
RomainCorradi 1:687bcd4b1c6c 399
RomainCorradi 1:687bcd4b1c6c 400 PWM_VALID.write(1);
RomainCorradi 2:172619ae2eb7 401 MyPLD.write(pwmmanuel);
RomainCorradi 1:687bcd4b1c6c 402 }
RomainCorradi 2:172619ae2eb7 403 } else if(mode==0) {// mode automatique
RomainCorradi 2:172619ae2eb7 404
RomainCorradi 2:172619ae2eb7 405 if ( Brake == 0 ) { //frein actif
RomainCorradi 1:687bcd4b1c6c 406 MyPLD.write(0);
RomainCorradi 2:172619ae2eb7 407 pwm_final=0;
RomainCorradi 2:172619ae2eb7 408 } else if ( Brake == 1 ) { // frein désactif
RomainCorradi 2:172619ae2eb7 409
viale 3:5945b9edc15a 410 valpwm =(255/(GazMax-GazMin))*valpoignee-(255/(GazMax-GazMin))*GazMin; // calcul de la PWM brute
RomainCorradi 1:687bcd4b1c6c 411 }
RomainCorradi 2:172619ae2eb7 412
RomainCorradi 2:172619ae2eb7 413 if ((vitessemesure *3.6) > vitessebride) { // VITESSE MESURE
RomainCorradi 2:172619ae2eb7 414 pwm_final-=1;
RomainCorradi 2:172619ae2eb7 415 } else {
RomainCorradi 2:172619ae2eb7 416
RomainCorradi 2:172619ae2eb7 417 if (pwm_final<valpwm) { // test pwm final (gestion progressive)
RomainCorradi 2:172619ae2eb7 418
RomainCorradi 2:172619ae2eb7 419 pwm_final+= 1;
RomainCorradi 2:172619ae2eb7 420
RomainCorradi 2:172619ae2eb7 421 } else pwm_final=valpwm;
RomainCorradi 1:687bcd4b1c6c 422
RomainCorradi 2:172619ae2eb7 423 if (pwm_final>255) { //limitation pwm final
RomainCorradi 2:172619ae2eb7 424 pwm_final=255;
RomainCorradi 2:172619ae2eb7 425 }
RomainCorradi 2:172619ae2eb7 426 if(pwm_final<0) { //limitation
RomainCorradi 2:172619ae2eb7 427 pwm_final=0;
RomainCorradi 2:172619ae2eb7 428 }
RomainCorradi 2:172619ae2eb7 429 }
RomainCorradi 2:172619ae2eb7 430 MyPLD.write(pwm_final);
RomainCorradi 2:172619ae2eb7 431 }
RomainCorradi 1:687bcd4b1c6c 432 }
RomainCorradi 2:172619ae2eb7 433 void Mesure ()
RomainCorradi 2:172619ae2eb7 434 {
RomainCorradi 2:172619ae2eb7 435 tophall++; //incrémentation nombre de pôle;
RomainCorradi 2:172619ae2eb7 436 }
RomainCorradi 2:172619ae2eb7 437 void CalculV ()
RomainCorradi 2:172619ae2eb7 438 {
RomainCorradi 2:172619ae2eb7 439 int hall = tophall;
RomainCorradi 2:172619ae2eb7 440 vitessemesure=(hall*2*PI*RADIUS)/(6*NBPOLES*DELTA_T);
RomainCorradi 2:172619ae2eb7 441 tophalltotal += tophall;
RomainCorradi 2:172619ae2eb7 442 tophallpartiel += tophall;
RomainCorradi 2:172619ae2eb7 443 tophall=0;
viale 3:5945b9edc15a 444 }
viale 3:5945b9edc15a 445 void MesureTemp ()
viale 3:5945b9edc15a 446 {
viale 3:5945b9edc15a 447 temp = (Temp.read()*3.3 )/ SensibiliteTemp;
viale 3:5945b9edc15a 448 printf("la temperature est de %1.3f KELVIN equivaut a %1.3f DEGRES\n\r",temp, temp-273.15);
viale 3:5945b9edc15a 449 }
viale 3:5945b9edc15a 450
viale 3:5945b9edc15a 451 void MesureVbat ()
viale 3:5945b9edc15a 452 {
viale 3:5945b9edc15a 453 vbat = Vbat.read()*CoeffTensionbat;
viale 3:5945b9edc15a 454 printf("la tension de la batterie est de %1.3f volts\n\r", vbat );
viale 3:5945b9edc15a 455 }
viale 3:5945b9edc15a 456 void MesureIbat ()
viale 3:5945b9edc15a 457 {
viale 3:5945b9edc15a 458 ibat = ((Ibat.read()*3.3*PDTI)-2.5)/SensibiliteCourant;
viale 3:5945b9edc15a 459 if (ibat < 0) {
viale 3:5945b9edc15a 460 ibat = 0;
viale 3:5945b9edc15a 461 }
viale 3:5945b9edc15a 462
viale 3:5945b9edc15a 463
viale 3:5945b9edc15a 464 }
viale 3:5945b9edc15a 465 void Mesurepoingnee()
viale 3:5945b9edc15a 466 {
viale 3:5945b9edc15a 467 pourcentage = (valpwm*100 )/ 255;
viale 3:5945b9edc15a 468 printf("valeur pourcentage poignee %g \n\r", pourcentage);
viale 3:5945b9edc15a 469
viale 3:5945b9edc15a 470 }
viale 3:5945b9edc15a 471
viale 3:5945b9edc15a 472 void MesuresWeb(void)
viale 3:5945b9edc15a 473 {
viale 3:5945b9edc15a 474 temp = (Temp.read()*3.3 )/ SensibiliteTemp;
viale 3:5945b9edc15a 475 vbat = Vbat.read()*CoeffTensionbat;
viale 3:5945b9edc15a 476 ibat = ((Ibat.read()*3.3*PDTI)-2.5)/SensibiliteCourant;
viale 3:5945b9edc15a 477 if (ibat < 0) {
viale 3:5945b9edc15a 478 ibat = 0;
viale 3:5945b9edc15a 479 }
RomainCorradi 2:172619ae2eb7 480 }