khl

Dependencies:   VL53L0X_simple

Fork of Check_VL53L0X_simple_with_three_ToF by Kenji Arai

Committer:
kenken0721
Date:
Sat Jun 30 05:52:23 2018 +0000
Revision:
1:97619a86ab73
Parent:
0:1cb83a7e5598

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:1cb83a7e5598 1 /*
kenjiArai 0:1cb83a7e5598 2 * Mbed Application program -> Three of VL53L0X's are working together
kenjiArai 0:1cb83a7e5598 3 * Time-of-Flight ranging and gesture detection sensor / STMicro VL53L0X
kenjiArai 0:1cb83a7e5598 4 * http://www.st.com/ja/imaging-and-photonics-solutions/vl53l0x.html
kenjiArai 0:1cb83a7e5598 5 *
kenjiArai 0:1cb83a7e5598 6 * 1) AKIZUKI AE-VL53L0X
kenjiArai 0:1cb83a7e5598 7 * http://akizukidenshi.com/catalog/g/gM-12590/
kenjiArai 0:1cb83a7e5598 8 * 2) SWITCH SCIENCE Pololu VL53L0X (POLOLU-2490)
kenjiArai 0:1cb83a7e5598 9 * https://www.switch-science.com/catalog/2869/
kenjiArai 0:1cb83a7e5598 10 * 3) SWITCH SCIENCE VL53L0X (SSCI-028943)
kenjiArai 0:1cb83a7e5598 11 * https://www.switch-science.com/catalog/2894/
kenjiArai 0:1cb83a7e5598 12 * 4) Strawberry Linux
kenjiArai 0:1cb83a7e5598 13 * https://strawberry-linux.com/catalog/items?code=15310
kenjiArai 0:1cb83a7e5598 14 *
kenjiArai 0:1cb83a7e5598 15 * ---- Tested AE-VL53L0X BOARD and handmade circuit ----
kenjiArai 0:1cb83a7e5598 16 * Tested on below Mbed boards and works fine on mbed-os5
kenjiArai 0:1cb83a7e5598 17 * Nucleo-F446RE
kenjiArai 0:1cb83a7e5598 18 *
kenjiArai 0:1cb83a7e5598 19 * Copyright (c) 2018 Kenji Arai / JH1PJL
kenjiArai 0:1cb83a7e5598 20 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:1cb83a7e5598 21 * http://mbed.org/users/kenjiArai/
kenjiArai 0:1cb83a7e5598 22 * Created: January 21st, 2018
kenjiArai 0:1cb83a7e5598 23 * Revised: Feburary 6th, 2018 (with updated VL53L0X_simple library)
kenjiArai 0:1cb83a7e5598 24 */
kenjiArai 0:1cb83a7e5598 25
kenjiArai 0:1cb83a7e5598 26 // Include --------------------------------------------------------------------
kenjiArai 0:1cb83a7e5598 27 #include "mbed.h"
kenjiArai 0:1cb83a7e5598 28 #include "VL53L0X.h" // revision=7:174594 (as of today)
kenjiArai 0:1cb83a7e5598 29
kenjiArai 0:1cb83a7e5598 30 // Definition -----------------------------------------------------------------
kenjiArai 0:1cb83a7e5598 31 #warning "New VL53L0X simple lib. was released and this is an example for it.
kenjiArai 0:1cb83a7e5598 32 #warning "Current revision has a trouble with I2C LCD together.
kenjiArai 0:1cb83a7e5598 33 #warning "Investigation is ongoing.
kenjiArai 0:1cb83a7e5598 34
kenjiArai 0:1cb83a7e5598 35 // Constructor ----------------------------------------------------------------
kenjiArai 0:1cb83a7e5598 36 DigitalOut myled(LED1);
kenjiArai 0:1cb83a7e5598 37 Serial pc(USBTX, USBRX);
kenjiArai 0:1cb83a7e5598 38 //I2C i2c(P0_30, P0_7); // only for TY51822r3
kenken0721 1:97619a86ab73 39 I2C i2c(PB_9, PB_8);
kenjiArai 0:1cb83a7e5598 40 VL53L0X tof_center(i2c, D8); // XSHUT is mandatory for multi setting
kenjiArai 0:1cb83a7e5598 41 VL53L0X tof_left(i2c, D9); // XSHUT is mandatory for multi setting
kenjiArai 0:1cb83a7e5598 42 VL53L0X tof_right(i2c, D10); // XSHUT is mandatory for multi setting
kenjiArai 0:1cb83a7e5598 43 Timer t;
kenjiArai 0:1cb83a7e5598 44
kenjiArai 0:1cb83a7e5598 45 // RAM ------------------------------------------------------------------------
kenjiArai 0:1cb83a7e5598 46
kenjiArai 0:1cb83a7e5598 47 // ROM / Constant data --------------------------------------------------------
kenjiArai 0:1cb83a7e5598 48 char *const msg0 = "VL53L0X is running correctly!!\r\n";
kenjiArai 0:1cb83a7e5598 49 char *const msg1 = "VL53L0X -> something is wrong!!\r\n";
kenjiArai 0:1cb83a7e5598 50 char *const msg2 = "#,";
kenjiArai 0:1cb83a7e5598 51 char *const msg3 = "d[mm]=,";
kenjiArai 0:1cb83a7e5598 52 char *const msg4 = "err, ";
kenjiArai 0:1cb83a7e5598 53 char *const msg5 = "VL53[mS]=, ";
kenjiArai 0:1cb83a7e5598 54 char *const msg6 = "all[mS]=, ";
kenjiArai 0:1cb83a7e5598 55 char *const msg_c = "Center";
kenjiArai 0:1cb83a7e5598 56 char *const msg_l = "Left";
kenjiArai 0:1cb83a7e5598 57 char *const msg_r = "Right";
kenjiArai 0:1cb83a7e5598 58
kenjiArai 0:1cb83a7e5598 59 // Function prototypes --------------------------------------------------------
kenjiArai 0:1cb83a7e5598 60
kenjiArai 0:1cb83a7e5598 61 //------------------------------------------------------------------------------
kenjiArai 0:1cb83a7e5598 62 // Control Program
kenjiArai 0:1cb83a7e5598 63 //------------------------------------------------------------------------------
kenjiArai 0:1cb83a7e5598 64 int main()
kenjiArai 0:1cb83a7e5598 65 {
kenjiArai 0:1cb83a7e5598 66 int status = VL53L0X_ERROR_NONE;
kenjiArai 0:1cb83a7e5598 67 uint32_t data_c = 0;
kenjiArai 0:1cb83a7e5598 68 uint32_t data_l = 0;
kenjiArai 0:1cb83a7e5598 69 uint32_t data_r = 0;
kenjiArai 0:1cb83a7e5598 70 uint32_t count = 0;
kenjiArai 0:1cb83a7e5598 71 uint32_t tm_sensor;
kenjiArai 0:1cb83a7e5598 72 uint32_t tm_all_work;
kenjiArai 0:1cb83a7e5598 73 uint8_t error_num;
kenjiArai 0:1cb83a7e5598 74
kenjiArai 0:1cb83a7e5598 75 status = tof_center.init_sensor(0x22 << 1U);// new addres(not equal others)
kenjiArai 0:1cb83a7e5598 76 pc.printf("--%s--\r\n", msg_c);
kenjiArai 0:1cb83a7e5598 77 if (status == VL53L0X_ERROR_NONE) {
kenjiArai 0:1cb83a7e5598 78 pc.printf(msg0);
kenjiArai 0:1cb83a7e5598 79 } else {
kenjiArai 0:1cb83a7e5598 80 pc.printf(msg1);
kenjiArai 0:1cb83a7e5598 81 }
kenjiArai 0:1cb83a7e5598 82 status = tof_left.init_sensor(0x33 << 1U); // new addres(not equal others)
kenjiArai 0:1cb83a7e5598 83 pc.printf("--%s--\r\n", msg_l);
kenjiArai 0:1cb83a7e5598 84 if (status == VL53L0X_ERROR_NONE) {
kenjiArai 0:1cb83a7e5598 85 pc.printf(msg0);
kenjiArai 0:1cb83a7e5598 86 } else {
kenjiArai 0:1cb83a7e5598 87 pc.printf(msg1);
kenjiArai 0:1cb83a7e5598 88 }
kenjiArai 0:1cb83a7e5598 89 status = tof_right.init_sensor(0x44 << 1U); // new addres(not equal others)
kenjiArai 0:1cb83a7e5598 90 pc.printf("--%s--\r\n", msg_r);
kenjiArai 0:1cb83a7e5598 91 if (status == VL53L0X_ERROR_NONE) {
kenjiArai 0:1cb83a7e5598 92 pc.printf(msg0);
kenjiArai 0:1cb83a7e5598 93 } else {
kenjiArai 0:1cb83a7e5598 94 pc.printf(msg1);
kenjiArai 0:1cb83a7e5598 95 }
kenjiArai 0:1cb83a7e5598 96 status = tof_center.set_mode(range_long_distance_33ms_200cm);
kenjiArai 0:1cb83a7e5598 97 //status = tof_center.set_mode(range_hi_accurate_200ms_120cm);
kenjiArai 0:1cb83a7e5598 98 //status = tof_center.set_mode(range_hi_speed_20ms_120cm);
kenjiArai 0:1cb83a7e5598 99 if (status == VL53L0X_ERROR_NONE) {
kenjiArai 0:1cb83a7e5598 100 pc.printf(msg0);
kenjiArai 0:1cb83a7e5598 101 } else {
kenjiArai 0:1cb83a7e5598 102 pc.printf(msg1);
kenjiArai 0:1cb83a7e5598 103 }
kenjiArai 0:1cb83a7e5598 104 status = tof_left.set_mode(range_long_distance_33ms_200cm);
kenjiArai 0:1cb83a7e5598 105 if (status == VL53L0X_ERROR_NONE) {
kenjiArai 0:1cb83a7e5598 106 pc.printf(msg0);
kenjiArai 0:1cb83a7e5598 107 } else {
kenjiArai 0:1cb83a7e5598 108 pc.printf(msg1);
kenjiArai 0:1cb83a7e5598 109 }
kenjiArai 0:1cb83a7e5598 110 status = tof_right.set_mode(range_long_distance_33ms_200cm);
kenjiArai 0:1cb83a7e5598 111 if (status == VL53L0X_ERROR_NONE) {
kenjiArai 0:1cb83a7e5598 112 pc.printf(msg0);
kenjiArai 0:1cb83a7e5598 113 } else {
kenjiArai 0:1cb83a7e5598 114 pc.printf(msg1);
kenjiArai 0:1cb83a7e5598 115 }
kenjiArai 0:1cb83a7e5598 116 while(true) {
kenjiArai 0:1cb83a7e5598 117 t.reset();
kenjiArai 0:1cb83a7e5598 118 t.start();
kenjiArai 0:1cb83a7e5598 119 myled = !myled;
kenjiArai 0:1cb83a7e5598 120 error_num = 0;
kenjiArai 0:1cb83a7e5598 121 status = tof_center.get_distance(&data_c);
kenjiArai 0:1cb83a7e5598 122 if (status) {
kenjiArai 0:1cb83a7e5598 123 error_num = 1U << 0;
kenjiArai 0:1cb83a7e5598 124 }
kenjiArai 0:1cb83a7e5598 125 status = tof_left.get_distance(&data_l);
kenjiArai 0:1cb83a7e5598 126 if (status) {
kenjiArai 0:1cb83a7e5598 127 error_num |= 1U << 1;
kenjiArai 0:1cb83a7e5598 128 }
kenjiArai 0:1cb83a7e5598 129 status |= tof_right.get_distance(&data_r);
kenjiArai 0:1cb83a7e5598 130 if (status) {
kenjiArai 0:1cb83a7e5598 131 error_num |= 1U << 2;
kenjiArai 0:1cb83a7e5598 132 }
kenjiArai 0:1cb83a7e5598 133 tm_sensor = t.read_ms();
kenjiArai 0:1cb83a7e5598 134 pc.printf("%s%5d,%s%5d,%5d,%5d,",
kenjiArai 0:1cb83a7e5598 135 msg2, count++, msg3, data_c, data_l, data_r);
kenjiArai 0:1cb83a7e5598 136 pc.printf("%s%d,%s%d,%s%1d\r\n",
kenjiArai 0:1cb83a7e5598 137 msg5, tm_sensor, msg6, tm_all_work, msg4,error_num);
kenjiArai 0:1cb83a7e5598 138 tm_all_work = t.read_ms();
kenjiArai 0:1cb83a7e5598 139 if (tm_all_work < 199) {
kenjiArai 0:1cb83a7e5598 140 wait_ms(200 - tm_all_work);
kenjiArai 0:1cb83a7e5598 141 }
kenjiArai 0:1cb83a7e5598 142 }
kenjiArai 0:1cb83a7e5598 143 }