Uso de Sensor de Ultrasonidos
UltraSonidos.cpp@1:42d7fd2a719e, 2011-02-24 (annotated)
- 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?
User | Revision | Line number | New 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 | } |