Robô móvel com FREDOM KL25Z
Dependencies: Servo mbed HC-SR04
main.cpp
- Committer:
- Nestordp
- Date:
- 2015-01-29
- Revision:
- 1:027b210e631d
- Parent:
- 0:182a12372dd4
- Child:
- 2:2e759e231fb6
File content as of revision 1:027b210e631d:
#include "mbed.h" #include "Servo.h" #define velocidade(a, b) MDPWM = a; MEPWM = b #define frente() MDdirect = 1; MEdirect = 1 #define re() MDdirect = 0; MEdirect = 0 #define esquerda() MDdirect = 1; MEdirect = 0 #define direita() MDdirect = 0; MEdirect = 1 //Sonar Frente //DigitalOut trig(PTB2,0); //Configuração do pino de Trigger //InterruptIn echo(D12); //Configuração da interrupção por pino de Echo DigitalOut bip(D2); // Servo myservo(D3); // DigitalOut MEdirect(D4); //Motor 2 Direction control PwmOut MEPWM(D5); //Motor 2 PWM control PwmOut MDPWM(D6); //Motor 1 PWM control DigitalOut MDdirect(D7); //Motor 1 Direction control DigitalOut trigF(A2,0); //Configuração do pino de Trigger DigitalIn echoF(D12); //Configuração da interrupção por pino de Echo //Sonar Direito DigitalOut trigD(A1, 0); //Configuração do pino de Trigger DigitalIn echoD(D10); //Configuração da interrupção por pino de Echo //Sonar Esqerdo DigitalOut trigE(A0,0); //Configuração do pino de Trigger InterruptIn echoE(D11); //Configuração da interrupção por pino de Echo DigitalOut Led(LED1); Serial pc(USBTX,USBRX); //Configuração da comunicação serial para enviar o valor do sensor Timer tempo; //Para usar rotinas de tempo void iniP(void); void finP(void); void lerSonarF(void); void lerSonarD(void); void lerSonarE(void); void sonarFrente(void); float tdist=0, distcm=0, distin=0, dist0=0; float dist_esq = 0, dist_dir = 0, dist_fre = 0, razDE = 0; char flagTempo = 0; int main() { printf("INICIA\n"); myservo.calibrate(0.0013, 45.0); wait_ms(3000); //myservo.position(-33.0); todo pra direita //myservo.position(30.8); todo pra esquerda myservo.position(-3.0); Led = 1; printf("COMECA O PROGRAMA\n"); velocidade(0.48, 0.48); frente(); while(1){ lerSonarF(); dist_fre = distcm; printf("Distancia detectada pelo sensor Frente %.2f cm \n",dist_fre); //wait_ms(1000); lerSonarE(); dist_esq = distcm; printf("Distancia detectada pelo sensor esquerdo %.2f cm \n",dist_esq); //wait_ms(1000); lerSonarD(); dist_dir = distcm; printf("Distancia detectada pelo sensor direito %.2f cm \n",dist_dir); //wait_ms(1000); razDE = dist_dir / dist_esq; if((dist_fre <= 30) && (dist_fre > 3)){ sonarFrente(); } if(razDE > 1){ velocidade(0.22, 0.48); } else if(razDE < 1){ velocidade(0.48, 0.22); } } } void lerSonarD(void) { trigD=1; //Inicio do trigger wait_us(10); //10us de pulso trigD=0; //Fim do trigger while(!echoD); tempo.start(); while(echoD); tdist = tempo.read_us(); //Leitura do tempo transcorrido distcm = tdist/58; //Cálculo da distância detectada em "cm" //distin = tdist/148; //Cálculo da distância detectada em "in" tempo.stop(); //Paro o temporizador tempo.reset(); //Reset para o próximo ciclo } void lerSonarF(void) { trigF=1; //Inicio do trigger wait_us(10); //10us de pulso trigF=0; //Fim do trigger while(!echoF); tempo.start(); while(echoF); tdist = tempo.read_us(); //Leitura do tempo transcorrido distcm = tdist/58; //Cálculo da distância detectada em "cm" //distin = tdist/148; //Cálculo da distância detectada em "in" tempo.stop(); //Paro o temporizador tempo.reset(); //Reset para o próximo ciclo } void lerSonarE(void) { trigE = 1; //Inicio do trigger wait_us(10); //10us de pulso trigE = 0; //Fim do trigger while(!echoE); tempo.start(); while(echoE); tdist = tempo.read_us(); //Leitura do tempo transcorrido distcm = tdist/58; //Cálculo da distância detectada em "cm" //distin = tdist/148; //Cálculo da distância detectada em "in" tempo.stop(); //Paro o temporizador tempo.reset(); //Reset para o próximo ciclo } void sonarFrente(void){ bip = 1; printf("PARA\n"); re(); wait_ms(100); velocidade(0.0, 0.0); bip = 0; myservo.position(-33.0); wait_ms(1000); lerSonarF(); printf("Distancia direita %.2f cm \n",distcm); dist_dir = distcm; myservo.position(30.8); wait_ms(1000); lerSonarF(); printf("Distancia esquerda %.2f cm \n",distcm); dist_esq = distcm; if(dist_dir > dist_esq){ printf("VIRA ESQUERDA \n"); direita(); velocidade(0.48, 0.48); wait_ms(250); velocidade(0.0, 0.0); myservo.position(-3.0); wait_ms(500); velocidade(0.48, 0.48); frente(); } else if(dist_dir < dist_esq){ printf("VIRA ESQUERDA \n"); esquerda(); velocidade(0.48, 0.48); wait_ms(250); velocidade(0.0, 0.0); myservo.position(-3.0); wait_ms(500); velocidade(0.48, 0.48); frente(); } }