Marcelo Costanzo Miranda
/
COntrole_nextion_F103
Controle de traçao com interface nextion
Revision 0:7dfaf751d942, committed 2018-05-16
- Comitter:
- Marcelocostanzo
- Date:
- Wed May 16 19:49:21 2018 +0000
- Commit message:
- funcioanndo
Changed in this revision
diff -r 000000000000 -r 7dfaf751d942 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed May 16 19:49:21 2018 +0000 @@ -0,0 +1,198 @@ +#include "mbed.h" +#include "reScale.h" + +#define tole_min 10 //tolerancia minima em km/h de destracionamento +#define tole_max 60 //tolerancia maxima em km/h de destracionamento +#define ndentes 60 //numero de dentes do sensor + +InterruptIn motora(D2); +InterruptIn movida(D3); + +DigitalOut ign(LED2); + +PwmOut boost(D9); + +Timer t1; +Timer t2; +Ticker flipper; + +//Serial pc(USBTX, USBRX); // tx, rx +Serial device(PC_10, PC_11); // tx, rx + +reScale deltapwm(tole_min,tole_max,0.0,1.0); //para escalar o destracionamento em pwm para solenoide da turbina +reScale velogauge1(45,260,0,1.0); +reScale velogauge2(tole_min,tole_max,0.0,1.0); + +//ORGANIZAR AS VARIAVEIS, GLOBAIS PARA POSSIVEIS LOCAIS +//----------variaveis globais------------------------------------------------- +float t_motora=0, t_movida=0, pneu_largura,pneu_perfil,pneu_aro, pwmturbo=0, t_movidabkp, t_motorabkp; +float perimetro_movida, perimetro_motora, raio_dinamico, delta=0, vel_movida=0, vel_motora=0; +char command[17], i=0, X = 255; +uint16_t val1, val16, val256, val4096, veluint; +bool flag=0, flagbff; + + +void livre()//rotina de input capture para a roda movida +{ + t2.stop(); + t_movida = t2.read_us(); + t2.reset(); + t2.start(); +} + +void tracao() //rotina de input capture para a roda motora +{ + t1.stop(); + t_motora = t1.read_us(); + t1.reset(); + t1.start(); +} + +void flip() //time para envio das infos pela serial +{ + flag=!flag; +} + +void flushSerialBuffer(void) //rotina para limpar o buffer da serial +{ + char char1 = 0; + while (device.readable()) + { + char1 = device.getc(); + } return; +} + +int main() +{ + device.baud(115200); + wait(1.0); + + flushSerialBuffer(); + + motora.fall(&tracao); //habilita a interrupt de borda de descida para a roda motora + movida.fall(&livre); //habilita a interrupt de borda de descida para a roda movida + flipper.attach(&flip, 0.1); //habilita a interrupt que ocorre a 10Hz para envio das infos + + boost.period(0.05f); //set da frequencia do pwm para 20Hz + + while(1) + { + if(device.readable()) //verifica se há algo no buffer da serial + { + flipper.detach(); //desabilita o envio das infos + ign = !ign; //troca o estado do led, fins de depuração + for(i=0;i<17;i++) //le os 17 caracteres na serial + { + command[i]=device.getc(); + } + + if(command[1]==0x03) //caso a pagina 3 seja lida, motora + { + val1 = command[6]<<8; + val16 = command[5]; + pneu_largura = val1 + val16;//calcula a largura do pneu + + val1 = command[10]<<8; + val16 = command[9]; + pneu_perfil = val1 + val16;//calcula o perfil do pneu + + val1 = command[14]<<8; + val16 = command[13]; + pneu_aro = val1 + val16;//calcula o aro do pneu + + //a seguir calcula o perimetro em metros da roda motora + pneu_perfil = pneu_perfil / 100; + raio_dinamico = pneu_largura * pneu_perfil; + pneu_aro = pneu_aro * 25.4; + raio_dinamico = raio_dinamico + pneu_aro; + perimetro_motora = raio_dinamico * 3.14; //resultado em milimetros + perimetro_motora = perimetro_motora / 1000; //converter em metros + } + + if(command[1]==0x04)//caso a pagina 3 seja lida, movida + { + val1 = command[6]<<8; + val16 = command[5]; + pneu_largura = val1 + val16;//calcula a largura do pneu + + val1 = command[10]<<8; + val16 = command[9]; + pneu_perfil = val1 + val16;//calcula o perfil do pneu + + val1 = command[14]<<8; + val16 = command[13]; + pneu_aro = val1 + val16;//calcula o aro do pneu + + //a seguir calcula o perimetro em metros da roda movida + pneu_perfil = pneu_perfil / 100; + raio_dinamico = pneu_largura * pneu_perfil; + pneu_aro = pneu_aro * 25.4; + raio_dinamico = raio_dinamico + pneu_aro; + perimetro_movida = raio_dinamico * 3.14; //resultado em milimetros + perimetro_movida = perimetro_movida / 1000; //converter em metros + } + flipper.attach(&flip, 0.1); //habilita o envio das infos + } + + //para garantir que ao parar de receber pulsos, a tela não fique mostrando a ultima velocidade + if(t_motora > 350000) + t_motora = 0; + + //para garantir que ao parar de receber pulsos, a tela não fique mostrando a ultima velocidade + if(t_movida > 350000) + t_movida = 0; + + //calcula a velocidade da roda motora + t_motorabkp = t_motora; + t_motorabkp = t_motorabkp * ndentes; + t_motorabkp = t_motorabkp / 1000000; + vel_motora = perimetro_motora / t_motorabkp; + vel_motora = vel_motora * 3.6;// m/s para km/h + + //calcula a velocidade da roda movida + t_movidabkp = t_movida; + t_movidabkp = t_movidabkp * ndentes; + t_movidabkp = t_movidabkp / 1000000; + vel_movida = perimetro_movida / t_movidabkp; + vel_movida = vel_movida * 3.6;// m/s para km/h + + + delta = vel_motora - vel_movida;// calcula o quanto o veiculo esta destracionando + + if(delta<=0) //garante que não exista valores negativos de destracionamento + { + delta=0; + } + + pwmturbo = deltapwm.from(delta); //escala o valor de destracionamento para o pwm da solenoide + + if(pwmturbo<=0) //garante que não exista valores negativos de pwm + { + pwmturbo = 0; + } + + boost.write(pwmturbo); //set do duty cycle 0.0 - 1.0, valor float + pwmturbo = pwmturbo * 100; //apos o uso da variavel, converto em porcentagem para exibir no display + + if(flag==1) //caso tenha passado 100mS, envia as infos + { + if(pwmturbo>=1)//troca a cor do icone no display para vermelho + { + device.printf("vis p0,1"); + device.printf("%c%c%c",X,X,X); + } + else //troca a cor do icone no display para verde + { + device.printf("vis p1,1"); + device.printf("%c%c%c",X,X,X); + } + device.printf("n0.val=%.f",vel_movida); + device.printf("%c%c%c",X,X,X); + device.printf("n1.val=%.f",delta); + device.printf("%c%c%c",X,X,X); + device.printf("n8.val=%.f",pwmturbo); + device.printf("%c%c%c",X,X,X); //caracter para fim de info, necessario para o display receber a info + flag=0; + } + } +}
diff -r 000000000000 -r 7dfaf751d942 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed May 16 19:49:21 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/5aab5a7997ee \ No newline at end of file
diff -r 000000000000 -r 7dfaf751d942 reScale.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/reScale.lib Wed May 16 19:49:21 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/Marcelocostanzo/code/reScale/#1715e312322b