12/mar ignicao funcionando

Dependencies:   mbed reScale TextLCD

Committer:
Marcelocostanzo
Date:
Wed May 02 11:18:49 2018 +0000
Revision:
5:e04419b1e369
Parent:
4:9da4a46f38bc
Child:
6:111a7f1b978f
inserido a fun??o de tamanhos diferentes de rodas;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 0:b5a9e0614efd 1 #include "mbed.h"
Marcelocostanzo 4:9da4a46f38bc 2 #include "TextLCD.h"
Marcelocostanzo 5:e04419b1e369 3 #include "reScale.h"
Marcelocostanzo 5:e04419b1e369 4 #include "eeprom.h"
Marcelocostanzo 5:e04419b1e369 5
Marcelocostanzo 5:e04419b1e369 6 #define tole_min 10 //tolerancia minima em km/h
Marcelocostanzo 5:e04419b1e369 7 #define tole_max 100 //tolerancia maxima em km/h
Marcelocostanzo 5:e04419b1e369 8 #define ndentes 60 //numero de dentes do sensor
Marcelocostanzo 5:e04419b1e369 9
Marcelocostanzo 5:e04419b1e369 10
Marcelocostanzo 4:9da4a46f38bc 11
Marcelocostanzo 4:9da4a46f38bc 12 I2C i2c_lcd(PTC9,PTC8); // SDA, SCL
Marcelocostanzo 4:9da4a46f38bc 13
Marcelocostanzo 5:e04419b1e369 14 EEPROM e2prom(PTC11,PTC10,0x0,EEPROM::T24C04);
Marcelocostanzo 5:e04419b1e369 15
Marcelocostanzo 2:3c69c0772709 16 InterruptIn motora(D0);
Marcelocostanzo 2:3c69c0772709 17 InterruptIn movida(D1);
Marcelocostanzo 2:3c69c0772709 18
Marcelocostanzo 5:e04419b1e369 19 DigitalOut ign(LED2);
Marcelocostanzo 5:e04419b1e369 20 PwmOut boost(PTC1);
mbed_official 0:b5a9e0614efd 21
Marcelocostanzo 2:3c69c0772709 22
Marcelocostanzo 5:e04419b1e369 23 Timer t1;
Marcelocostanzo 5:e04419b1e369 24 Timer t2;
Marcelocostanzo 2:3c69c0772709 25 Ticker call;
Marcelocostanzo 2:3c69c0772709 26
Marcelocostanzo 2:3c69c0772709 27 Serial pc(USBTX, USBRX); // tx, rx
Marcelocostanzo 2:3c69c0772709 28
Marcelocostanzo 5:e04419b1e369 29 reScale _scale(tole_min,tole_max,0,1);
mbed_official 0:b5a9e0614efd 30
Marcelocostanzo 5:e04419b1e369 31 float t_motora=0, t_movida=0;
Marcelocostanzo 5:e04419b1e369 32 float perimetro_motora=0, perimetro_movida=0;
Marcelocostanzo 5:e04419b1e369 33
Marcelocostanzo 5:e04419b1e369 34
Marcelocostanzo 5:e04419b1e369 35 TextLCD_I2C lcd(&i2c_lcd, 0x7E, TextLCD::LCD20x4); // I2C exp: I2C bus, PCF8574 Slaveaddress, LCD Type
Marcelocostanzo 4:9da4a46f38bc 36
Marcelocostanzo 2:3c69c0772709 37 void tracao()
Marcelocostanzo 2:3c69c0772709 38 {
Marcelocostanzo 5:e04419b1e369 39 t1.stop();
Marcelocostanzo 5:e04419b1e369 40 t_motora = t1.read_us();
Marcelocostanzo 5:e04419b1e369 41 t1.reset();
Marcelocostanzo 5:e04419b1e369 42 t1.start();
Marcelocostanzo 2:3c69c0772709 43 }
Marcelocostanzo 2:3c69c0772709 44
Marcelocostanzo 2:3c69c0772709 45 void livre()
Marcelocostanzo 2:3c69c0772709 46 {
Marcelocostanzo 5:e04419b1e369 47 t2.stop();
Marcelocostanzo 5:e04419b1e369 48 t_movida = t2.read_us();
Marcelocostanzo 5:e04419b1e369 49 t2.reset();
Marcelocostanzo 5:e04419b1e369 50 t2.start();
Marcelocostanzo 2:3c69c0772709 51 }
Marcelocostanzo 2:3c69c0772709 52
Marcelocostanzo 2:3c69c0772709 53 void send()
Marcelocostanzo 2:3c69c0772709 54 {
Marcelocostanzo 2:3c69c0772709 55 pc.printf("Tempo: %.3f Hz \n\r");
Marcelocostanzo 2:3c69c0772709 56 }
Marcelocostanzo 2:3c69c0772709 57
Marcelocostanzo 5:e04419b1e369 58 void le_memoria()
Marcelocostanzo 5:e04419b1e369 59 {
Marcelocostanzo 5:e04419b1e369 60 e2prom.read(12, perimetro);
Marcelocostanzo 5:e04419b1e369 61 e2prom.ready();
Marcelocostanzo 5:e04419b1e369 62 }
Marcelocostanzo 5:e04419b1e369 63
Marcelocostanzo 5:e04419b1e369 64 void calc_perimetro_motora()
Marcelocostanzo 5:e04419b1e369 65 {
Marcelocostanzo 5:e04419b1e369 66 float raio_dinamico=0;
Marcelocostanzo 5:e04419b1e369 67 float pneu_largura=205;
Marcelocostanzo 5:e04419b1e369 68 float pneu_perfil=50;
Marcelocostanzo 5:e04419b1e369 69 float pneu_aro=15;
Marcelocostanzo 5:e04419b1e369 70 /*
Marcelocostanzo 5:e04419b1e369 71 e2prom.read(0,pneu_largura);
Marcelocostanzo 5:e04419b1e369 72 e2prom.ready();
Marcelocostanzo 5:e04419b1e369 73 e2prom.read(4,pneu_perfil);
Marcelocostanzo 5:e04419b1e369 74 e2prom.ready();
Marcelocostanzo 5:e04419b1e369 75 e2prom.read(8,pneu_aro);
Marcelocostanzo 5:e04419b1e369 76 e2prom.ready();
Marcelocostanzo 5:e04419b1e369 77 */
Marcelocostanzo 5:e04419b1e369 78 raio_dinamico = pneu_largura * (pneu_perfil /100);
Marcelocostanzo 5:e04419b1e369 79 raio_dinamico = raio_dinamico + (pneu_aro * 25.4);
Marcelocostanzo 5:e04419b1e369 80 perimetro_motora = raio_dinamico * 3.14; //resultado em milimetros
Marcelocostanzo 5:e04419b1e369 81 perimetro_motora = perimetro_motora / 1000; //converter em metros
Marcelocostanzo 5:e04419b1e369 82
Marcelocostanzo 5:e04419b1e369 83 //e2prom.write(12, perimetro_motora);
Marcelocostanzo 5:e04419b1e369 84 //e2prom.ready();
Marcelocostanzo 5:e04419b1e369 85 }
Marcelocostanzo 5:e04419b1e369 86
Marcelocostanzo 5:e04419b1e369 87 void calc_perimetro_movida()
Marcelocostanzo 5:e04419b1e369 88 {
Marcelocostanzo 5:e04419b1e369 89 float raio_dinamico=0;
Marcelocostanzo 5:e04419b1e369 90 float pneu_largura=205;
Marcelocostanzo 5:e04419b1e369 91 float pneu_perfil=50;
Marcelocostanzo 5:e04419b1e369 92 float pneu_aro=15;
Marcelocostanzo 5:e04419b1e369 93 /*
Marcelocostanzo 5:e04419b1e369 94 e2prom.read(0,pneu_largura);
Marcelocostanzo 5:e04419b1e369 95 e2prom.ready();
Marcelocostanzo 5:e04419b1e369 96 e2prom.read(4,pneu_perfil);
Marcelocostanzo 5:e04419b1e369 97 e2prom.ready();
Marcelocostanzo 5:e04419b1e369 98 e2prom.read(8,pneu_aro);
Marcelocostanzo 5:e04419b1e369 99 e2prom.ready();
Marcelocostanzo 5:e04419b1e369 100 */
Marcelocostanzo 5:e04419b1e369 101 raio_dinamico = pneu_largura * (pneu_perfil /100);
Marcelocostanzo 5:e04419b1e369 102 raio_dinamico = raio_dinamico + (pneu_aro * 25.4);
Marcelocostanzo 5:e04419b1e369 103 perimetro_movida = raio_dinamico * 3.14; //resultado em milimetros
Marcelocostanzo 5:e04419b1e369 104 perimetro_movida = perimetro_movida / 1000; //converter em metros
Marcelocostanzo 5:e04419b1e369 105
Marcelocostanzo 5:e04419b1e369 106 //e2prom.write(12, perimetro_movida);
Marcelocostanzo 5:e04419b1e369 107 //e2prom.ready();
Marcelocostanzo 5:e04419b1e369 108 }
Marcelocostanzo 5:e04419b1e369 109
Marcelocostanzo 2:3c69c0772709 110 int main()
Marcelocostanzo 2:3c69c0772709 111 {
Marcelocostanzo 5:e04419b1e369 112 float delta=0;
Marcelocostanzo 5:e04419b1e369 113 float vel_movida=0;
Marcelocostanzo 5:e04419b1e369 114 float vel_motora=0;
Marcelocostanzo 5:e04419b1e369 115 float pwmturbo=0;
Marcelocostanzo 5:e04419b1e369 116
Marcelocostanzo 2:3c69c0772709 117
Marcelocostanzo 2:3c69c0772709 118 motora.fall(&tracao); // attach the address of the measure function to the rising edge
Marcelocostanzo 2:3c69c0772709 119 movida.fall(&livre); // attach the address of the measure function to the rising edge
Marcelocostanzo 5:e04419b1e369 120
Marcelocostanzo 5:e04419b1e369 121
Marcelocostanzo 5:e04419b1e369 122 boost.period(0.01f);
Marcelocostanzo 5:e04419b1e369 123
Marcelocostanzo 4:9da4a46f38bc 124 lcd.setBacklight(TextLCD::LightOn);
Marcelocostanzo 4:9da4a46f38bc 125 lcd.setCursor(TextLCD::CurOff_BlkOff);
Marcelocostanzo 4:9da4a46f38bc 126 lcd.setAddress(0,0);
Marcelocostanzo 4:9da4a46f38bc 127 lcd.printf("Controle de");
Marcelocostanzo 4:9da4a46f38bc 128 lcd.setAddress(0,1);
Marcelocostanzo 4:9da4a46f38bc 129 lcd.printf("TRACAO");
Marcelocostanzo 4:9da4a46f38bc 130 wait(1.5);
Marcelocostanzo 4:9da4a46f38bc 131 lcd.cls();
Marcelocostanzo 5:e04419b1e369 132
Marcelocostanzo 5:e04419b1e369 133 /*
Marcelocostanzo 5:e04419b1e369 134 if( USUARIO DESEJA CALCULAR O PERIMETRO ) usar while com timeout!!!!!!!!!!!!!!!!!!
Marcelocostanzo 5:e04419b1e369 135 {
Marcelocostanzo 5:e04419b1e369 136 calc_perimetro_movida();
Marcelocostanzo 5:e04419b1e369 137 calc_perimetro_motora();
Marcelocostanzo 5:e04419b1e369 138 e2prom.read(12, perimetro);
Marcelocostanzo 5:e04419b1e369 139 e2prom.ready();
Marcelocostanzo 5:e04419b1e369 140 }
Marcelocostanzo 5:e04419b1e369 141
Marcelocostanzo 5:e04419b1e369 142 le_memoria();
Marcelocostanzo 5:e04419b1e369 143 */
Marcelocostanzo 5:e04419b1e369 144
Marcelocostanzo 5:e04419b1e369 145 calc_perimetro_motora();
Marcelocostanzo 5:e04419b1e369 146 calc_perimetro_movida();
Marcelocostanzo 4:9da4a46f38bc 147
Marcelocostanzo 2:3c69c0772709 148
Marcelocostanzo 2:3c69c0772709 149 while(1)
Marcelocostanzo 5:e04419b1e369 150 {
Marcelocostanzo 5:e04419b1e369 151 vel_motora = perimetro / ((t_motora*ndentes) / 1000000);
Marcelocostanzo 5:e04419b1e369 152 vel_motora = vel_motora * 3.6;
Marcelocostanzo 5:e04419b1e369 153
Marcelocostanzo 5:e04419b1e369 154 vel_movida = perimetro / ((t_movida*ndentes) / 1000000);
Marcelocostanzo 5:e04419b1e369 155 vel_movida = vel_movida * 3.6;
Marcelocostanzo 3:9d22aa32b223 156
Marcelocostanzo 5:e04419b1e369 157 delta = vel_motora - vel_movida;
Marcelocostanzo 5:e04419b1e369 158
Marcelocostanzo 5:e04419b1e369 159 if(delta<=0)
Marcelocostanzo 5:e04419b1e369 160 {
Marcelocostanzo 5:e04419b1e369 161 delta=0;
Marcelocostanzo 5:e04419b1e369 162 }
Marcelocostanzo 3:9d22aa32b223 163
Marcelocostanzo 5:e04419b1e369 164 pwmturbo =_scale.from(delta);
Marcelocostanzo 5:e04419b1e369 165 boost.write(pwmturbo);
Marcelocostanzo 5:e04419b1e369 166
Marcelocostanzo 5:e04419b1e369 167 if(delta > tole_min)
Marcelocostanzo 2:3c69c0772709 168 {
Marcelocostanzo 2:3c69c0772709 169 ign=0;
Marcelocostanzo 2:3c69c0772709 170 wait(0.1);
Marcelocostanzo 4:9da4a46f38bc 171 lcd.setAddress(0,0);
Marcelocostanzo 4:9da4a46f38bc 172 lcd.printf("Destracionando");
Marcelocostanzo 2:3c69c0772709 173 }
Marcelocostanzo 2:3c69c0772709 174
Marcelocostanzo 2:3c69c0772709 175 else
Marcelocostanzo 2:3c69c0772709 176 {
Marcelocostanzo 2:3c69c0772709 177 ign=1;
Marcelocostanzo 4:9da4a46f38bc 178 lcd.setAddress(0,0);
Marcelocostanzo 4:9da4a46f38bc 179 lcd.printf("Normal ");
Marcelocostanzo 2:3c69c0772709 180 }
Marcelocostanzo 5:e04419b1e369 181
Marcelocostanzo 5:e04419b1e369 182
Marcelocostanzo 5:e04419b1e369 183 lcd.setAddress(0,1);
Marcelocostanzo 5:e04419b1e369 184 lcd.printf("Motora: %.1f Km/h ",vel_motora);
Marcelocostanzo 5:e04419b1e369 185 lcd.setAddress(0,2);
Marcelocostanzo 5:e04419b1e369 186 lcd.printf("Movida: %.1f Km/h ",vel_movida);
Marcelocostanzo 5:e04419b1e369 187 lcd.setAddress(0,3);
Marcelocostanzo 5:e04419b1e369 188 lcd.printf("D:%.1f Km/h B:%.1f ",delta, pwmturbo);
Marcelocostanzo 5:e04419b1e369 189
mbed_official 0:b5a9e0614efd 190 }
Marcelocostanzo 2:3c69c0772709 191 }