Demo program for the Parallax Laser Range Finder

Dependencies:   mbed

Committer:
4180_1
Date:
Sun Nov 06 02:08:57 2011 +0000
Revision:
0:ccc26a94788d

        

Who changed what in which revision?

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