Craig Evans
/
3pi_Lab1_Task3
Reading sensors
Fork of 3pi_Lab1_Task2 by
main.cpp@6:91fe8f26afc2, 2019-07-09 (annotated)
- Committer:
- eencae
- Date:
- Tue Jul 09 12:40:51 2019 +0000
- Revision:
- 6:91fe8f26afc2
- Parent:
- 5:c792f0f3b46d
Used calibrated values for bar graph
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 | 4:3edc12f142f3 | 39 | float dt = 1.0/10.0; // we'll read the sensors 10 times a second |
eencae | 0:127d52afa7a9 | 40 | |
eencae | 0:127d52afa7a9 | 41 | // main loop - this runs forever |
eencae | 0:127d52afa7a9 | 42 | while(1) { |
eencae | 2:970ef3f79ac5 | 43 | |
eencae | 2:970ef3f79ac5 | 44 | // clear the LCD so we can draw new information on every loop |
eencae | 2:970ef3f79ac5 | 45 | robot.lcd_clear(); |
eencae | 0:127d52afa7a9 | 46 | |
eencae | 2:970ef3f79ac5 | 47 | // read the sensor values and store in array |
eencae | 2:970ef3f79ac5 | 48 | // these values are 0 to 1000 (0 is white/1000 is black) |
eencae | 2:970ef3f79ac5 | 49 | robot.get_calibrated_values(values); |
eencae | 0:127d52afa7a9 | 50 | |
eencae | 6:91fe8f26afc2 | 51 | // Can see the values using CoolTerm - select correct COM port |
eencae | 6:91fe8f26afc2 | 52 | for (int i=0; i< 5 ; i++) { |
eencae | 6:91fe8f26afc2 | 53 | printf("[%i] = %i | ",i,values[i]); |
eencae | 6:91fe8f26afc2 | 54 | } |
eencae | 6:91fe8f26afc2 | 55 | printf("\n"); |
eencae | 6:91fe8f26afc2 | 56 | |
eencae | 2:970ef3f79ac5 | 57 | // display a bar graph on the LCD |
eencae | 2:970ef3f79ac5 | 58 | robot.display_sensor_values(values,1); |
eencae | 5:c792f0f3b46d | 59 | |
eencae | 2:970ef3f79ac5 | 60 | // in range -1 to 1, no error when line is at 0.0 |
eencae | 2:970ef3f79ac5 | 61 | // number is negative when the line is to the left |
eencae | 2:970ef3f79ac5 | 62 | // number is positive when the line is to the right |
eencae | 2:970ef3f79ac5 | 63 | float line_position = robot.calc_line_position(values); |
eencae | 2:970ef3f79ac5 | 64 | |
eencae | 2:970ef3f79ac5 | 65 | // empty buffer to store values |
eencae | 2:970ef3f79ac5 | 66 | char buffer[6]; |
eencae | 2:970ef3f79ac5 | 67 | sprintf(buffer,"%+.3f",line_position); // create message and store in array .3 means three decimal places |
eencae | 2:970ef3f79ac5 | 68 | // print line position on LCD |
eencae | 2:970ef3f79ac5 | 69 | robot.lcd_goto_xy(1,0); |
eencae | 2:970ef3f79ac5 | 70 | robot.lcd_print(buffer,6); |
eencae | 2:970ef3f79ac5 | 71 | |
eencae | 0:127d52afa7a9 | 72 | // wait for a short time before repeating the loop |
eencae | 0:127d52afa7a9 | 73 | wait(dt); |
eencae | 0:127d52afa7a9 | 74 | |
eencae | 0:127d52afa7a9 | 75 | } |
eencae | 0:127d52afa7a9 | 76 | } |
eencae | 0:127d52afa7a9 | 77 | |
eencae | 0:127d52afa7a9 | 78 | // Functions |
eencae | 0:127d52afa7a9 | 79 | void init() |
eencae | 0:127d52afa7a9 | 80 | { |
eencae | 1:3143ad629ed8 | 81 | robot.init(); |
eencae | 0:127d52afa7a9 | 82 | } |