Solution to CS 220 Lab 4. Includes a "device driver" for the HCSR04.

Dependencies:   TextLCD mbed

Committer:
tpkelliher
Date:
Mon Jun 26 16:02:59 2017 +0000
Revision:
1:47d9d1523dfa
Parent:
0:cb8c03115a57
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew 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 }