Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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; }
}
*/