Reading sensors

Dependencies:   mbed m3pi

Fork of 3pi_Lab1_Task2 by Craig Evans

Committer:
eencae
Date:
Wed Jul 05 13:04:18 2017 +0000
Revision:
5:c792f0f3b46d
Parent:
4:3edc12f142f3
Child:
6:91fe8f26afc2
Fixed bar graph

Who changed what in which revision?

UserRevisionLine numberNew 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 2:970ef3f79ac5 51 // display a bar graph on the LCD
eencae 2:970ef3f79ac5 52 robot.display_sensor_values(values,1);
eencae 5:c792f0f3b46d 53
eencae 2:970ef3f79ac5 54 // in range -1 to 1, no error when line is at 0.0
eencae 2:970ef3f79ac5 55 // number is negative when the line is to the left
eencae 2:970ef3f79ac5 56 // number is positive when the line is to the right
eencae 2:970ef3f79ac5 57 float line_position = robot.calc_line_position(values);
eencae 2:970ef3f79ac5 58
eencae 2:970ef3f79ac5 59 // empty buffer to store values
eencae 2:970ef3f79ac5 60 char buffer[6];
eencae 2:970ef3f79ac5 61 sprintf(buffer,"%+.3f",line_position); // create message and store in array .3 means three decimal places
eencae 2:970ef3f79ac5 62 // print line position on LCD
eencae 2:970ef3f79ac5 63 robot.lcd_goto_xy(1,0);
eencae 2:970ef3f79ac5 64 robot.lcd_print(buffer,6);
eencae 2:970ef3f79ac5 65
eencae 0:127d52afa7a9 66 // wait for a short time before repeating the loop
eencae 0:127d52afa7a9 67 wait(dt);
eencae 0:127d52afa7a9 68
eencae 0:127d52afa7a9 69 }
eencae 0:127d52afa7a9 70 }
eencae 0:127d52afa7a9 71
eencae 0:127d52afa7a9 72 // Functions
eencae 0:127d52afa7a9 73 void init()
eencae 0:127d52afa7a9 74 {
eencae 1:3143ad629ed8 75 robot.init();
eencae 0:127d52afa7a9 76 }