Program using a HC-SR04 Ultrasonic sensor.

Dependencies:   mbed

Committer:
icarobrito
Date:
Wed Nov 12 17:53:57 2014 +0000
Revision:
0:34f7d9ef2f4b
Program using a HC-SR04 Ultrasonic Sensor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
icarobrito 0:34f7d9ef2f4b 1 /* Programa para utilização do sensor Ultrasom
icarobrito 0:34f7d9ef2f4b 2 */
icarobrito 0:34f7d9ef2f4b 3 /*Interrupções de pinos,só são possíveis nas portas A e D*/
icarobrito 0:34f7d9ef2f4b 4
icarobrito 0:34f7d9ef2f4b 5 #include "mbed.h"
icarobrito 0:34f7d9ef2f4b 6
icarobrito 0:34f7d9ef2f4b 7 Serial pc(USBTX,USBRX); //Configuração da comunicação serial para enviar o valor do sensor
icarobrito 0:34f7d9ef2f4b 8 DigitalOut trig(PTE5,0); //Configuração do pino de Trigger
icarobrito 0:34f7d9ef2f4b 9 InterruptIn echo(PTA16); //Configuração da interrupção por pino de Echo
icarobrito 0:34f7d9ef2f4b 10 Timer tempo;
icarobrito 0:34f7d9ef2f4b 11 float tdist=0, distcm=0, distin=0, dist0=0;
icarobrito 0:34f7d9ef2f4b 12
icarobrito 0:34f7d9ef2f4b 13 void iniP(){ //Rotina para receber o pulso inicial do pino Echo
icarobrito 0:34f7d9ef2f4b 14 tempo.start(); //Rotina para iniciar o contador
icarobrito 0:34f7d9ef2f4b 15 return;
icarobrito 0:34f7d9ef2f4b 16 }
icarobrito 0:34f7d9ef2f4b 17
icarobrito 0:34f7d9ef2f4b 18 void finP(){ //Rotina para pegar o tempo final do pulso
icarobrito 0:34f7d9ef2f4b 19
icarobrito 0:34f7d9ef2f4b 20 tdist = tempo.read_us(); //Leitura do tempo transcorrido
icarobrito 0:34f7d9ef2f4b 21 distcm = tdist/58; //Cálculo da distância detectada em "cm"
icarobrito 0:34f7d9ef2f4b 22 distin = tdist/148; //Cálculo da distância detectada em "in"
icarobrito 0:34f7d9ef2f4b 23
icarobrito 0:34f7d9ef2f4b 24 tempo.stop(); //Páro o temporizador
icarobrito 0:34f7d9ef2f4b 25 tempo.reset(); //Reset para o próximo ciclo
icarobrito 0:34f7d9ef2f4b 26 return;
icarobrito 0:34f7d9ef2f4b 27 }
icarobrito 0:34f7d9ef2f4b 28
icarobrito 0:34f7d9ef2f4b 29
icarobrito 0:34f7d9ef2f4b 30
icarobrito 0:34f7d9ef2f4b 31 int main(){
icarobrito 0:34f7d9ef2f4b 32
icarobrito 0:34f7d9ef2f4b 33 while(1){
icarobrito 0:34f7d9ef2f4b 34
icarobrito 0:34f7d9ef2f4b 35 trig=1; //Inicio do trigger
icarobrito 0:34f7d9ef2f4b 36 wait_us(10); // 10us de pulso
icarobrito 0:34f7d9ef2f4b 37 trig=0; //Fim do trigger
icarobrito 0:34f7d9ef2f4b 38
icarobrito 0:34f7d9ef2f4b 39 echo.rise(&iniP); //leitura do inicio do pulso de retorno
icarobrito 0:34f7d9ef2f4b 40 echo.fall(&finP); //Leitura do final do pulso de retorno
icarobrito 0:34f7d9ef2f4b 41
icarobrito 0:34f7d9ef2f4b 42 if(distcm != dist0){ //rotina para evitar que se envie muitos valores
icarobrito 0:34f7d9ef2f4b 43 dist0 = distcm;
icarobrito 0:34f7d9ef2f4b 44 printf("Distancia detectada pelo sensor %.2f cm \n",distcm);
icarobrito 0:34f7d9ef2f4b 45 }
icarobrito 0:34f7d9ef2f4b 46 wait_ms(60); //rotina para evitar que o pulso de "trigger" seja confundido com o "echo"
icarobrito 0:34f7d9ef2f4b 47 }
icarobrito 0:34f7d9ef2f4b 48
icarobrito 0:34f7d9ef2f4b 49
icarobrito 0:34f7d9ef2f4b 50 }