Uso de Sensor de Ultrasonidos

Committer:
cr0n0s20
Date:
Thu Feb 24 22:28:23 2011 +0000
Revision:
1:42d7fd2a719e
Parent:
0:3b305cf58a40
v 1.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cr0n0s20 0:3b305cf58a40 1 #include "UltraSonidos.h"
cr0n0s20 0:3b305cf58a40 2 #include "mbed.h"
cr0n0s20 0:3b305cf58a40 3
cr0n0s20 0:3b305cf58a40 4
cr0n0s20 0:3b305cf58a40 5 UltraSonidos::UltraSonidos(PinName pin) : _pinDigital(pin) {
cr0n0s20 0:3b305cf58a40 6
cr0n0s20 0:3b305cf58a40 7 }
cr0n0s20 0:3b305cf58a40 8
cr0n0s20 0:3b305cf58a40 9 long UltraSonidos::read(){
cr0n0s20 0:3b305cf58a40 10
cr0n0s20 0:3b305cf58a40 11 long duration;
cr0n0s20 0:3b305cf58a40 12
cr0n0s20 0:3b305cf58a40 13 _pinDigital.output();
cr0n0s20 0:3b305cf58a40 14 _pinDigital = 0;
cr0n0s20 0:3b305cf58a40 15 wait_ms(2);
cr0n0s20 0:3b305cf58a40 16 _pinDigital = 1;
cr0n0s20 1:42d7fd2a719e 17 wait_ms(5);
cr0n0s20 0:3b305cf58a40 18 _pinDigital = 0;
cr0n0s20 1:42d7fd2a719e 19
cr0n0s20 0:3b305cf58a40 20
cr0n0s20 0:3b305cf58a40 21 _pinDigital.input();
cr0n0s20 0:3b305cf58a40 22 duration = pulseIn(_pinDigital);
cr0n0s20 0:3b305cf58a40 23
cr0n0s20 0:3b305cf58a40 24 // convert the time into a distance
cr0n0s20 0:3b305cf58a40 25
cr0n0s20 0:3b305cf58a40 26 return microsegundosAcentimetros(duration);
cr0n0s20 0:3b305cf58a40 27
cr0n0s20 0:3b305cf58a40 28
cr0n0s20 0:3b305cf58a40 29
cr0n0s20 0:3b305cf58a40 30
cr0n0s20 0:3b305cf58a40 31 }
cr0n0s20 0:3b305cf58a40 32
cr0n0s20 0:3b305cf58a40 33 int UltraSonidos::pulseIn(DigitalInOut& pingPin) {
cr0n0s20 0:3b305cf58a40 34 Timer tmr;
cr0n0s20 0:3b305cf58a40 35 while (!pingPin); // wait for high
cr0n0s20 0:3b305cf58a40 36 tmr.start();
cr0n0s20 0:3b305cf58a40 37 while (pingPin); // wait for low
cr0n0s20 0:3b305cf58a40 38 return tmr.read_ms();
cr0n0s20 0:3b305cf58a40 39 }
cr0n0s20 0:3b305cf58a40 40
cr0n0s20 0:3b305cf58a40 41
cr0n0s20 0:3b305cf58a40 42 long UltraSonidos::microsegundosAcentimetros(long microsegundos)
cr0n0s20 0:3b305cf58a40 43 {
cr0n0s20 0:3b305cf58a40 44 // The speed of sound is 340 m/s or 29 microseconds per centimeter.
cr0n0s20 0:3b305cf58a40 45 // The ping travels out and back, so to find the distance of the
cr0n0s20 0:3b305cf58a40 46 // object we take half of the distance travelled.
cr0n0s20 0:3b305cf58a40 47 return microsegundos / 29 / 2;
cr0n0s20 0:3b305cf58a40 48 }