Sakis Kasampalis
/
ultrasonic-finder
Using an SR04
ultrasonic-finder.cpp@0:6f74064686e4, 2016-12-18 (annotated)
- Committer:
- faif
- Date:
- Sun Dec 18 00:31:29 2016 +0000
- Revision:
- 0:6f74064686e4
First version
Who changed what in which revision?
User | Revision | Line number | New 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 | } |