Header dos motores do seguidor de linha

Committer:
lucalm
Date:
Thu Sep 17 15:10:20 2020 +0000
Revision:
1:c32f37416338
Parent:
0:8c5a0e6a171b
Child:
2:a68b0082faac
Header dos motores

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lucalm 0:8c5a0e6a171b 1 #include "mbed.h"
lucalm 0:8c5a0e6a171b 2 #include "motors.h"
lucalm 0:8c5a0e6a171b 3
lucalm 0:8c5a0e6a171b 4 /*=================================================
lucalm 0:8c5a0e6a171b 5 --------------- CODIGO DOS MOTORES ----------------
lucalm 0:8c5a0e6a171b 6 =================================================*/
lucalm 0:8c5a0e6a171b 7
lucalm 0:8c5a0e6a171b 8 //------------------ FUNCOES ----------------------
lucalm 0:8c5a0e6a171b 9 #define velocidadeBase 0.18
lucalm 0:8c5a0e6a171b 10
lucalm 0:8c5a0e6a171b 11 PwmOut rodaEsquerda(p25); // Potencias da roda e direções
lucalm 0:8c5a0e6a171b 12 DigitalOut direcaoEsquerda (p26);
lucalm 0:8c5a0e6a171b 13 PwmOut rodaDireita(p24);
lucalm 0:8c5a0e6a171b 14 DigitalOut direcaoDireita (p23);
lucalm 0:8c5a0e6a171b 15 AnalogIn batMeasure (p22);
lucalm 0:8c5a0e6a171b 16
lucalm 1:c32f37416338 17 void PulsoInicial()
lucalm 0:8c5a0e6a171b 18 {
lucalm 0:8c5a0e6a171b 19 rodaEsquerda.period(0.00);
lucalm 0:8c5a0e6a171b 20 rodaDireita.period(0.00);
lucalm 0:8c5a0e6a171b 21 }
lucalm 0:8c5a0e6a171b 22
lucalm 0:8c5a0e6a171b 23 void Setup_Motores(void)//Funcao de setup dos motores
lucalm 0:8c5a0e6a171b 24 {
lucalm 0:8c5a0e6a171b 25 rodaEsquerda.period(0.01);
lucalm 0:8c5a0e6a171b 26 rodaDireita.period(0.01);
lucalm 0:8c5a0e6a171b 27 }
lucalm 0:8c5a0e6a171b 28
lucalm 1:c32f37416338 29 void ControleMotores (float VelocidadeEsquerda, float VelocidadeDireita ){ //Função drive, controla a velocidade de cada roda
lucalm 0:8c5a0e6a171b 30
lucalm 0:8c5a0e6a171b 31 if (VelocidadeEsquerda <= 0){//
lucalm 0:8c5a0e6a171b 32 VelocidadeEsquerda = abs(VelocidadeEsquerda);//Utiliza o modulo da velocidade, pois esta nao pode ser negativa
lucalm 0:8c5a0e6a171b 33 direcaoEsquerda = 0;//Muda a direcao da roda.
lucalm 0:8c5a0e6a171b 34 rodaEsquerda.write(VelocidadeEsquerda);
lucalm 0:8c5a0e6a171b 35 }
lucalm 0:8c5a0e6a171b 36 else { direcaoEsquerda = 1; rodaEsquerda.write(VelocidadeEsquerda); }//Mantem a direcao da roda.
lucalm 0:8c5a0e6a171b 37
lucalm 0:8c5a0e6a171b 38 if (VelocidadeDireita <= 0){
lucalm 0:8c5a0e6a171b 39 VelocidadeDireita = abs(VelocidadeDireita);
lucalm 0:8c5a0e6a171b 40 direcaoDireita = 0;
lucalm 0:8c5a0e6a171b 41 rodaDireita.write(VelocidadeDireita);
lucalm 0:8c5a0e6a171b 42 }
lucalm 0:8c5a0e6a171b 43 else { direcaoDireita = 1; rodaDireita.write(VelocidadeDireita); }
lucalm 0:8c5a0e6a171b 44 }
lucalm 0:8c5a0e6a171b 45
lucalm 0:8c5a0e6a171b 46 void Acelerando(float velocidadeMax)//Acelera o seguidor de linha
lucalm 0:8c5a0e6a171b 47 {
lucalm 0:8c5a0e6a171b 48 int bandeira = 0;
lucalm 0:8c5a0e6a171b 49 float novaVelocidade = velocidadeBase;
lucalm 0:8c5a0e6a171b 50 while(bandeira == 0)
lucalm 0:8c5a0e6a171b 51 {
lucalm 0:8c5a0e6a171b 52 novaVelocidade = novaVelocidade + 0.01;
lucalm 0:8c5a0e6a171b 53 wait(0.01);
lucalm 0:8c5a0e6a171b 54 if (novaVelocidade <= velocidadeMax)
lucalm 0:8c5a0e6a171b 55 {
lucalm 0:8c5a0e6a171b 56 bandeira = 1;
lucalm 0:8c5a0e6a171b 57 }
lucalm 0:8c5a0e6a171b 58 }
lucalm 0:8c5a0e6a171b 59 }
lucalm 0:8c5a0e6a171b 60
lucalm 0:8c5a0e6a171b 61 void Desacelerando(float velocidadeMin)//Desacelera o seguidor de linha
lucalm 0:8c5a0e6a171b 62 {
lucalm 0:8c5a0e6a171b 63 int bandeira = 0;
lucalm 0:8c5a0e6a171b 64 float novaVelocidade = velocidadeBase;
lucalm 0:8c5a0e6a171b 65 while(bandeira == 0)
lucalm 0:8c5a0e6a171b 66 {
lucalm 0:8c5a0e6a171b 67 novaVelocidade = novaVelocidade - 0.01;
lucalm 0:8c5a0e6a171b 68 wait(0.01);
lucalm 0:8c5a0e6a171b 69 if (novaVelocidade <= velocidadeMin)
lucalm 0:8c5a0e6a171b 70 {
lucalm 0:8c5a0e6a171b 71 bandeira = 1;
lucalm 0:8c5a0e6a171b 72 }
lucalm 0:8c5a0e6a171b 73 }
lucalm 0:8c5a0e6a171b 74 }
lucalm 0:8c5a0e6a171b 75
lucalm 0:8c5a0e6a171b 76 void VelocidadeBateria() // Funcao de setup da velocidade base dos motores
lucalm 0:8c5a0e6a171b 77 {
lucalm 0:8c5a0e6a171b 78 float leituraBateria = batMeasure.read(); //Lendo a carga da bateria em um numero de 0 a 1
lucalm 0:8c5a0e6a171b 79 float tensaoBateria = 12.6 * leituraBateria; // Carga atual da bateria em Volts
lucalm 0:8c5a0e6a171b 80 float novaVelocidade = velocidadeBase * 8.4/tensaoBateria;// Calculando a nova velocidade de acordo com a medida de carga atual da bateria
lucalm 0:8c5a0e6a171b 81 return;
lucalm 0:8c5a0e6a171b 82 }
lucalm 0:8c5a0e6a171b 83
lucalm 1:c32f37416338 84 void ParadaFinal()
lucalm 0:8c5a0e6a171b 85 {
lucalm 0:8c5a0e6a171b 86 while(1)
lucalm 0:8c5a0e6a171b 87 {
lucalm 0:8c5a0e6a171b 88 direcaoEsquerda = 0;
lucalm 0:8c5a0e6a171b 89 direcaoDireita = 0;
lucalm 0:8c5a0e6a171b 90 rodaEsquerda.write(0);
lucalm 0:8c5a0e6a171b 91 rodaDireita.write(0);
lucalm 0:8c5a0e6a171b 92 }
lucalm 0:8c5a0e6a171b 93 } //Função de parada do LF depois do percurso
lucalm 0:8c5a0e6a171b 94
lucalm 0:8c5a0e6a171b 95 /*void Para_Demonio (void){ direcaoEsquerda = 0; direcaoDireita = 0; rodaEsquerda.write(0); rodaDireita.write(0); } //Mantém o LF parado
lucalm 0:8c5a0e6a171b 96
lucalm 0:8c5a0e6a171b 97 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)
lucalm 0:8c5a0e6a171b 98 if (Position == 0){
lucalm 0:8c5a0e6a171b 99 if (lastSensor > 0) { Esquerda_Esperada = -50; Direita_Esperada = 80; }
lucalm 0:8c5a0e6a171b 100 else { Esquerda_Esperada = 80; Direita_Esperada = -50; }
lucalm 0:8c5a0e6a171b 101 }
lucalm 0:8c5a0e6a171b 102 else { lastSensor = Error; }
lucalm 0:8c5a0e6a171b 103 }
lucalm 0:8c5a0e6a171b 104 */