4180 Lab 2
Dependencies: mbed wave_player Servo 4DGL-uLCD-SE Motor SDFileSystem LSM9DS1_Library_cal PinDetect X_NUCLEO_53L0A1
sensor_EC.h@1:6d8f645530b8, 2020-02-03 (annotated)
- Committer:
- emilywilson
- Date:
- Mon Feb 03 13:22:28 2020 +0000
- Revision:
- 1:6d8f645530b8
parts 6-14 and extra credit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
emilywilson | 1:6d8f645530b8 | 1 | #include "mbed.h" |
emilywilson | 1:6d8f645530b8 | 2 | #include "Servo.h" |
emilywilson | 1:6d8f645530b8 | 3 | #include "XNucleo53L0A1.h" |
emilywilson | 1:6d8f645530b8 | 4 | #include <stdio.h> |
emilywilson | 1:6d8f645530b8 | 5 | Serial pc1(USBTX,USBRX); |
emilywilson | 1:6d8f645530b8 | 6 | DigitalOut shdn(p26); |
emilywilson | 1:6d8f645530b8 | 7 | // This VL53L0X board test application performs a range measurement in polling mode |
emilywilson | 1:6d8f645530b8 | 8 | // Use 3.3(Vout) for Vin, p28 for SDA, p27 for SCL, P26 for shdn on mbed LPC1768 |
emilywilson | 1:6d8f645530b8 | 9 | |
emilywilson | 1:6d8f645530b8 | 10 | //I2C sensor pins |
emilywilson | 1:6d8f645530b8 | 11 | #define VL53L0_I2C_SDA p28 |
emilywilson | 1:6d8f645530b8 | 12 | #define VL53L0_I2C_SCL p27 |
emilywilson | 1:6d8f645530b8 | 13 | |
emilywilson | 1:6d8f645530b8 | 14 | static XNucleo53L0A1 *board=NULL; |
emilywilson | 1:6d8f645530b8 | 15 | Servo servo(p9); |
emilywilson | 1:6d8f645530b8 | 16 | |
emilywilson | 1:6d8f645530b8 | 17 | int min_dist = 66536; |
emilywilson | 1:6d8f645530b8 | 18 | int angle = 0; |
emilywilson | 1:6d8f645530b8 | 19 | |
emilywilson | 1:6d8f645530b8 | 20 | int run_sensor_EC() { |
emilywilson | 1:6d8f645530b8 | 21 | |
emilywilson | 1:6d8f645530b8 | 22 | int status; |
emilywilson | 1:6d8f645530b8 | 23 | uint32_t distance; |
emilywilson | 1:6d8f645530b8 | 24 | DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL); |
emilywilson | 1:6d8f645530b8 | 25 | /* creates the 53L0A1 expansion board singleton obj */ |
emilywilson | 1:6d8f645530b8 | 26 | board = XNucleo53L0A1::instance(device_i2c, A2, D8, D2); |
emilywilson | 1:6d8f645530b8 | 27 | shdn = 0; //must reset sensor for an mbed reset to work |
emilywilson | 1:6d8f645530b8 | 28 | wait(0.1); |
emilywilson | 1:6d8f645530b8 | 29 | shdn = 1; |
emilywilson | 1:6d8f645530b8 | 30 | wait(0.1); |
emilywilson | 1:6d8f645530b8 | 31 | /* init the 53L0A1 board with default values */ |
emilywilson | 1:6d8f645530b8 | 32 | status = board->init_board(); |
emilywilson | 1:6d8f645530b8 | 33 | while (status) { |
emilywilson | 1:6d8f645530b8 | 34 | pc1.printf("Failed to init board! \r\n"); |
emilywilson | 1:6d8f645530b8 | 35 | status = board->init_board(); |
emilywilson | 1:6d8f645530b8 | 36 | } |
emilywilson | 1:6d8f645530b8 | 37 | |
emilywilson | 1:6d8f645530b8 | 38 | for (float i = 0.0; i < 1.0; i += 0.1) { |
emilywilson | 1:6d8f645530b8 | 39 | status = board->sensor_centre->get_distance(&distance); |
emilywilson | 1:6d8f645530b8 | 40 | if (status == VL53L0X_ERROR_NONE) { |
emilywilson | 1:6d8f645530b8 | 41 | pc1.printf("D=%ld mm\r\n", distance); |
emilywilson | 1:6d8f645530b8 | 42 | } |
emilywilson | 1:6d8f645530b8 | 43 | if (distance < min_dist) { |
emilywilson | 1:6d8f645530b8 | 44 | min_dist = distance; |
emilywilson | 1:6d8f645530b8 | 45 | angle = i; |
emilywilson | 1:6d8f645530b8 | 46 | } |
emilywilson | 1:6d8f645530b8 | 47 | } |
emilywilson | 1:6d8f645530b8 | 48 | return 0; |
emilywilson | 1:6d8f645530b8 | 49 | } |