ケンタ ミヤザキ
/
Check_VL53L0X_simple_with_three_ToF
khl
Fork of Check_VL53L0X_simple_with_three_ToF by
main.cpp@1:97619a86ab73, 2018-06-30 (annotated)
- Committer:
- kenken0721
- Date:
- Sat Jun 30 05:52:23 2018 +0000
- Revision:
- 1:97619a86ab73
- Parent:
- 0:1cb83a7e5598
Who changed what in which revision?
User | Revision | Line number | New 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 | } |