Header dos motores do seguidor de linha
motors.cpp@1:c32f37416338, 2020-09-17 (annotated)
- 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?
User | Revision | Line number | New 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 | */ |