Codigo do seguidor de linha V2 2020.2
Dependencies: mbed
main.cpp
- Committer:
- rperoba
- Date:
- 2020-09-19
- Revision:
- 0:9efe13b5d868
- Child:
- 2:4db1486af4d5
- Child:
- 6:5551834026ef
File content as of revision 0:9efe13b5d868:
#include "mbed.h" #include "LineSensor.h" #include "bluetooth.h" #include "encoder.h" #include "motors.h" #include "PID.h" InterruptIn Botao (p5); DigitalOut Led (p6); int botao = 0; int comando = 1; float correcaoPD; double erroSensores; float velocidadeEsquerda; float velocidadeDireita; float velocidadeRealEsquerda; float velocidadeRealDireita; float velocidadeBase = 0.18; Callback<void()> AlteraComando(){ botao++; } void PiscaLed(){ if(Led){ Led = 0; } else{ Led = 1; } } int main() { Botao.rise(AlteraComando()); Setup_Motores(); while(botao == 0){ //Espera o aperto do botao para iniciar a calibragem, o led permanecera acesso para indicar esta fase wait_us(10); Led = 1; } while (botao == 1) //Inicialmente calibra os sensores ao ligar o seguidor,o led fica piscando para mostrar que a calibragem esta acontecendo { //Espera que se aperte o botao para terminar a calibragem CalibragemDosSensores(); PiscaLed(); } Led = 0; //Certificando que o led esta apagado depois da calibragem wait_us(5000); //Espera 5 segundos para poder mudar a posição de calibrar os sensores para a de correr //Tocar o buzzer parar avisar q ai começar a correr while(1){ switch(comando){ //Comando = 1 -> Faz a pista devagar e mapeando //Comando = 2 -> Faz a pista usando a leitura do mapa //Comando = 3 -> Faz a usando a leitura do mapa e ultrapassando os limites de velocidade case 1: 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; //velocidadeRealDireita = ; //Pega a velocidade do seguidor lida pelos encoderes //velocidadeRealEsquerda = ; velocidadeEsquerda = PID_rodaEsquerda(velocidadeEsquerda,velocidadeRealEsquerda); //Faz o ajusta final da velocidade das rodas velocidadeDireita = PID_rodaDireita(velocidadeDireita,velocidadeRealDireita); ControleMotores(velocidadeEsquerda,velocidadeDireita); //Muda a velocidade das rodas para as velocidades calculadas anteriormente //Mapear a pista break; case 2: break; case 3: break; default: ParadaFinal(); break; } } }