Header dos motores do seguidor de linha
Diff: motors.cpp
- Revision:
- 0:8c5a0e6a171b
- Child:
- 1:c32f37416338
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/motors.cpp Thu Sep 17 15:08:31 2020 +0000 @@ -0,0 +1,104 @@ +#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; } +} +*/ \ No newline at end of file