Header dos motores do seguidor de linha
motors.cpp
- Committer:
- lucalm
- Date:
- 2020-09-17
- Revision:
- 0:8c5a0e6a171b
- Child:
- 1:c32f37416338
File content as of revision 0:8c5a0e6a171b:
#include "mbed.h" #include "motors.h" /*================================================= --------------- CODIGO DOS MOTORES ---------------- =================================================*/ //------------------ FUNCOES ---------------------- #define velocidadeBase 0.18 PwmOut rodaEsquerda(p25); // Potencias da roda e direções DigitalOut direcaoEsquerda (p26); PwmOut rodaDireita(p24); DigitalOut direcaoDireita (p23); AnalogIn batMeasure (p22); void pulsoInicial() { rodaEsquerda.period(0.00); rodaDireita.period(0.00); } void Setup_Motores(void)//Funcao de setup dos motores { rodaEsquerda.period(0.01); rodaDireita.period(0.01); } void controleMotores (float VelocidadeEsquerda, float VelocidadeDireita ){ //Função drive, controla a velocidade de cada roda if (VelocidadeEsquerda <= 0){// VelocidadeEsquerda = abs(VelocidadeEsquerda);//Utiliza o modulo da velocidade, pois esta nao pode ser negativa direcaoEsquerda = 0;//Muda a direcao da roda. rodaEsquerda.write(VelocidadeEsquerda); } else { direcaoEsquerda = 1; rodaEsquerda.write(VelocidadeEsquerda); }//Mantem a direcao da roda. if (VelocidadeDireita <= 0){ VelocidadeDireita = abs(VelocidadeDireita); direcaoDireita = 0; rodaDireita.write(VelocidadeDireita); } else { direcaoDireita = 1; rodaDireita.write(VelocidadeDireita); } } void Acelerando(float velocidadeMax)//Acelera o seguidor de linha { int bandeira = 0; float novaVelocidade = velocidadeBase; while(bandeira == 0) { novaVelocidade = novaVelocidade + 0.01; wait(0.01); if (novaVelocidade <= velocidadeMax) { bandeira = 1; } } } void Desacelerando(float velocidadeMin)//Desacelera o seguidor de linha { int bandeira = 0; float novaVelocidade = velocidadeBase; while(bandeira == 0) { novaVelocidade = novaVelocidade - 0.01; wait(0.01); if (novaVelocidade <= velocidadeMin) { bandeira = 1; } } } void VelocidadeBateria() // Funcao de setup da velocidade base dos motores { float leituraBateria = batMeasure.read(); //Lendo a carga da bateria em um numero de 0 a 1 float tensaoBateria = 12.6 * leituraBateria; // Carga atual da bateria em Volts float novaVelocidade = velocidadeBase * 8.4/tensaoBateria;// Calculando a nova velocidade de acordo com a medida de carga atual da bateria return; } void Final_Stop() { while(1) { direcaoEsquerda = 0; direcaoDireita = 0; rodaEsquerda.write(0); rodaDireita.write(0); } } //Função de parada do LF depois do percurso /*void Para_Demonio (void){ direcaoEsquerda = 0; direcaoDireita = 0; rodaEsquerda.write(0); rodaDireita.write(0); } //Mantém o LF parado void Volta_Pra_Linha (){ //Faz o LF voltar para o último lado em que leu a linha, caso tenha pertido (função não funcional, precisa alterar a velocidade) if (Position == 0){ if (lastSensor > 0) { Esquerda_Esperada = -50; Direita_Esperada = 80; } else { Esquerda_Esperada = 80; Direita_Esperada = -50; } } else { lastSensor = Error; } } */