![](/media/cache/profiles/a36470cf1f8e5aaf38466d65bd080699.jpg.50x50_q85.jpg)
Reading sensors
Fork of 3pi_Lab1_Task2 by
main.cpp@2:970ef3f79ac5, 2017-06-26 (annotated)
- Committer:
- eencae
- Date:
- Mon Jun 26 11:51:05 2017 +0000
- Revision:
- 2:970ef3f79ac5
- Parent:
- 1:3143ad629ed8
- Child:
- 3:57544dc71dfc
Initial commit.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
eencae | 2:970ef3f79ac5 | 1 | /* 3pi Lab 1 Example 2 |
eencae | 0:127d52afa7a9 | 2 | |
eencae | 0:127d52afa7a9 | 3 | (c) Dr Craig A. Evans, University of Leeds |
eencae | 0:127d52afa7a9 | 4 | |
eencae | 0:127d52afa7a9 | 5 | June 2017 |
eencae | 0:127d52afa7a9 | 6 | |
eencae | 0:127d52afa7a9 | 7 | */ |
eencae | 0:127d52afa7a9 | 8 | |
eencae | 0:127d52afa7a9 | 9 | #include "mbed.h" |
eencae | 0:127d52afa7a9 | 10 | #include "m3pi.h" |
eencae | 0:127d52afa7a9 | 11 | |
eencae | 0:127d52afa7a9 | 12 | // API objects |
eencae | 1:3143ad629ed8 | 13 | m3pi robot; |
eencae | 0:127d52afa7a9 | 14 | |
eencae | 0:127d52afa7a9 | 15 | // Function Prototypes |
eencae | 0:127d52afa7a9 | 16 | void init(); |
eencae | 0:127d52afa7a9 | 17 | |
eencae | 0:127d52afa7a9 | 18 | // Main Function |
eencae | 0:127d52afa7a9 | 19 | int main() |
eencae | 0:127d52afa7a9 | 20 | { |
eencae | 0:127d52afa7a9 | 21 | init(); |
eencae | 2:970ef3f79ac5 | 22 | |
eencae | 0:127d52afa7a9 | 23 | // move cursor to position (0,0) - top-left |
eencae | 1:3143ad629ed8 | 24 | robot.lcd_goto_xy(0,0); |
eencae | 2:970ef3f79ac5 | 25 | robot.lcd_print("Lab 1",5); // 5 is number of characters in message (max 8) |
eencae | 2:970ef3f79ac5 | 26 | robot.lcd_goto_xy(0,1); |
eencae | 2:970ef3f79ac5 | 27 | robot.lcd_print("Task 3",6); |
eencae | 2:970ef3f79ac5 | 28 | |
eencae | 2:970ef3f79ac5 | 29 | wait(2.0); |
eencae | 2:970ef3f79ac5 | 30 | |
eencae | 2:970ef3f79ac5 | 31 | // reset previous calibration values and run auto-calibrate routine |
eencae | 2:970ef3f79ac5 | 32 | robot.reset_calibration(); |
eencae | 2:970ef3f79ac5 | 33 | // robot must be placed over a black line |
eencae | 2:970ef3f79ac5 | 34 | robot.auto_calibrate(); |
eencae | 2:970ef3f79ac5 | 35 | |
eencae | 2:970ef3f79ac5 | 36 | // an array to store each of the sensor values |
eencae | 2:970ef3f79ac5 | 37 | unsigned int values[5]= {0}; |
eencae | 0:127d52afa7a9 | 38 | |
eencae | 2:970ef3f79ac5 | 39 | |
eencae | 2:970ef3f79ac5 | 40 | |
eencae | 2:970ef3f79ac5 | 41 | float dt = 1.0/50.0; // we'll read the sensor 50 times a second |
eencae | 0:127d52afa7a9 | 42 | |
eencae | 0:127d52afa7a9 | 43 | // main loop - this runs forever |
eencae | 0:127d52afa7a9 | 44 | while(1) { |
eencae | 2:970ef3f79ac5 | 45 | |
eencae | 2:970ef3f79ac5 | 46 | // clear the LCD so we can draw new information on every loop |
eencae | 2:970ef3f79ac5 | 47 | robot.lcd_clear(); |
eencae | 0:127d52afa7a9 | 48 | |
eencae | 2:970ef3f79ac5 | 49 | // read the sensor values and store in array |
eencae | 2:970ef3f79ac5 | 50 | // these values are 0 to 1000 (0 is white/1000 is black) |
eencae | 2:970ef3f79ac5 | 51 | robot.get_calibrated_values(values); |
eencae | 0:127d52afa7a9 | 52 | |
eencae | 2:970ef3f79ac5 | 53 | // display a bar graph on the LCD |
eencae | 2:970ef3f79ac5 | 54 | robot.display_sensor_values(values,1); |
eencae | 2:970ef3f79ac5 | 55 | |
eencae | 2:970ef3f79ac5 | 56 | // in range -1 to 1, no error when line is at 0.0 |
eencae | 2:970ef3f79ac5 | 57 | // number is negative when the line is to the left |
eencae | 2:970ef3f79ac5 | 58 | // number is positive when the line is to the right |
eencae | 2:970ef3f79ac5 | 59 | float line_position = robot.calc_line_position(values); |
eencae | 2:970ef3f79ac5 | 60 | |
eencae | 2:970ef3f79ac5 | 61 | // empty buffer to store values |
eencae | 2:970ef3f79ac5 | 62 | char buffer[6]; |
eencae | 2:970ef3f79ac5 | 63 | sprintf(buffer,"%+.3f",line_position); // create message and store in array .3 means three decimal places |
eencae | 2:970ef3f79ac5 | 64 | // print line position on LCD |
eencae | 2:970ef3f79ac5 | 65 | robot.lcd_goto_xy(1,0); |
eencae | 2:970ef3f79ac5 | 66 | robot.lcd_print(buffer,6); |
eencae | 2:970ef3f79ac5 | 67 | |
eencae | 0:127d52afa7a9 | 68 | // wait for a short time before repeating the loop |
eencae | 0:127d52afa7a9 | 69 | wait(dt); |
eencae | 0:127d52afa7a9 | 70 | |
eencae | 0:127d52afa7a9 | 71 | } |
eencae | 0:127d52afa7a9 | 72 | } |
eencae | 0:127d52afa7a9 | 73 | |
eencae | 0:127d52afa7a9 | 74 | // Functions |
eencae | 0:127d52afa7a9 | 75 | void init() |
eencae | 0:127d52afa7a9 | 76 | { |
eencae | 1:3143ad629ed8 | 77 | robot.init(); |
eencae | 0:127d52afa7a9 | 78 | } |