![](/media/cache/group/Logo_RioBotz.png.50x50_q85.jpg)
codigo do encoder do papacuras
Dependencies: mbed
main.cpp
- Committer:
- rperoba
- Date:
- 2020-07-12
- Revision:
- 0:d0bc73e9c82f
- Child:
- 1:623d2342ba23
File content as of revision 0:d0bc73e9c82f:
#include "mbed.h" #define debug true; float perimetroDaRodaPorTick = (22*3.14*2)/(12*10); // perimetro da roda / (precisao do encoder * reducao) //poderia ser define mas da alguem erro, acredito q seja por causa do OS 6 // acertar os pinos do encoder InterruptIn encoderDireitoInterrupt (p29); InterruptIn encoderEsquerdoInterrupt (p30); DigitalIn encoderDireitoDigital (p28); DigitalIn encoderEsquerdoDigital(p27); Timer TempoParaVelocidadeDireita ; Timer TempoParaVelocidadeEsquerda; int contadorDeGirosDireito = 0; int contadorDeGirosEsquerdo = 0; int contadorDoMapa = 0; float velocidadeRodaDireita; float velocidadeRodaEsquerda; float mapaDaPista[100][2]; // 100 deve mudar void ContaGirosDireito () { if(encoderDireitoDigital == 1) { contadorDeGirosDireito +=1 ; // Conta o giro velocidadeRodaDireita = perimetroDaRodaPorTick/TempoParaVelocidadeDireita.read();//calcula a velocidade TempoParaVelocidadeDireita.reset(); } else { contadorDeGirosDireito -=1;// Conta o giro velocidadeRodaDireita = -perimetroDaRodaPorTick/TempoParaVelocidadeDireita.read();//calcula a velocidade TempoParaVelocidadeDireita.reset(); } return; } void ContaGirosEsquerdo () { if(encoderEsquerdoDigital == 1) { contadorDeGirosEsquerdo += 1 ;// Conta o giro velocidadeRodaEsquerda = perimetroDaRodaPorTick/TempoParaVelocidadeEsquerda.read();//calcula a velocidade TempoParaVelocidadeEsquerda.reset(); } else { contadorDeGirosEsquerdo -= 1;// Conta o giro velocidadeRodaEsquerda = -perimetroDaRodaPorTick/TempoParaVelocidadeEsquerda.read();//calcula a velocidade TempoParaVelocidadeEsquerda.reset(); } return; } void MapeamentoDaPista() //coloca no mapa da pista o quanto cada roda percorreu { if (contadorDeGirosDireito > 1000 || contadorDeGirosEsquerdo > 1000) { // Faz a contagem de giros do motor e guarda a distancia percorrida mapaDaPista[contadorDoMapa][0] = (contadorDeGirosEsquerdo * perimetroDaRodaPorTick)+mapaDaPista[contadorDoMapa-1][0]; mapaDaPista[contadorDoMapa][1] = (contadorDeGirosDireito * perimetroDaRodaPorTick)+mapaDaPista[contadorDoMapa-1][1]; contadorDeGirosDireito = 0; contadorDeGirosEsquerdo = 0; contadorDoMapa += 1; } return; } // main() runs in its own thread in the OS int main() { encoderDireitoInterrupt.rise(&ContaGirosDireito); encoderEsquerdoInterrupt.rise(&ContaGirosEsquerdo); TempoParaVelocidadeDireita.start(); TempoParaVelocidadeEsquerda.start(); while (true) { MapeamentoDaPista(); #ifdef debug printf ("Giros da roda direita: %i", (contadorDeGirosDireito)); printf ("Giros da roda esquerda: %i",(contadorDeGirosEsquerdo)); printf("Velocidade: %f",velocidadeRodaDireita); #endif } }