Tom Kelliher
/
RangeFinder
Solution to CS 220 Lab 4. Includes a "device driver" for the HCSR04.
main.cpp@0:cb8c03115a57, 2017-06-26 (annotated)
- Committer:
- tpkelliher
- Date:
- Mon Jun 26 15:32:21 2017 +0000
- Revision:
- 0:cb8c03115a57
CS 220 Lab 4 solution. Includes a HCSR04 "device driver."
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tpkelliher | 0:cb8c03115a57 | 1 | #include "mbed.h" |
tpkelliher | 0:cb8c03115a57 | 2 | #include "TextLCD.h" |
tpkelliher | 0:cb8c03115a57 | 3 | |
tpkelliher | 0:cb8c03115a57 | 4 | float measure(); |
tpkelliher | 0:cb8c03115a57 | 5 | |
tpkelliher | 0:cb8c03115a57 | 6 | int main() |
tpkelliher | 0:cb8c03115a57 | 7 | { |
tpkelliher | 0:cb8c03115a57 | 8 | |
tpkelliher | 0:cb8c03115a57 | 9 | TextLCD lcd(PTE30, PTE29, PTE23, PTE22, PTE21, PTE20); // rs, e, d4-d7 |
tpkelliher | 0:cb8c03115a57 | 10 | float distance; |
tpkelliher | 0:cb8c03115a57 | 11 | |
tpkelliher | 0:cb8c03115a57 | 12 | while(1) { |
tpkelliher | 0:cb8c03115a57 | 13 | distance = measure(); |
tpkelliher | 0:cb8c03115a57 | 14 | lcd.cls(); |
tpkelliher | 0:cb8c03115a57 | 15 | lcd.printf("Distance = %.2f in.", distance); |
tpkelliher | 0:cb8c03115a57 | 16 | wait(0.5); |
tpkelliher | 0:cb8c03115a57 | 17 | } |
tpkelliher | 0:cb8c03115a57 | 18 | } |
tpkelliher | 0:cb8c03115a57 | 19 | |
tpkelliher | 0:cb8c03115a57 | 20 | // HCSR04 "driver" |
tpkelliher | 0:cb8c03115a57 | 21 | float measure() |
tpkelliher | 0:cb8c03115a57 | 22 | { |
tpkelliher | 0:cb8c03115a57 | 23 | Timer timer; |
tpkelliher | 0:cb8c03115a57 | 24 | long time; |
tpkelliher | 0:cb8c03115a57 | 25 | DigitalOut trigger(PTB9); |
tpkelliher | 0:cb8c03115a57 | 26 | DigitalIn echo(PTB8); |
tpkelliher | 0:cb8c03115a57 | 27 | |
tpkelliher | 0:cb8c03115a57 | 28 | timer.reset(); |
tpkelliher | 0:cb8c03115a57 | 29 | |
tpkelliher | 0:cb8c03115a57 | 30 | // Ensure HCSR04 is idle. |
tpkelliher | 0:cb8c03115a57 | 31 | trigger = 0; |
tpkelliher | 0:cb8c03115a57 | 32 | wait (0.060); |
tpkelliher | 0:cb8c03115a57 | 33 | |
tpkelliher | 0:cb8c03115a57 | 34 | // Trigger the HCSR04. |
tpkelliher | 0:cb8c03115a57 | 35 | trigger = 1; |
tpkelliher | 0:cb8c03115a57 | 36 | wait_us(10); |
tpkelliher | 0:cb8c03115a57 | 37 | trigger = 0; |
tpkelliher | 0:cb8c03115a57 | 38 | |
tpkelliher | 0:cb8c03115a57 | 39 | // Wait for the HCSR04's measurement cycle to begin. |
tpkelliher | 0:cb8c03115a57 | 40 | while (echo == 0) |
tpkelliher | 0:cb8c03115a57 | 41 | ; |
tpkelliher | 0:cb8c03115a57 | 42 | |
tpkelliher | 0:cb8c03115a57 | 43 | // Start measuring. |
tpkelliher | 0:cb8c03115a57 | 44 | timer.start(); |
tpkelliher | 0:cb8c03115a57 | 45 | while (echo == 1) |
tpkelliher | 0:cb8c03115a57 | 46 | ; |
tpkelliher | 0:cb8c03115a57 | 47 | timer.stop(); |
tpkelliher | 0:cb8c03115a57 | 48 | |
tpkelliher | 0:cb8c03115a57 | 49 | time = timer.read_us(); |
tpkelliher | 0:cb8c03115a57 | 50 | |
tpkelliher | 0:cb8c03115a57 | 51 | if (time > 30000) // Delay at maximum range plus some slop. |
tpkelliher | 0:cb8c03115a57 | 52 | return -1.0; // Didn't receive an echo. |
tpkelliher | 0:cb8c03115a57 | 53 | else |
tpkelliher | 0:cb8c03115a57 | 54 | return 0.006756 * time; |
tpkelliher | 0:cb8c03115a57 | 55 | } |