jim hamblen
/
Laser_Rangefinder
Demo program for the Parallax Laser Range Finder
main.cpp@0:ccc26a94788d, 2011-11-06 (annotated)
- Committer:
- 4180_1
- Date:
- Sun Nov 06 02:08:57 2011 +0000
- Revision:
- 0:ccc26a94788d
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
4180_1 | 0:ccc26a94788d | 1 | #include "mbed.h" |
4180_1 | 0:ccc26a94788d | 2 | //Demo program for the Parallax Laser Range Finder |
4180_1 | 0:ccc26a94788d | 3 | // |
4180_1 | 0:ccc26a94788d | 4 | DigitalOut myled(LED1); |
4180_1 | 0:ccc26a94788d | 5 | Serial pc(USBTX, USBRX); |
4180_1 | 0:ccc26a94788d | 6 | Serial lrf(p9,p10); |
4180_1 | 0:ccc26a94788d | 7 | |
4180_1 | 0:ccc26a94788d | 8 | int main() { |
4180_1 | 0:ccc26a94788d | 9 | int mm_range=0; |
4180_1 | 0:ccc26a94788d | 10 | char lrfchar=0; |
4180_1 | 0:ccc26a94788d | 11 | |
4180_1 | 0:ccc26a94788d | 12 | //Print prompt |
4180_1 | 0:ccc26a94788d | 13 | pc.printf("\f\nLaser Range Finder demo program\n\r"); |
4180_1 | 0:ccc26a94788d | 14 | //Delay for lrf power on startup |
4180_1 | 0:ccc26a94788d | 15 | wait(2.5); |
4180_1 | 0:ccc26a94788d | 16 | lrf.baud(115200); |
4180_1 | 0:ccc26a94788d | 17 | |
4180_1 | 0:ccc26a94788d | 18 | // lrf autobaud setup |
4180_1 | 0:ccc26a94788d | 19 | do { |
4180_1 | 0:ccc26a94788d | 20 | lrf.putc('U'); |
4180_1 | 0:ccc26a94788d | 21 | pc.putc('.'); |
4180_1 | 0:ccc26a94788d | 22 | wait(.2); |
4180_1 | 0:ccc26a94788d | 23 | if (lrf.readable()) lrfchar = lrf.getc(); |
4180_1 | 0:ccc26a94788d | 24 | } while (lrfchar != ':'); |
4180_1 | 0:ccc26a94788d | 25 | pc.printf("\n\r"); |
4180_1 | 0:ccc26a94788d | 26 | // clear out any extra characters - just in case |
4180_1 | 0:ccc26a94788d | 27 | while (lrf.readable()) { |
4180_1 | 0:ccc26a94788d | 28 | lrfchar = lrf.getc(); |
4180_1 | 0:ccc26a94788d | 29 | } |
4180_1 | 0:ccc26a94788d | 30 | |
4180_1 | 0:ccc26a94788d | 31 | |
4180_1 | 0:ccc26a94788d | 32 | // Loop taking range readings forever |
4180_1 | 0:ccc26a94788d | 33 | while (1) { |
4180_1 | 0:ccc26a94788d | 34 | myled=1; |
4180_1 | 0:ccc26a94788d | 35 | lrf.putc('B'); //Take Binary range reading |
4180_1 | 0:ccc26a94788d | 36 | // read in the four bytes for the range in mm (MSB first) |
4180_1 | 0:ccc26a94788d | 37 | mm_range=0; |
4180_1 | 0:ccc26a94788d | 38 | mm_range=lrf.getc(); |
4180_1 | 0:ccc26a94788d | 39 | mm_range=(mm_range<<8)|lrf.getc(); |
4180_1 | 0:ccc26a94788d | 40 | mm_range=(mm_range<<8)|lrf.getc(); |
4180_1 | 0:ccc26a94788d | 41 | mm_range=(mm_range<<8)|lrf.getc(); |
4180_1 | 0:ccc26a94788d | 42 | myled=0; |
4180_1 | 0:ccc26a94788d | 43 | //eat CR & ":" command prompt |
4180_1 | 0:ccc26a94788d | 44 | do { |
4180_1 | 0:ccc26a94788d | 45 | lrfchar=lrf.getc(); |
4180_1 | 0:ccc26a94788d | 46 | } while (lrfchar != ':'); |
4180_1 | 0:ccc26a94788d | 47 | //Display readings on PC Virtual Com port via USB cable |
4180_1 | 0:ccc26a94788d | 48 | pc.printf("Range is %d mm\n\r",mm_range); |
4180_1 | 0:ccc26a94788d | 49 | } |
4180_1 | 0:ccc26a94788d | 50 | } |