codigo do encoder do papacuras

Dependencies:   mbed

Committer:
rperoba
Date:
Sun Jul 12 17:14:56 2020 +0000
Revision:
1:623d2342ba23
Parent:
0:d0bc73e9c82f
Adicionado comunicacao serial

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rperoba 0:d0bc73e9c82f 1 #include "mbed.h"
rperoba 0:d0bc73e9c82f 2
rperoba 0:d0bc73e9c82f 3 #define debug true;
rperoba 0:d0bc73e9c82f 4 float perimetroDaRodaPorTick = (22*3.14*2)/(12*10); // perimetro da roda / (precisao do encoder * reducao)
rperoba 0:d0bc73e9c82f 5 //poderia ser define mas da alguem erro, acredito q seja por causa do OS 6
rperoba 0:d0bc73e9c82f 6
rperoba 0:d0bc73e9c82f 7 // acertar os pinos do encoder
rperoba 0:d0bc73e9c82f 8 InterruptIn encoderDireitoInterrupt (p29);
rperoba 0:d0bc73e9c82f 9 InterruptIn encoderEsquerdoInterrupt (p30);
rperoba 0:d0bc73e9c82f 10
rperoba 0:d0bc73e9c82f 11 DigitalIn encoderDireitoDigital (p28);
rperoba 0:d0bc73e9c82f 12 DigitalIn encoderEsquerdoDigital(p27);
rperoba 0:d0bc73e9c82f 13
rperoba 0:d0bc73e9c82f 14 Timer TempoParaVelocidadeDireita ;
rperoba 0:d0bc73e9c82f 15 Timer TempoParaVelocidadeEsquerda;
rperoba 0:d0bc73e9c82f 16
rperoba 0:d0bc73e9c82f 17 int contadorDeGirosDireito = 0;
rperoba 0:d0bc73e9c82f 18 int contadorDeGirosEsquerdo = 0;
rperoba 0:d0bc73e9c82f 19 int contadorDoMapa = 0;
rperoba 0:d0bc73e9c82f 20
rperoba 0:d0bc73e9c82f 21 float velocidadeRodaDireita;
rperoba 0:d0bc73e9c82f 22 float velocidadeRodaEsquerda;
rperoba 0:d0bc73e9c82f 23 float mapaDaPista[100][2]; // 100 deve mudar
rperoba 0:d0bc73e9c82f 24
rperoba 1:623d2342ba23 25 #ifdef debug
rperoba 1:623d2342ba23 26 Serial pc(USBTX, USBRX); // Serial para conexao pelo pc
rperoba 1:623d2342ba23 27 #endif
rperoba 0:d0bc73e9c82f 28 void ContaGirosDireito ()
rperoba 0:d0bc73e9c82f 29 {
rperoba 0:d0bc73e9c82f 30 if(encoderDireitoDigital == 1)
rperoba 0:d0bc73e9c82f 31 {
rperoba 0:d0bc73e9c82f 32 contadorDeGirosDireito +=1 ; // Conta o giro
rperoba 0:d0bc73e9c82f 33 velocidadeRodaDireita = perimetroDaRodaPorTick/TempoParaVelocidadeDireita.read();//calcula a velocidade
rperoba 0:d0bc73e9c82f 34 TempoParaVelocidadeDireita.reset();
rperoba 0:d0bc73e9c82f 35
rperoba 0:d0bc73e9c82f 36 }
rperoba 0:d0bc73e9c82f 37 else
rperoba 0:d0bc73e9c82f 38 {
rperoba 0:d0bc73e9c82f 39 contadorDeGirosDireito -=1;// Conta o giro
rperoba 0:d0bc73e9c82f 40 velocidadeRodaDireita = -perimetroDaRodaPorTick/TempoParaVelocidadeDireita.read();//calcula a velocidade
rperoba 0:d0bc73e9c82f 41 TempoParaVelocidadeDireita.reset();
rperoba 0:d0bc73e9c82f 42 }
rperoba 0:d0bc73e9c82f 43 return;
rperoba 0:d0bc73e9c82f 44 }
rperoba 0:d0bc73e9c82f 45
rperoba 0:d0bc73e9c82f 46 void ContaGirosEsquerdo ()
rperoba 0:d0bc73e9c82f 47 {
rperoba 0:d0bc73e9c82f 48 if(encoderEsquerdoDigital == 1)
rperoba 0:d0bc73e9c82f 49 {
rperoba 0:d0bc73e9c82f 50 contadorDeGirosEsquerdo += 1 ;// Conta o giro
rperoba 0:d0bc73e9c82f 51 velocidadeRodaEsquerda = perimetroDaRodaPorTick/TempoParaVelocidadeEsquerda.read();//calcula a velocidade
rperoba 0:d0bc73e9c82f 52 TempoParaVelocidadeEsquerda.reset();
rperoba 0:d0bc73e9c82f 53 }
rperoba 0:d0bc73e9c82f 54 else
rperoba 0:d0bc73e9c82f 55 {
rperoba 0:d0bc73e9c82f 56 contadorDeGirosEsquerdo -= 1;// Conta o giro
rperoba 0:d0bc73e9c82f 57 velocidadeRodaEsquerda = -perimetroDaRodaPorTick/TempoParaVelocidadeEsquerda.read();//calcula a velocidade
rperoba 0:d0bc73e9c82f 58 TempoParaVelocidadeEsquerda.reset();
rperoba 0:d0bc73e9c82f 59 }
rperoba 0:d0bc73e9c82f 60 return;
rperoba 0:d0bc73e9c82f 61 }
rperoba 0:d0bc73e9c82f 62
rperoba 0:d0bc73e9c82f 63 void MapeamentoDaPista() //coloca no mapa da pista o quanto cada roda percorreu
rperoba 0:d0bc73e9c82f 64 {
rperoba 0:d0bc73e9c82f 65 if (contadorDeGirosDireito > 1000 || contadorDeGirosEsquerdo > 1000)
rperoba 0:d0bc73e9c82f 66 {
rperoba 0:d0bc73e9c82f 67 // Faz a contagem de giros do motor e guarda a distancia percorrida
rperoba 0:d0bc73e9c82f 68 mapaDaPista[contadorDoMapa][0] = (contadorDeGirosEsquerdo * perimetroDaRodaPorTick)+mapaDaPista[contadorDoMapa-1][0];
rperoba 0:d0bc73e9c82f 69 mapaDaPista[contadorDoMapa][1] = (contadorDeGirosDireito * perimetroDaRodaPorTick)+mapaDaPista[contadorDoMapa-1][1];
rperoba 0:d0bc73e9c82f 70 contadorDeGirosDireito = 0;
rperoba 0:d0bc73e9c82f 71 contadorDeGirosEsquerdo = 0;
rperoba 0:d0bc73e9c82f 72 contadorDoMapa += 1;
rperoba 0:d0bc73e9c82f 73 }
rperoba 0:d0bc73e9c82f 74 return;
rperoba 0:d0bc73e9c82f 75 }
rperoba 0:d0bc73e9c82f 76
rperoba 0:d0bc73e9c82f 77
rperoba 0:d0bc73e9c82f 78 // main() runs in its own thread in the OS
rperoba 0:d0bc73e9c82f 79 int main()
rperoba 0:d0bc73e9c82f 80 {
rperoba 0:d0bc73e9c82f 81 encoderDireitoInterrupt.rise(&ContaGirosDireito);
rperoba 0:d0bc73e9c82f 82 encoderEsquerdoInterrupt.rise(&ContaGirosEsquerdo);
rperoba 0:d0bc73e9c82f 83 TempoParaVelocidadeDireita.start();
rperoba 0:d0bc73e9c82f 84 TempoParaVelocidadeEsquerda.start();
rperoba 0:d0bc73e9c82f 85 while (true) {
rperoba 0:d0bc73e9c82f 86 MapeamentoDaPista();
rperoba 0:d0bc73e9c82f 87 #ifdef debug
rperoba 1:623d2342ba23 88 pc.printf ("Giros da roda direita: %i", (contadorDeGirosDireito));
rperoba 1:623d2342ba23 89 pc.printf ("Giros da roda esquerda: %i",(contadorDeGirosEsquerdo));
rperoba 1:623d2342ba23 90 pc.printf("Velocidade: %f",velocidadeRodaDireita);
rperoba 0:d0bc73e9c82f 91 #endif
rperoba 0:d0bc73e9c82f 92
rperoba 0:d0bc73e9c82f 93 }
rperoba 0:d0bc73e9c82f 94 }
rperoba 0:d0bc73e9c82f 95