Codigo do seguidor de linha V2 2020.2
Dependencies: mbed
Diff: main.cpp
- Revision:
- 3:9240a689fbf8
- Parent:
- 2:4db1486af4d5
- Child:
- 4:af8cfbac17bb
--- a/main.cpp Sat Sep 26 14:36:55 2020 -0300 +++ b/main.cpp Fri Oct 02 19:34:01 2020 -0300 @@ -19,7 +19,8 @@ float velocidadeDireita; float velocidadeRealEsquerda; float velocidadeRealDireita; -float velocidadeBase = 0.18; +float velocidadeAtual = 0.18; +float novaVelocidade; bool estadoAsaDireita = false; bool estadoAsaEsquerda = false; @@ -61,12 +62,12 @@ //Comando = 3 -> Faz a usando a leitura do mapa e ultrapassando os limites de velocidade case 1: while(1){ - velocidadeBase = VelocidadeBateria(velocidadeBase); //Ajuste da velocidade por causa da descarga da bateria + velocidadeAtual = VelocidadeBateria(velocidadeAtual); //Ajuste da velocidade por causa da descarga da bateria LerSensoresFrontais(); //Leitura dos sensores frontais erroSensores = CalculaErro(); //Calcula o arco do erro dos sensores correcaoPD = PID_Sensores(erroSensores); //Calcula a correção do PD angular - velocidadeEsquerda = velocidadeBase + correcaoPD; //Ajusta a inicialmente a velocidade das rodas para manter na linha - velocidadeDireita = velocidadeBase - correcaoPD; + velocidadeEsquerda = velocidadeAtual + correcaoPD; //Ajusta a inicialmente a velocidade das rodas para manter na linha + velocidadeDireita = velocidadeAtual - correcaoPD; velocidadeRealDireita = retornaVelDireita(); //velocidade em /m/s velocidadeRealEsquerda = retornaVelEsquerda(); velocidadeEsquerda = PID_rodaEsquerda(velocidadeEsquerda,velocidadeRealEsquerda); //Faz o ajusta final da velocidade das rodas @@ -89,12 +90,20 @@ case 2: //Percorre a pista com o uso do mapa while(1){ - //velocidadeBase = VelocidadeBateria(VELOCIDADE DO MAPA); //Ajuste da velocidade por causa da descarga da bateria + /* + if(ditancia pra curva < distancia pra desacelerar){ //Seleciona a velocidade + novaVelocidade = VelocidadeBateria ( VELOCIDADE DO MAPA + 1) + } + else{ + novaVelocidade = VelocidadeBateria(VELOCIDADE DO MAPA); + } + Acelerando(float novaVelocidade); //Acelera ou desacelera o robo + */ LerSensoresFrontais(); //Leitura dos sensores frontais erroSensores = CalculaErro(); //Calcula o arco do erro dos sensores correcaoPD = PID_Sensores(erroSensores); //Calcula a correção do PD angular - velocidadeEsquerda = velocidadeBase + correcaoPD; //Ajusta a inicialmente a velocidade das rodas para manter na linha - velocidadeDireita = velocidadeBase - correcaoPD; + velocidadeEsquerda = velocidadeAtual + correcaoPD; //Ajusta a inicialmente a velocidade das rodas para manter na linha + velocidadeDireita = velocidadeAtual - correcaoPD; velocidadeRealDireita = retornaVelDireita(); //velocidade em /m/s velocidadeRealEsquerda = retornaVelEsquerda(); velocidadeEsquerda = PID_rodaEsquerda(velocidadeEsquerda,velocidadeRealEsquerda); //Faz o ajusta final da velocidade das rodas @@ -103,10 +112,13 @@ estadoAsaDireita = LerAsaDireita(); estadoAsaEsquerda = LerAsaEsquerda(); if(estadoAsaEsquerda || estadoAsaDireita ){ //Checa os sensores laterais - //MAPA + 1 POSICAO //faz o mapeamento da pista - if (estadoAsaDireita && !estadoAsaEsquerda){ + if(!estadoAsaEsquerda || estadoAsaDireita){ //Leu somente o asa direita + //MAPA + 1 POSICAO //Atualiza a etapa do mapa da pista que esta sendo lido + } + if(estadoAsaDireita && !estadoAsaEsquerda){ //Leu somente a asa esquerda contadorAsaDireita++; //Faz as contagens das marcacoes a direita - if(contadorAsaDireita >=2){//ARRUMAR UM JEITO DE DAR UM TEMPO ENTRE A LEITURA E O SEGUIDOR PARAR PARA ELE PASSAR TODO PELA LINHA DE CHAGADA + if(contadorAsaDireita >=2){ + Desacelerando(0); ParadaFinal(); //Para o seguidor na segunda marcacao } }