Using an SR04

Dependencies:   mbed

Committer:
faif
Date:
Sun Dec 18 00:31:29 2016 +0000
Revision:
0:6f74064686e4
First version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
faif 0:6f74064686e4 1 #include "mbed.h"
faif 0:6f74064686e4 2 #include "ultrasonic-finder.h"
faif 0:6f74064686e4 3
faif 0:6f74064686e4 4 static const char CLS[] = "\x1B[2J"; // VT100 erase screen
faif 0:6f74064686e4 5 static const char HOME[] = "\x1B[H"; // VT100 home
faif 0:6f74064686e4 6 static const int delay = 2;
faif 0:6f74064686e4 7
faif 0:6f74064686e4 8 static const float pulse_line = 4E-5; // 40 ns
faif 0:6f74064686e4 9 static const int pulse_to_distance = 58; // 617 / 10.6
faif 0:6f74064686e4 10
faif 0:6f74064686e4 11 enum
faif 0:6f74064686e4 12 {
faif 0:6f74064686e4 13 DOWN = 0,
faif 0:6f74064686e4 14 UP = 1
faif 0:6f74064686e4 15 };
faif 0:6f74064686e4 16
faif 0:6f74064686e4 17 int main()
faif 0:6f74064686e4 18 {
faif 0:6f74064686e4 19 clear_screen();
faif 0:6f74064686e4 20
faif 0:6f74064686e4 21 Timer timer;
faif 0:6f74064686e4 22 timer.start();
faif 0:6f74064686e4 23
faif 0:6f74064686e4 24 while (true)
faif 0:6f74064686e4 25 {
faif 0:6f74064686e4 26 send_pulse(trigger);
faif 0:6f74064686e4 27 while (!echo) {}; // wait for echo
faif 0:6f74064686e4 28 float pulse = measure_pulse(timer, echo);
faif 0:6f74064686e4 29 show_result(pulse);
faif 0:6f74064686e4 30 wait(delay);
faif 0:6f74064686e4 31 }
faif 0:6f74064686e4 32 }
faif 0:6f74064686e4 33
faif 0:6f74064686e4 34 void clear_screen()
faif 0:6f74064686e4 35 {
faif 0:6f74064686e4 36 pc.printf(CLS);
faif 0:6f74064686e4 37 pc.printf(HOME);
faif 0:6f74064686e4 38 }
faif 0:6f74064686e4 39
faif 0:6f74064686e4 40 void send_pulse(DigitalOut& triggerOut)
faif 0:6f74064686e4 41 {
faif 0:6f74064686e4 42 triggerOut = UP;
faif 0:6f74064686e4 43 wait(pulse_line);
faif 0:6f74064686e4 44 triggerOut = DOWN;
faif 0:6f74064686e4 45 }
faif 0:6f74064686e4 46
faif 0:6f74064686e4 47 float measure_pulse(Timer& timer, const DigitalIn& echoIn)
faif 0:6f74064686e4 48 {
faif 0:6f74064686e4 49 timer.reset();
faif 0:6f74064686e4 50 while (echo) {};
faif 0:6f74064686e4 51 return timer.read_us();
faif 0:6f74064686e4 52 }
faif 0:6f74064686e4 53
faif 0:6f74064686e4 54 void show_result(float pulse)
faif 0:6f74064686e4 55 {
faif 0:6f74064686e4 56 pc.printf(HOME);
faif 0:6f74064686e4 57 pc.printf("Pulse length %6.0f uS\n\r", pulse);
faif 0:6f74064686e4 58 pulse /= pulse_to_distance;
faif 0:6f74064686e4 59 pc.printf("\n\rDistance %4.0f cm\n\r", pulse);
faif 0:6f74064686e4 60 }