Controle de traçao com interface nextion

Dependencies:   mbed reScale

Committer:
Marcelocostanzo
Date:
Wed May 16 19:49:21 2018 +0000
Revision:
0:7dfaf751d942
funcioanndo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Marcelocostanzo 0:7dfaf751d942 1 #include "mbed.h"
Marcelocostanzo 0:7dfaf751d942 2 #include "reScale.h"
Marcelocostanzo 0:7dfaf751d942 3
Marcelocostanzo 0:7dfaf751d942 4 #define tole_min 10 //tolerancia minima em km/h de destracionamento
Marcelocostanzo 0:7dfaf751d942 5 #define tole_max 60 //tolerancia maxima em km/h de destracionamento
Marcelocostanzo 0:7dfaf751d942 6 #define ndentes 60 //numero de dentes do sensor
Marcelocostanzo 0:7dfaf751d942 7
Marcelocostanzo 0:7dfaf751d942 8 InterruptIn motora(D2);
Marcelocostanzo 0:7dfaf751d942 9 InterruptIn movida(D3);
Marcelocostanzo 0:7dfaf751d942 10
Marcelocostanzo 0:7dfaf751d942 11 DigitalOut ign(LED2);
Marcelocostanzo 0:7dfaf751d942 12
Marcelocostanzo 0:7dfaf751d942 13 PwmOut boost(D9);
Marcelocostanzo 0:7dfaf751d942 14
Marcelocostanzo 0:7dfaf751d942 15 Timer t1;
Marcelocostanzo 0:7dfaf751d942 16 Timer t2;
Marcelocostanzo 0:7dfaf751d942 17 Ticker flipper;
Marcelocostanzo 0:7dfaf751d942 18
Marcelocostanzo 0:7dfaf751d942 19 //Serial pc(USBTX, USBRX); // tx, rx
Marcelocostanzo 0:7dfaf751d942 20 Serial device(PC_10, PC_11); // tx, rx
Marcelocostanzo 0:7dfaf751d942 21
Marcelocostanzo 0:7dfaf751d942 22 reScale deltapwm(tole_min,tole_max,0.0,1.0); //para escalar o destracionamento em pwm para solenoide da turbina
Marcelocostanzo 0:7dfaf751d942 23 reScale velogauge1(45,260,0,1.0);
Marcelocostanzo 0:7dfaf751d942 24 reScale velogauge2(tole_min,tole_max,0.0,1.0);
Marcelocostanzo 0:7dfaf751d942 25
Marcelocostanzo 0:7dfaf751d942 26 //ORGANIZAR AS VARIAVEIS, GLOBAIS PARA POSSIVEIS LOCAIS
Marcelocostanzo 0:7dfaf751d942 27 //----------variaveis globais-------------------------------------------------
Marcelocostanzo 0:7dfaf751d942 28 float t_motora=0, t_movida=0, pneu_largura,pneu_perfil,pneu_aro, pwmturbo=0, t_movidabkp, t_motorabkp;
Marcelocostanzo 0:7dfaf751d942 29 float perimetro_movida, perimetro_motora, raio_dinamico, delta=0, vel_movida=0, vel_motora=0;
Marcelocostanzo 0:7dfaf751d942 30 char command[17], i=0, X = 255;
Marcelocostanzo 0:7dfaf751d942 31 uint16_t val1, val16, val256, val4096, veluint;
Marcelocostanzo 0:7dfaf751d942 32 bool flag=0, flagbff;
Marcelocostanzo 0:7dfaf751d942 33
Marcelocostanzo 0:7dfaf751d942 34
Marcelocostanzo 0:7dfaf751d942 35 void livre()//rotina de input capture para a roda movida
Marcelocostanzo 0:7dfaf751d942 36 {
Marcelocostanzo 0:7dfaf751d942 37 t2.stop();
Marcelocostanzo 0:7dfaf751d942 38 t_movida = t2.read_us();
Marcelocostanzo 0:7dfaf751d942 39 t2.reset();
Marcelocostanzo 0:7dfaf751d942 40 t2.start();
Marcelocostanzo 0:7dfaf751d942 41 }
Marcelocostanzo 0:7dfaf751d942 42
Marcelocostanzo 0:7dfaf751d942 43 void tracao() //rotina de input capture para a roda motora
Marcelocostanzo 0:7dfaf751d942 44 {
Marcelocostanzo 0:7dfaf751d942 45 t1.stop();
Marcelocostanzo 0:7dfaf751d942 46 t_motora = t1.read_us();
Marcelocostanzo 0:7dfaf751d942 47 t1.reset();
Marcelocostanzo 0:7dfaf751d942 48 t1.start();
Marcelocostanzo 0:7dfaf751d942 49 }
Marcelocostanzo 0:7dfaf751d942 50
Marcelocostanzo 0:7dfaf751d942 51 void flip() //time para envio das infos pela serial
Marcelocostanzo 0:7dfaf751d942 52 {
Marcelocostanzo 0:7dfaf751d942 53 flag=!flag;
Marcelocostanzo 0:7dfaf751d942 54 }
Marcelocostanzo 0:7dfaf751d942 55
Marcelocostanzo 0:7dfaf751d942 56 void flushSerialBuffer(void) //rotina para limpar o buffer da serial
Marcelocostanzo 0:7dfaf751d942 57 {
Marcelocostanzo 0:7dfaf751d942 58 char char1 = 0;
Marcelocostanzo 0:7dfaf751d942 59 while (device.readable())
Marcelocostanzo 0:7dfaf751d942 60 {
Marcelocostanzo 0:7dfaf751d942 61 char1 = device.getc();
Marcelocostanzo 0:7dfaf751d942 62 } return;
Marcelocostanzo 0:7dfaf751d942 63 }
Marcelocostanzo 0:7dfaf751d942 64
Marcelocostanzo 0:7dfaf751d942 65 int main()
Marcelocostanzo 0:7dfaf751d942 66 {
Marcelocostanzo 0:7dfaf751d942 67 device.baud(115200);
Marcelocostanzo 0:7dfaf751d942 68 wait(1.0);
Marcelocostanzo 0:7dfaf751d942 69
Marcelocostanzo 0:7dfaf751d942 70 flushSerialBuffer();
Marcelocostanzo 0:7dfaf751d942 71
Marcelocostanzo 0:7dfaf751d942 72 motora.fall(&tracao); //habilita a interrupt de borda de descida para a roda motora
Marcelocostanzo 0:7dfaf751d942 73 movida.fall(&livre); //habilita a interrupt de borda de descida para a roda movida
Marcelocostanzo 0:7dfaf751d942 74 flipper.attach(&flip, 0.1); //habilita a interrupt que ocorre a 10Hz para envio das infos
Marcelocostanzo 0:7dfaf751d942 75
Marcelocostanzo 0:7dfaf751d942 76 boost.period(0.05f); //set da frequencia do pwm para 20Hz
Marcelocostanzo 0:7dfaf751d942 77
Marcelocostanzo 0:7dfaf751d942 78 while(1)
Marcelocostanzo 0:7dfaf751d942 79 {
Marcelocostanzo 0:7dfaf751d942 80 if(device.readable()) //verifica se há algo no buffer da serial
Marcelocostanzo 0:7dfaf751d942 81 {
Marcelocostanzo 0:7dfaf751d942 82 flipper.detach(); //desabilita o envio das infos
Marcelocostanzo 0:7dfaf751d942 83 ign = !ign; //troca o estado do led, fins de depuração
Marcelocostanzo 0:7dfaf751d942 84 for(i=0;i<17;i++) //le os 17 caracteres na serial
Marcelocostanzo 0:7dfaf751d942 85 {
Marcelocostanzo 0:7dfaf751d942 86 command[i]=device.getc();
Marcelocostanzo 0:7dfaf751d942 87 }
Marcelocostanzo 0:7dfaf751d942 88
Marcelocostanzo 0:7dfaf751d942 89 if(command[1]==0x03) //caso a pagina 3 seja lida, motora
Marcelocostanzo 0:7dfaf751d942 90 {
Marcelocostanzo 0:7dfaf751d942 91 val1 = command[6]<<8;
Marcelocostanzo 0:7dfaf751d942 92 val16 = command[5];
Marcelocostanzo 0:7dfaf751d942 93 pneu_largura = val1 + val16;//calcula a largura do pneu
Marcelocostanzo 0:7dfaf751d942 94
Marcelocostanzo 0:7dfaf751d942 95 val1 = command[10]<<8;
Marcelocostanzo 0:7dfaf751d942 96 val16 = command[9];
Marcelocostanzo 0:7dfaf751d942 97 pneu_perfil = val1 + val16;//calcula o perfil do pneu
Marcelocostanzo 0:7dfaf751d942 98
Marcelocostanzo 0:7dfaf751d942 99 val1 = command[14]<<8;
Marcelocostanzo 0:7dfaf751d942 100 val16 = command[13];
Marcelocostanzo 0:7dfaf751d942 101 pneu_aro = val1 + val16;//calcula o aro do pneu
Marcelocostanzo 0:7dfaf751d942 102
Marcelocostanzo 0:7dfaf751d942 103 //a seguir calcula o perimetro em metros da roda motora
Marcelocostanzo 0:7dfaf751d942 104 pneu_perfil = pneu_perfil / 100;
Marcelocostanzo 0:7dfaf751d942 105 raio_dinamico = pneu_largura * pneu_perfil;
Marcelocostanzo 0:7dfaf751d942 106 pneu_aro = pneu_aro * 25.4;
Marcelocostanzo 0:7dfaf751d942 107 raio_dinamico = raio_dinamico + pneu_aro;
Marcelocostanzo 0:7dfaf751d942 108 perimetro_motora = raio_dinamico * 3.14; //resultado em milimetros
Marcelocostanzo 0:7dfaf751d942 109 perimetro_motora = perimetro_motora / 1000; //converter em metros
Marcelocostanzo 0:7dfaf751d942 110 }
Marcelocostanzo 0:7dfaf751d942 111
Marcelocostanzo 0:7dfaf751d942 112 if(command[1]==0x04)//caso a pagina 3 seja lida, movida
Marcelocostanzo 0:7dfaf751d942 113 {
Marcelocostanzo 0:7dfaf751d942 114 val1 = command[6]<<8;
Marcelocostanzo 0:7dfaf751d942 115 val16 = command[5];
Marcelocostanzo 0:7dfaf751d942 116 pneu_largura = val1 + val16;//calcula a largura do pneu
Marcelocostanzo 0:7dfaf751d942 117
Marcelocostanzo 0:7dfaf751d942 118 val1 = command[10]<<8;
Marcelocostanzo 0:7dfaf751d942 119 val16 = command[9];
Marcelocostanzo 0:7dfaf751d942 120 pneu_perfil = val1 + val16;//calcula o perfil do pneu
Marcelocostanzo 0:7dfaf751d942 121
Marcelocostanzo 0:7dfaf751d942 122 val1 = command[14]<<8;
Marcelocostanzo 0:7dfaf751d942 123 val16 = command[13];
Marcelocostanzo 0:7dfaf751d942 124 pneu_aro = val1 + val16;//calcula o aro do pneu
Marcelocostanzo 0:7dfaf751d942 125
Marcelocostanzo 0:7dfaf751d942 126 //a seguir calcula o perimetro em metros da roda movida
Marcelocostanzo 0:7dfaf751d942 127 pneu_perfil = pneu_perfil / 100;
Marcelocostanzo 0:7dfaf751d942 128 raio_dinamico = pneu_largura * pneu_perfil;
Marcelocostanzo 0:7dfaf751d942 129 pneu_aro = pneu_aro * 25.4;
Marcelocostanzo 0:7dfaf751d942 130 raio_dinamico = raio_dinamico + pneu_aro;
Marcelocostanzo 0:7dfaf751d942 131 perimetro_movida = raio_dinamico * 3.14; //resultado em milimetros
Marcelocostanzo 0:7dfaf751d942 132 perimetro_movida = perimetro_movida / 1000; //converter em metros
Marcelocostanzo 0:7dfaf751d942 133 }
Marcelocostanzo 0:7dfaf751d942 134 flipper.attach(&flip, 0.1); //habilita o envio das infos
Marcelocostanzo 0:7dfaf751d942 135 }
Marcelocostanzo 0:7dfaf751d942 136
Marcelocostanzo 0:7dfaf751d942 137 //para garantir que ao parar de receber pulsos, a tela não fique mostrando a ultima velocidade
Marcelocostanzo 0:7dfaf751d942 138 if(t_motora > 350000)
Marcelocostanzo 0:7dfaf751d942 139 t_motora = 0;
Marcelocostanzo 0:7dfaf751d942 140
Marcelocostanzo 0:7dfaf751d942 141 //para garantir que ao parar de receber pulsos, a tela não fique mostrando a ultima velocidade
Marcelocostanzo 0:7dfaf751d942 142 if(t_movida > 350000)
Marcelocostanzo 0:7dfaf751d942 143 t_movida = 0;
Marcelocostanzo 0:7dfaf751d942 144
Marcelocostanzo 0:7dfaf751d942 145 //calcula a velocidade da roda motora
Marcelocostanzo 0:7dfaf751d942 146 t_motorabkp = t_motora;
Marcelocostanzo 0:7dfaf751d942 147 t_motorabkp = t_motorabkp * ndentes;
Marcelocostanzo 0:7dfaf751d942 148 t_motorabkp = t_motorabkp / 1000000;
Marcelocostanzo 0:7dfaf751d942 149 vel_motora = perimetro_motora / t_motorabkp;
Marcelocostanzo 0:7dfaf751d942 150 vel_motora = vel_motora * 3.6;// m/s para km/h
Marcelocostanzo 0:7dfaf751d942 151
Marcelocostanzo 0:7dfaf751d942 152 //calcula a velocidade da roda movida
Marcelocostanzo 0:7dfaf751d942 153 t_movidabkp = t_movida;
Marcelocostanzo 0:7dfaf751d942 154 t_movidabkp = t_movidabkp * ndentes;
Marcelocostanzo 0:7dfaf751d942 155 t_movidabkp = t_movidabkp / 1000000;
Marcelocostanzo 0:7dfaf751d942 156 vel_movida = perimetro_movida / t_movidabkp;
Marcelocostanzo 0:7dfaf751d942 157 vel_movida = vel_movida * 3.6;// m/s para km/h
Marcelocostanzo 0:7dfaf751d942 158
Marcelocostanzo 0:7dfaf751d942 159
Marcelocostanzo 0:7dfaf751d942 160 delta = vel_motora - vel_movida;// calcula o quanto o veiculo esta destracionando
Marcelocostanzo 0:7dfaf751d942 161
Marcelocostanzo 0:7dfaf751d942 162 if(delta<=0) //garante que não exista valores negativos de destracionamento
Marcelocostanzo 0:7dfaf751d942 163 {
Marcelocostanzo 0:7dfaf751d942 164 delta=0;
Marcelocostanzo 0:7dfaf751d942 165 }
Marcelocostanzo 0:7dfaf751d942 166
Marcelocostanzo 0:7dfaf751d942 167 pwmturbo = deltapwm.from(delta); //escala o valor de destracionamento para o pwm da solenoide
Marcelocostanzo 0:7dfaf751d942 168
Marcelocostanzo 0:7dfaf751d942 169 if(pwmturbo<=0) //garante que não exista valores negativos de pwm
Marcelocostanzo 0:7dfaf751d942 170 {
Marcelocostanzo 0:7dfaf751d942 171 pwmturbo = 0;
Marcelocostanzo 0:7dfaf751d942 172 }
Marcelocostanzo 0:7dfaf751d942 173
Marcelocostanzo 0:7dfaf751d942 174 boost.write(pwmturbo); //set do duty cycle 0.0 - 1.0, valor float
Marcelocostanzo 0:7dfaf751d942 175 pwmturbo = pwmturbo * 100; //apos o uso da variavel, converto em porcentagem para exibir no display
Marcelocostanzo 0:7dfaf751d942 176
Marcelocostanzo 0:7dfaf751d942 177 if(flag==1) //caso tenha passado 100mS, envia as infos
Marcelocostanzo 0:7dfaf751d942 178 {
Marcelocostanzo 0:7dfaf751d942 179 if(pwmturbo>=1)//troca a cor do icone no display para vermelho
Marcelocostanzo 0:7dfaf751d942 180 {
Marcelocostanzo 0:7dfaf751d942 181 device.printf("vis p0,1");
Marcelocostanzo 0:7dfaf751d942 182 device.printf("%c%c%c",X,X,X);
Marcelocostanzo 0:7dfaf751d942 183 }
Marcelocostanzo 0:7dfaf751d942 184 else //troca a cor do icone no display para verde
Marcelocostanzo 0:7dfaf751d942 185 {
Marcelocostanzo 0:7dfaf751d942 186 device.printf("vis p1,1");
Marcelocostanzo 0:7dfaf751d942 187 device.printf("%c%c%c",X,X,X);
Marcelocostanzo 0:7dfaf751d942 188 }
Marcelocostanzo 0:7dfaf751d942 189 device.printf("n0.val=%.f",vel_movida);
Marcelocostanzo 0:7dfaf751d942 190 device.printf("%c%c%c",X,X,X);
Marcelocostanzo 0:7dfaf751d942 191 device.printf("n1.val=%.f",delta);
Marcelocostanzo 0:7dfaf751d942 192 device.printf("%c%c%c",X,X,X);
Marcelocostanzo 0:7dfaf751d942 193 device.printf("n8.val=%.f",pwmturbo);
Marcelocostanzo 0:7dfaf751d942 194 device.printf("%c%c%c",X,X,X); //caracter para fim de info, necessario para o display receber a info
Marcelocostanzo 0:7dfaf751d942 195 flag=0;
Marcelocostanzo 0:7dfaf751d942 196 }
Marcelocostanzo 0:7dfaf751d942 197 }
Marcelocostanzo 0:7dfaf751d942 198 }