Reading sensors

Dependencies:   mbed m3pi

Fork of 3pi_Lab1_Task2 by Craig Evans

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?

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