Pour toi Jerem

Dependencies:   mbed bloc_io mbed-rtos html EthernetInterface

Committer:
RomainCorradi
Date:
Fri Nov 22 13:23:17 2019 +0000
Revision:
2:172619ae2eb7
Parent:
1:687bcd4b1c6c
JUJUJUL

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
RomainCorradi 2:172619ae2eb7 12 #define PI 3.14F // PIIIIIII
RomainCorradi 2:172619ae2eb7 13 DigitalOut PWM_VALID (p21);
RomainCorradi 2:172619ae2eb7 14 InterruptIn TopHall (p22); // valid pmw mbed pin
RomainCorradi 1:687bcd4b1c6c 15 AnalogIn POIGNEE (p17); // analog input connected to mbed
superphil06 0:e30c9ba95bd4 16 Bloc_IO MyPLD(p25,p26,p5,p6,p7,p8,p9,p10,p23,p24);// instantiate object needed to communicate with PLD
RomainCorradi 1:687bcd4b1c6c 17 Serial pc(USBTX, USBRX); // tx, rx
RomainCorradi 1:687bcd4b1c6c 18 void PWM ();
RomainCorradi 2:172619ae2eb7 19 void Mesure();
RomainCorradi 2:172619ae2eb7 20 void CalculV ();
RomainCorradi 2:172619ae2eb7 21 void saveFile(); // sauvegarde fichier
RomainCorradi 1:687bcd4b1c6c 22 Ticker AUTO;
RomainCorradi 2:172619ae2eb7 23 Ticker CalculVitesse;
RomainCorradi 1:687bcd4b1c6c 24 float GazMax,GazMin;
RomainCorradi 2:172619ae2eb7 25 int pwmmanuel,x,Overcurrent,Brake,FLTA,Direction,HALLC,HALLB,HALLA;
RomainCorradi 2:172619ae2eb7 26 char cChoix;
RomainCorradi 2:172619ae2eb7 27 int pwm_final=0;
RomainCorradi 2:172619ae2eb7 28 int valpwm=0;
RomainCorradi 2:172619ae2eb7 29 int mode=0;
RomainCorradi 2:172619ae2eb7 30 float vitesse;
RomainCorradi 2:172619ae2eb7 31 int tophall;
RomainCorradi 2:172619ae2eb7 32 int tophalltotal;
RomainCorradi 2:172619ae2eb7 33 int vitesssebride;
RomainCorradi 2:172619ae2eb7 34 float vitessemesure;
RomainCorradi 2:172619ae2eb7 35 float vitessebride = 25.0;
RomainCorradi 2:172619ae2eb7 36 int tophallpartiel;
RomainCorradi 1:687bcd4b1c6c 37 // Top_Hall Pin
RomainCorradi 1:687bcd4b1c6c 38
superphil06 0:e30c9ba95bd4 39 /************ persistent file parameters section *****************/
RomainCorradi 1:687bcd4b1c6c 40 LocalFileSystem local("local");// Create the local filesystem under the name "local"
RomainCorradi 1:687bcd4b1c6c 41
RomainCorradi 1:687bcd4b1c6c 42
superphil06 0:e30c9ba95bd4 43 /********************* web server section **********************************/
superphil06 0:e30c9ba95bd4 44
superphil06 0:e30c9ba95bd4 45 var_field_t tab_balise[10]; //une balise est présente dans le squelette
superphil06 0:e30c9ba95bd4 46 int giCounter=0;// acces counting
superphil06 0:e30c9ba95bd4 47
superphil06 0:e30c9ba95bd4 48
superphil06 0:e30c9ba95bd4 49 /*********************** can bus section ************/
RomainCorradi 1:687bcd4b1c6c 50 // determine message ID used to send Gaz ref over can bus
superphil06 0:e30c9ba95bd4 51 #define _CAN_DEBUG // used to debug can bus activity
superphil06 0:e30c9ba95bd4 52 //#define USE_CAN_REF // uncomment to receive gaz ref over can_bus
superphil06 0:e30c9ba95bd4 53 CAN can_port (p30, p29); // initialisation du Bus CAN sur les broches 30 (rd) et 29(td) for lpc1768 + mbed shield
superphil06 0:e30c9ba95bd4 54 bool bCan_Active=false;
superphil06 0:e30c9ba95bd4 55
superphil06 0:e30c9ba95bd4 56
superphil06 0:e30c9ba95bd4 57 DigitalOut led1(LED1); //initialisation des Leds présentes sur le micro-controleur Mbed*/
superphil06 0:e30c9ba95bd4 58 DigitalOut led2(LED2);
superphil06 0:e30c9ba95bd4 59 DigitalOut led3(LED3); // blink when can message is sent
RomainCorradi 1:687bcd4b1c6c 60 DigitalOut led4(LED4); // blink when can message is received
superphil06 0:e30c9ba95bd4 61
superphil06 0:e30c9ba95bd4 62
RomainCorradi 1:687bcd4b1c6c 63
superphil06 0:e30c9ba95bd4 64 //************ local function prototypes *******************
superphil06 0:e30c9ba95bd4 65 /**************** Read persistent data from text file located on local file system ****************/
superphil06 0:e30c9ba95bd4 66 /**************** write persitant data to text file located on local file system ****************/
superphil06 0:e30c9ba95bd4 67
RomainCorradi 2:172619ae2eb7 68 void saveFile()
RomainCorradi 2:172619ae2eb7 69 {
RomainCorradi 2:172619ae2eb7 70 FILE *fp = fopen("/local/gr1.txt", "w");
RomainCorradi 2:172619ae2eb7 71 if(fp != NULL) fprintf(fp,"valeur max : %f, valeur min: %f, tophalltotal: %d, vitesse de la bride: %f, tophallpartiel:%d",GazMin,GazMax,tophalltotal,vitessebride,tophallpartiel);
RomainCorradi 2:172619ae2eb7 72 else printf("ERREUR FICHIER NON VALIDE");
RomainCorradi 2:172619ae2eb7 73 fclose(fp);
superphil06 0:e30c9ba95bd4 74
RomainCorradi 2:172619ae2eb7 75 }
superphil06 0:e30c9ba95bd4 76 //************** calibation gaz function needed to record min_gaz and max_gaz value to persistent text file ******************
superphil06 0:e30c9ba95bd4 77
superphil06 0:e30c9ba95bd4 78
superphil06 0:e30c9ba95bd4 79 // ************top hall counting interrupt needed for speed measurement
superphil06 0:e30c9ba95bd4 80
superphil06 0:e30c9ba95bd4 81
superphil06 0:e30c9ba95bd4 82 //********************** timer interrupt for speed measurement each 100ms *************************
superphil06 0:e30c9ba95bd4 83
RomainCorradi 1:687bcd4b1c6c 84
superphil06 0:e30c9ba95bd4 85 //********************* Timer Interrupt for gaz ref management each 10ms ********************
superphil06 0:e30c9ba95bd4 86
superphil06 0:e30c9ba95bd4 87
superphil06 0:e30c9ba95bd4 88 /********* main cgi function used to patch data to the web server thread **********************************/
superphil06 0:e30c9ba95bd4 89 void CGI_Function(void) // cgi function that patch web data to empty web page
RomainCorradi 1:687bcd4b1c6c 90 {
RomainCorradi 1:687bcd4b1c6c 91 char ma_chaine4[20]= {}; // needed to form html response
superphil06 0:e30c9ba95bd4 92
superphil06 0:e30c9ba95bd4 93 }
RomainCorradi 1:687bcd4b1c6c 94
RomainCorradi 1:687bcd4b1c6c 95
RomainCorradi 1:687bcd4b1c6c 96 /*********************** CAN BUS SECTION **********************/
RomainCorradi 1:687bcd4b1c6c 97
superphil06 0:e30c9ba95bd4 98
superphil06 0:e30c9ba95bd4 99 void CAN_REC_THREAD(void const *args)
RomainCorradi 1:687bcd4b1c6c 100 {
RomainCorradi 1:687bcd4b1c6c 101 int iCount,iError;
superphil06 0:e30c9ba95bd4 102
RomainCorradi 1:687bcd4b1c6c 103 while (bCan_Active) {
RomainCorradi 1:687bcd4b1c6c 104 Thread::wait(100);// wait 100ms
RomainCorradi 1:687bcd4b1c6c 105 // code todo
RomainCorradi 1:687bcd4b1c6c 106
superphil06 0:e30c9ba95bd4 107 }
RomainCorradi 1:687bcd4b1c6c 108
superphil06 0:e30c9ba95bd4 109 }
superphil06 0:e30c9ba95bd4 110 //*************************** main function *****************************************
RomainCorradi 1:687bcd4b1c6c 111 int main()
RomainCorradi 1:687bcd4b1c6c 112 {
RomainCorradi 1:687bcd4b1c6c 113 MyPLD.write(0);
RomainCorradi 2:172619ae2eb7 114 PWM_VALID.write(1);
RomainCorradi 1:687bcd4b1c6c 115 char carac;
RomainCorradi 1:687bcd4b1c6c 116 FILE *fp = fopen("/local/gr1.txt", "r");
RomainCorradi 1:687bcd4b1c6c 117 if(fp != NULL) {
RomainCorradi 2:172619ae2eb7 118 fscanf(fp,"valeur max : %f, valeur min: %f, tophalltotal: %d, vitesse de la bride: %f, tophallpartiel:%d",&GazMin,&GazMax,&tophalltotal,&vitessebride,&tophallpartiel);
RomainCorradi 2:172619ae2eb7 119 printf("Valeur min:%f , Valeur max:%f ,tophalltotal:%d,vitesse de la bride:%f,tophallpartiel:%d\n\r",GazMin,GazMax,tophalltotal,vitessebride,tophallpartiel);
RomainCorradi 1:687bcd4b1c6c 120 } else
RomainCorradi 2:172619ae2eb7 121 printf("ERREUR FICHIER NON VALIDE\n\r");
RomainCorradi 1:687bcd4b1c6c 122 fclose(fp);
superphil06 0:e30c9ba95bd4 123
RomainCorradi 1:687bcd4b1c6c 124 // int write,read;
RomainCorradi 1:687bcd4b1c6c 125 // f_poignee = fopen("nom-de-fichier","r");
RomainCorradi 1:687bcd4b1c6c 126 // read=fgetc(f_poignee);
RomainCorradi 1:687bcd4b1c6c 127 // fclose(f_poignee);
RomainCorradi 1:687bcd4b1c6c 128 // printf("&d",read);
superphil06 0:e30c9ba95bd4 129
superphil06 0:e30c9ba95bd4 130 //***************************************** web section ********************************************/
superphil06 0:e30c9ba95bd4 131 //Init_Web_Server(&CGI_Function); // create and initialize tcp server socket and pass function pointer to local CGI function
superphil06 0:e30c9ba95bd4 132 //Thread WebThread(Web_Server_Thread);// create and launch web server thread
RomainCorradi 1:687bcd4b1c6c 133 /********* main cgi function used to patch data to the web server thread **********************************/
superphil06 0:e30c9ba95bd4 134
RomainCorradi 1:687bcd4b1c6c 135 //******************************************* end web section ************************************* /
superphil06 0:e30c9ba95bd4 136
superphil06 0:e30c9ba95bd4 137
superphil06 0:e30c9ba95bd4 138 //********************* can bus section initialisation *******************************************
superphil06 0:e30c9ba95bd4 139 //bCan_Active=true;// needed to lauchn CAN thread
superphil06 0:e30c9ba95bd4 140 //Thread CanThread(CAN_REC_THREAD);// create and launch can receiver thread
superphil06 0:e30c9ba95bd4 141 //********************* end can bus section *****************************************************
RomainCorradi 2:172619ae2eb7 142 TopHall.mode(PullUp);
RomainCorradi 2:172619ae2eb7 143 AUTO.attach(&PWM,0.02);
RomainCorradi 2:172619ae2eb7 144 TopHall.rise(&Mesure);
RomainCorradi 2:172619ae2eb7 145 CalculVitesse.attach(&CalculV,0.1);
RomainCorradi 1:687bcd4b1c6c 146 pc.printf("programme scooter mbed \n\r");
RomainCorradi 1:687bcd4b1c6c 147 while(cChoix!='q' and cChoix!='Q') {
RomainCorradi 1:687bcd4b1c6c 148 pc.printf("Veuillez saisir un choix parmi la liste proposee:\n\r");
RomainCorradi 1:687bcd4b1c6c 149 pc.printf("a:saisie consigne pwm\n\r");
RomainCorradi 1:687bcd4b1c6c 150 pc.printf("b:Calibration poignee\n\r");
RomainCorradi 1:687bcd4b1c6c 151 pc.printf("d:Mode automatique\n\r");
RomainCorradi 1:687bcd4b1c6c 152 pc.printf("e:Lecture du registre interne\n\r");
RomainCorradi 2:172619ae2eb7 153 pc.printf("f:Mesure de la vitesse\n\r");
RomainCorradi 2:172619ae2eb7 154 pc.printf("g: Saisie bride\n\r");
RomainCorradi 2:172619ae2eb7 155 pc.printf("h: Lecture vitesse\n\r");
RomainCorradi 2:172619ae2eb7 156 pc.printf("i: Compteur kilometrique\n\r");
RomainCorradi 2:172619ae2eb7 157 pc.printf("j: RAZ compteur partiel\n\r");
RomainCorradi 1:687bcd4b1c6c 158 pc.printf("q:quitter\n\r");
RomainCorradi 1:687bcd4b1c6c 159 //************* multithreading : main thread need to sleep in order to allow web response */
RomainCorradi 1:687bcd4b1c6c 160 while (pc.readable()==0) { // determine if char availabler
RomainCorradi 1:687bcd4b1c6c 161 Thread::wait(10); // wait 10 until char available on serial input
RomainCorradi 1:687bcd4b1c6c 162 }
RomainCorradi 1:687bcd4b1c6c 163 /************* end of main thread sleep ****************/
RomainCorradi 1:687bcd4b1c6c 164 pc.scanf("%c",&cChoix);
RomainCorradi 1:687bcd4b1c6c 165 switch (cChoix) {
RomainCorradi 2:172619ae2eb7 166 case 'a': // COMMANDE MANUEL
RomainCorradi 2:172619ae2eb7 167 mode=1;
RomainCorradi 1:687bcd4b1c6c 168 printf("veuillez entrer une valeur de PWM entre 0 et 255\n\r");
RomainCorradi 2:172619ae2eb7 169 scanf("%d",&pwmmanuel);
RomainCorradi 1:687bcd4b1c6c 170 break;
RomainCorradi 2:172619ae2eb7 171 case 'b': // CALIBRATION DE LA POIGNEE DE GAZ (VALEUR MIN ET MAX)
RomainCorradi 1:687bcd4b1c6c 172 AUTO.detach();
RomainCorradi 1:687bcd4b1c6c 173 PWM_VALID.write(0);
RomainCorradi 1:687bcd4b1c6c 174 if (PWM_VALID.read()==0) MyPLD.write(0);
RomainCorradi 1:687bcd4b1c6c 175 printf("Veuillez entrer n'importe quel caractere si vous etes OK pour la valeur min\n\r");
RomainCorradi 2:172619ae2eb7 176 scanf("%c",&carac);
RomainCorradi 1:687bcd4b1c6c 177 GazMin=POIGNEE.read();
RomainCorradi 1:687bcd4b1c6c 178 printf("\n\r");
RomainCorradi 1:687bcd4b1c6c 179 printf("Veuillez entrer n'importe quel caractere si vous etes OK pour la valeur max\n\r");
RomainCorradi 2:172619ae2eb7 180 scanf("%c",&carac);
RomainCorradi 1:687bcd4b1c6c 181 GazMax=POIGNEE.read();
RomainCorradi 1:687bcd4b1c6c 182 printf("\n\r");
RomainCorradi 1:687bcd4b1c6c 183 printf("Valeur de la poignee min:%g\n\r",GazMin);
RomainCorradi 1:687bcd4b1c6c 184 printf("Valeur de la poignee max:%g\n\r",GazMax);
RomainCorradi 2:172619ae2eb7 185 saveFile();
RomainCorradi 1:687bcd4b1c6c 186 break;
RomainCorradi 2:172619ae2eb7 187 case 'd':// MODE AUTOMATIQUE
RomainCorradi 2:172619ae2eb7 188 mode=0;
RomainCorradi 1:687bcd4b1c6c 189 break;
RomainCorradi 1:687bcd4b1c6c 190 case 'e':
RomainCorradi 1:687bcd4b1c6c 191 x=MyPLD.read();
RomainCorradi 1:687bcd4b1c6c 192 Overcurrent= (x & 64)/64 ; //Technique pour avoir la valeur en binaire
RomainCorradi 1:687bcd4b1c6c 193 Brake= (x & 32)/32;
RomainCorradi 1:687bcd4b1c6c 194 FLTA=(x & 16)/16;
RomainCorradi 1:687bcd4b1c6c 195 Direction=(x & 8)/8;
RomainCorradi 1:687bcd4b1c6c 196 HALLC=(x & 4)/4;
RomainCorradi 1:687bcd4b1c6c 197 HALLB=(x & 2)/2;
RomainCorradi 1:687bcd4b1c6c 198 HALLA= x & 1;
RomainCorradi 1:687bcd4b1c6c 199 int hall=0;
RomainCorradi 2:172619ae2eb7 200 if (HALLA == 1) {
RomainCorradi 2:172619ae2eb7 201 hall++;
RomainCorradi 1:687bcd4b1c6c 202 }
RomainCorradi 2:172619ae2eb7 203 if (HALLB == 1) {
RomainCorradi 2:172619ae2eb7 204 hall+=2;
RomainCorradi 1:687bcd4b1c6c 205 }
RomainCorradi 2:172619ae2eb7 206 if (HALLC == 1) {
RomainCorradi 1:687bcd4b1c6c 207 hall+=4;
RomainCorradi 1:687bcd4b1c6c 208 }
RomainCorradi 1:687bcd4b1c6c 209 pc.printf("hall=%d\r\n", hall);
RomainCorradi 2:172619ae2eb7 210 if (Overcurrent == 0) {
RomainCorradi 2:172619ae2eb7 211 printf("Surintensite dans le moteur\n\r ");
RomainCorradi 1:687bcd4b1c6c 212 } else {
RomainCorradi 2:172619ae2eb7 213 printf( "Pas de surintensite dans le moteur\n\r");
RomainCorradi 1:687bcd4b1c6c 214 }
RomainCorradi 2:172619ae2eb7 215
RomainCorradi 1:687bcd4b1c6c 216 if (Brake == 1) {
RomainCorradi 2:172619ae2eb7 217 printf("Frein desactive\n\r");
RomainCorradi 1:687bcd4b1c6c 218 } else {
RomainCorradi 2:172619ae2eb7 219 printf( "Frein active\n\r");
RomainCorradi 1:687bcd4b1c6c 220 }
RomainCorradi 2:172619ae2eb7 221
RomainCorradi 2:172619ae2eb7 222 if (FLTA == 1) { // verifier s'il n'y a pas de registre interne
RomainCorradi 2:172619ae2eb7 223 printf("pas erreur registre interne\n\r");
RomainCorradi 1:687bcd4b1c6c 224 } else {
RomainCorradi 2:172619ae2eb7 225 printf( "erreur registre interne \n\r");
RomainCorradi 1:687bcd4b1c6c 226 }
RomainCorradi 2:172619ae2eb7 227
RomainCorradi 1:687bcd4b1c6c 228 if (Direction == 1) {
RomainCorradi 2:172619ae2eb7 229 printf("marche avant active\n\r");
RomainCorradi 1:687bcd4b1c6c 230 } else {
RomainCorradi 2:172619ae2eb7 231 printf( "marche avant desactive\n\r");
RomainCorradi 1:687bcd4b1c6c 232 }
RomainCorradi 2:172619ae2eb7 233 break;
RomainCorradi 2:172619ae2eb7 234 case 'f': // VITESSE DE LA ROUE DU SCOOT
RomainCorradi 2:172619ae2eb7 235 printf("vitesse de la roue: %f\n\r",vitesse);
RomainCorradi 2:172619ae2eb7 236 break;
superphil06 0:e30c9ba95bd4 237
RomainCorradi 2:172619ae2eb7 238 case 'g': // SAISIE DE LA BRIDE
RomainCorradi 2:172619ae2eb7 239 printf("Veuillez saisir la valeur de la bride entre 0 et 30 km/h \n\r");
RomainCorradi 2:172619ae2eb7 240 scanf("%f",&vitessebride);
RomainCorradi 2:172619ae2eb7 241 saveFile();
RomainCorradi 2:172619ae2eb7 242 printf("Valeur de la bride\n\r", vitessebride);
RomainCorradi 2:172619ae2eb7 243 break;
RomainCorradi 2:172619ae2eb7 244 case 'h': // VITESSE DE LA ROUE DU SCOOT
RomainCorradi 2:172619ae2eb7 245 printf("Vitesse:%1.3f km/h \n\r",vitessemesure*3.6);
RomainCorradi 2:172619ae2eb7 246 break;
RomainCorradi 1:687bcd4b1c6c 247
RomainCorradi 2:172619ae2eb7 248 case 'i': // DISTANCE DE LA ROUE TOTAL ET PARTIEL
RomainCorradi 2:172619ae2eb7 249 printf("Distance parcourue totale: %f metres\n\r",(tophalltotal*2*PI*RADIUS)/(6*NBPOLES));
RomainCorradi 2:172619ae2eb7 250 printf("Distance parcourue partielle: %f metres\n\r",(tophallpartiel*2*PI*RADIUS)/(6*NBPOLES));
RomainCorradi 2:172619ae2eb7 251 break;
RomainCorradi 2:172619ae2eb7 252 case 'j': // REMISE A ZERO DU COMPTEUR PARTIEL
RomainCorradi 2:172619ae2eb7 253 printf("Appuyez sur n'importe quel caractere pour remettre a zero le compteur partiel\n\r");
RomainCorradi 2:172619ae2eb7 254 scanf("%c",&carac);
RomainCorradi 2:172619ae2eb7 255 tophallpartiel=0;
RomainCorradi 2:172619ae2eb7 256 saveFile();
RomainCorradi 2:172619ae2eb7 257 break;
RomainCorradi 2:172619ae2eb7 258 case 'q': // QUITTER LE PROGRAMME
RomainCorradi 2:172619ae2eb7 259 AUTO.detach();
RomainCorradi 2:172619ae2eb7 260 CalculVitesse.detach();
RomainCorradi 2:172619ae2eb7 261 PWM_VALID.write(0);
RomainCorradi 2:172619ae2eb7 262 if (PWM_VALID.read()==0) MyPLD.write(0);
RomainCorradi 2:172619ae2eb7 263 printf("BYE");
RomainCorradi 2:172619ae2eb7 264 break;
RomainCorradi 1:687bcd4b1c6c 265 }
RomainCorradi 2:172619ae2eb7 266 saveFile();
RomainCorradi 2:172619ae2eb7 267 pc.printf("fin programme scooter mbed\n\r");
RomainCorradi 2:172619ae2eb7 268 } // end while
RomainCorradi 2:172619ae2eb7 269 }
RomainCorradi 1:687bcd4b1c6c 270 //************** thread deinit *********************
RomainCorradi 1:687bcd4b1c6c 271 //DeInit_Web_Server();
RomainCorradi 1:687bcd4b1c6c 272 //bCan_Active=false;
RomainCorradi 1:687bcd4b1c6c 273 //CanThread=false;// close can received thread
RomainCorradi 1:687bcd4b1c6c 274
RomainCorradi 1:687bcd4b1c6c 275 // end main
RomainCorradi 1:687bcd4b1c6c 276 void PWM()
RomainCorradi 1:687bcd4b1c6c 277 {
RomainCorradi 1:687bcd4b1c6c 278 x=MyPLD.read();
RomainCorradi 1:687bcd4b1c6c 279 Brake= (x & 32)/32;
RomainCorradi 2:172619ae2eb7 280 if (mode==1) { // MODE MANUEL
RomainCorradi 1:687bcd4b1c6c 281 MyPLD.write(0);
RomainCorradi 2:172619ae2eb7 282 if (pwmmanuel > 0 && pwmmanuel <=255) {
RomainCorradi 1:687bcd4b1c6c 283
RomainCorradi 1:687bcd4b1c6c 284 PWM_VALID.write(1);
RomainCorradi 2:172619ae2eb7 285 MyPLD.write(pwmmanuel);
RomainCorradi 1:687bcd4b1c6c 286 }
RomainCorradi 2:172619ae2eb7 287 } else if(mode==0) {// mode automatique
RomainCorradi 2:172619ae2eb7 288
RomainCorradi 2:172619ae2eb7 289 if ( Brake == 0 ) { //frein actif
RomainCorradi 1:687bcd4b1c6c 290 MyPLD.write(0);
RomainCorradi 2:172619ae2eb7 291 pwm_final=0;
RomainCorradi 2:172619ae2eb7 292 } else if ( Brake == 1 ) { // frein désactif
RomainCorradi 2:172619ae2eb7 293
RomainCorradi 2:172619ae2eb7 294 valpwm =(255/(GazMax-GazMin))*POIGNEE.read()-(255/(GazMax-GazMin))*GazMin; // calcul de la PWM brute
RomainCorradi 1:687bcd4b1c6c 295 }
RomainCorradi 2:172619ae2eb7 296
RomainCorradi 2:172619ae2eb7 297 if ((vitessemesure *3.6) > vitessebride) { // VITESSE MESURE
RomainCorradi 2:172619ae2eb7 298 pwm_final-=1;
RomainCorradi 2:172619ae2eb7 299 } else {
RomainCorradi 2:172619ae2eb7 300
RomainCorradi 2:172619ae2eb7 301 if (pwm_final<valpwm) { // test pwm final (gestion progressive)
RomainCorradi 2:172619ae2eb7 302
RomainCorradi 2:172619ae2eb7 303 pwm_final+= 1;
RomainCorradi 2:172619ae2eb7 304
RomainCorradi 2:172619ae2eb7 305 } else pwm_final=valpwm;
RomainCorradi 1:687bcd4b1c6c 306
RomainCorradi 2:172619ae2eb7 307 if (pwm_final>255) { //limitation pwm final
RomainCorradi 2:172619ae2eb7 308 pwm_final=255;
RomainCorradi 2:172619ae2eb7 309 }
RomainCorradi 2:172619ae2eb7 310 if(pwm_final<0) { //limitation
RomainCorradi 2:172619ae2eb7 311 pwm_final=0;
RomainCorradi 2:172619ae2eb7 312 }
RomainCorradi 2:172619ae2eb7 313 }
RomainCorradi 2:172619ae2eb7 314 MyPLD.write(pwm_final);
RomainCorradi 2:172619ae2eb7 315 }
RomainCorradi 1:687bcd4b1c6c 316 }
RomainCorradi 2:172619ae2eb7 317 void Mesure ()
RomainCorradi 2:172619ae2eb7 318 {
RomainCorradi 2:172619ae2eb7 319 tophall++; //incrémentation nombre de pôle;
RomainCorradi 2:172619ae2eb7 320 }
RomainCorradi 2:172619ae2eb7 321 void CalculV ()
RomainCorradi 2:172619ae2eb7 322 {
RomainCorradi 2:172619ae2eb7 323 int hall = tophall;
RomainCorradi 2:172619ae2eb7 324 vitessemesure=(hall*2*PI*RADIUS)/(6*NBPOLES*DELTA_T);
RomainCorradi 2:172619ae2eb7 325 tophalltotal += tophall;
RomainCorradi 2:172619ae2eb7 326 tophallpartiel += tophall;
RomainCorradi 2:172619ae2eb7 327 tophall=0;
RomainCorradi 2:172619ae2eb7 328 }