check program for VL53L0X_simple library
Dependencies: VL53L0X_simple TextLCD
Please refer below page.
/users/kenjiArai/notebook/vl53l0x-tof-sensor/
main.cpp@4:325021757859, 2020-02-26 (annotated)
- Committer:
- kenjiArai
- Date:
- Wed Feb 26 09:37:49 2020 +0000
- Revision:
- 4:325021757859
- Parent:
- 3:1be17b18b200
countermesure for XSHUT = NC; https://forums.mbed.com/t/nc-pin-assign-causes-hardfault/7379/2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 0:da0fdf120892 | 1 | /* |
kenjiArai | 0:da0fdf120892 | 2 | * Mbed Application program |
kenjiArai | 0:da0fdf120892 | 3 | * Time-of-Flight ranging and gesture detection sensor / STMicro VL53L0X |
kenjiArai | 0:da0fdf120892 | 4 | * http://www.st.com/ja/imaging-and-photonics-solutions/vl53l0x.html |
kenjiArai | 0:da0fdf120892 | 5 | * |
kenjiArai | 0:da0fdf120892 | 6 | * 1) AKIZUKI AE-VL53L0X |
kenjiArai | 0:da0fdf120892 | 7 | * http://akizukidenshi.com/catalog/g/gM-12590/ |
kenjiArai | 0:da0fdf120892 | 8 | * 2) SWITCH SCIENCE Pololu VL53L0X (POLOLU-2490) |
kenjiArai | 0:da0fdf120892 | 9 | * https://www.switch-science.com/catalog/2869/ |
kenjiArai | 0:da0fdf120892 | 10 | * 3) SWITCH SCIENCE VL53L0X (SSCI-028943) |
kenjiArai | 0:da0fdf120892 | 11 | * https://www.switch-science.com/catalog/2894/ |
kenjiArai | 0:da0fdf120892 | 12 | * 4) Strawberry Linux |
kenjiArai | 0:da0fdf120892 | 13 | * https://strawberry-linux.com/catalog/items?code=15310 |
kenjiArai | 0:da0fdf120892 | 14 | * |
kenjiArai | 0:da0fdf120892 | 15 | * ---- Tested AE-VL53L0X BOARD and handmade circuit ---- |
kenjiArai | 0:da0fdf120892 | 16 | * Tested on below Mbed boards and works fine on mbed 2.0 |
kenjiArai | 0:da0fdf120892 | 17 | * Nucleo-F303K8 |
kenjiArai | 0:da0fdf120892 | 18 | * Nucleo-F334R8, -F401RE, -F411RE, -F446RE |
kenjiArai | 0:da0fdf120892 | 19 | * Nucleo-L053R8, -L073RZ, -L152RE, -L476RG |
kenjiArai | 0:da0fdf120892 | 20 | * FRDM-K64F |
kenjiArai | 0:da0fdf120892 | 21 | * TY51822r3 |
kenjiArai | 0:da0fdf120892 | 22 | * Run also on mbed-os5 (Tested on Nucleo-F446RE) |
kenjiArai | 0:da0fdf120892 | 23 | * |
kenjiArai | 3:1be17b18b200 | 24 | * Copyright (c) 2018,'20 Kenji Arai / JH1PJL |
kenjiArai | 3:1be17b18b200 | 25 | * http://www7b.biglobe.ne.jp/~kenjia/ |
kenjiArai | 3:1be17b18b200 | 26 | * https://os.mbed.com/users/kenjiArai/ |
kenjiArai | 0:da0fdf120892 | 27 | * Created: January 21st, 2018 |
kenjiArai | 1:45891160ccab | 28 | * Revised: Feburary 6th, 2018 (with updated VL53L0X_simple library) |
kenjiArai | 4:325021757859 | 29 | * Revised: Feburary 26th, 2020 only run on mbed-os5.15.1 |
kenjiArai | 0:da0fdf120892 | 30 | */ |
kenjiArai | 0:da0fdf120892 | 31 | |
kenjiArai | 0:da0fdf120892 | 32 | // Include -------------------------------------------------------------------- |
kenjiArai | 0:da0fdf120892 | 33 | #include "mbed.h" |
kenjiArai | 0:da0fdf120892 | 34 | #include "TextLCD.h" |
kenjiArai | 0:da0fdf120892 | 35 | #include "VL53L0X.h" |
kenjiArai | 0:da0fdf120892 | 36 | |
kenjiArai | 0:da0fdf120892 | 37 | // Definition ----------------------------------------------------------------- |
kenjiArai | 3:1be17b18b200 | 38 | #define USE_LCD 0 |
kenjiArai | 2:f675507dcad3 | 39 | #define USE_XSHUT 0 |
kenjiArai | 0:da0fdf120892 | 40 | |
kenjiArai | 3:1be17b18b200 | 41 | #if (MBED_MAJOR_VERSION == 2) |
kenjiArai | 3:1be17b18b200 | 42 | #define WAIT_MS(x) wait_ms(x) |
kenjiArai | 3:1be17b18b200 | 43 | #define VL53L0X_OsDelay(...) wait_ms(2) |
kenjiArai | 3:1be17b18b200 | 44 | #elif (MBED_MAJOR_VERSION == 5) |
kenjiArai | 3:1be17b18b200 | 45 | #define WAIT_MS(x) ThisThread::sleep_for(x) |
kenjiArai | 3:1be17b18b200 | 46 | #define VL53L0X_OsDelay(...) ThisThread::sleep_for(2) |
kenjiArai | 3:1be17b18b200 | 47 | #else |
kenjiArai | 3:1be17b18b200 | 48 | #warning "I cannot control wait_ms()!!" |
kenjiArai | 3:1be17b18b200 | 49 | #endif |
kenjiArai | 3:1be17b18b200 | 50 | |
kenjiArai | 0:da0fdf120892 | 51 | // Constructor ---------------------------------------------------------------- |
kenjiArai | 0:da0fdf120892 | 52 | DigitalOut myled(LED1); |
kenjiArai | 0:da0fdf120892 | 53 | Serial pc(USBTX, USBRX); |
kenjiArai | 0:da0fdf120892 | 54 | //I2C i2c(P0_30, P0_7); // only for TY51822r3 |
kenjiArai | 3:1be17b18b200 | 55 | //I2C i2c(I2C_SDA, I2C_SCL); // standard |
kenjiArai | 3:1be17b18b200 | 56 | I2C i2c(D14, D15); |
kenjiArai | 4:325021757859 | 57 | #if USE_XSHUT |
kenjiArai | 4:325021757859 | 58 | VL53L0X sensor(i2c, D8); |
kenjiArai | 4:325021757859 | 59 | #else |
kenjiArai | 4:325021757859 | 60 | VL53L0X sensor(i2c, NC); |
kenjiArai | 4:325021757859 | 61 | //VL53L0X sensor(I2C_SDA, I2C_SCL, NC); |
kenjiArai | 4:325021757859 | 62 | //VL53L0X sensor(D14, D15, NC); |
kenjiArai | 4:325021757859 | 63 | #endif |
kenjiArai | 0:da0fdf120892 | 64 | #if USE_LCD |
kenjiArai | 0:da0fdf120892 | 65 | TextLCD_I2C_N lcd(&i2c, 0x7c, TextLCD::LCD8x2); // LCD(Akizuki AQM0802A) |
kenjiArai | 0:da0fdf120892 | 66 | #endif |
kenjiArai | 0:da0fdf120892 | 67 | Timer t; |
kenjiArai | 0:da0fdf120892 | 68 | |
kenjiArai | 0:da0fdf120892 | 69 | // RAM ------------------------------------------------------------------------ |
kenjiArai | 0:da0fdf120892 | 70 | |
kenjiArai | 0:da0fdf120892 | 71 | // ROM / Constant data -------------------------------------------------------- |
kenjiArai | 3:1be17b18b200 | 72 | const char *const msg0 = "VL53L0X is running correctly!!\r\n"; |
kenjiArai | 3:1be17b18b200 | 73 | const char *const msg1 = "VL53L0X -> something is wrong!!\r\n"; |
kenjiArai | 3:1be17b18b200 | 74 | const char *const msg2 = "#,"; |
kenjiArai | 3:1be17b18b200 | 75 | const char *const msg3 = "d[mm]=,"; |
kenjiArai | 3:1be17b18b200 | 76 | const char *const msg4 = "d[mm]=,error,"; |
kenjiArai | 3:1be17b18b200 | 77 | const char *const msg5 = "VL53[mS]=, "; |
kenjiArai | 3:1be17b18b200 | 78 | const char *const msg6 = "all[mS]=, "; |
kenjiArai | 0:da0fdf120892 | 79 | |
kenjiArai | 0:da0fdf120892 | 80 | // Function prototypes -------------------------------------------------------- |
kenjiArai | 0:da0fdf120892 | 81 | |
kenjiArai | 0:da0fdf120892 | 82 | //------------------------------------------------------------------------------ |
kenjiArai | 0:da0fdf120892 | 83 | // Control Program |
kenjiArai | 0:da0fdf120892 | 84 | //------------------------------------------------------------------------------ |
kenjiArai | 0:da0fdf120892 | 85 | int main() |
kenjiArai | 0:da0fdf120892 | 86 | { |
kenjiArai | 0:da0fdf120892 | 87 | int status = VL53L0X_ERROR_NONE; |
kenjiArai | 0:da0fdf120892 | 88 | uint32_t data; |
kenjiArai | 0:da0fdf120892 | 89 | uint32_t count = 0; |
kenjiArai | 0:da0fdf120892 | 90 | uint32_t tm_sensor; |
kenjiArai | 0:da0fdf120892 | 91 | uint32_t tm_all_work; |
kenjiArai | 0:da0fdf120892 | 92 | |
kenjiArai | 0:da0fdf120892 | 93 | #if USE_LCD |
kenjiArai | 0:da0fdf120892 | 94 | lcd.locate(0, 0); |
kenjiArai | 0:da0fdf120892 | 95 | // 12345678 |
kenjiArai | 0:da0fdf120892 | 96 | lcd.puts("12345678"); |
kenjiArai | 0:da0fdf120892 | 97 | lcd.locate(0, 1); |
kenjiArai | 0:da0fdf120892 | 98 | // 12345678 |
kenjiArai | 0:da0fdf120892 | 99 | lcd.puts(" JH1PJL "); |
kenjiArai | 0:da0fdf120892 | 100 | lcd.setCursor(TextLCD_Base::CurOff_BlkOff); |
kenjiArai | 0:da0fdf120892 | 101 | lcd.setContrast(0x19); |
kenjiArai | 3:1be17b18b200 | 102 | WAIT_MS(2000); |
kenjiArai | 0:da0fdf120892 | 103 | #endif |
kenjiArai | 2:f675507dcad3 | 104 | #if USE_XSHUT |
kenjiArai | 1:45891160ccab | 105 | status = sensor.init_sensor(0x33); // set new I2C address |
kenjiArai | 2:f675507dcad3 | 106 | #else |
kenjiArai | 2:f675507dcad3 | 107 | // no control XSHUT then set default address (no other way) |
kenjiArai | 2:f675507dcad3 | 108 | status = sensor.init_sensor(VL53L0X_DEFAULT_ADDRESS); |
kenjiArai | 2:f675507dcad3 | 109 | #endif |
kenjiArai | 1:45891160ccab | 110 | if (status == VL53L0X_ERROR_NONE) { |
kenjiArai | 3:1be17b18b200 | 111 | pc.printf("%s", msg0); |
kenjiArai | 1:45891160ccab | 112 | } else { |
kenjiArai | 3:1be17b18b200 | 113 | pc.printf("%s", msg1); |
kenjiArai | 3:1be17b18b200 | 114 | pc.printf("error number -> %d\r\n", status); |
kenjiArai | 1:45891160ccab | 115 | } |
kenjiArai | 0:da0fdf120892 | 116 | status = sensor.set_mode(range_long_distance_33ms_200cm); |
kenjiArai | 0:da0fdf120892 | 117 | //status = sensor.set_mode(range_hi_accurate_200ms_120cm); |
kenjiArai | 0:da0fdf120892 | 118 | //status = sensor.set_mode(range_hi_speed_20ms_120cm); |
kenjiArai | 0:da0fdf120892 | 119 | if (status == VL53L0X_ERROR_NONE) { |
kenjiArai | 3:1be17b18b200 | 120 | pc.printf("%s", msg0); |
kenjiArai | 0:da0fdf120892 | 121 | } else { |
kenjiArai | 3:1be17b18b200 | 122 | pc.printf("%s", msg1); |
kenjiArai | 3:1be17b18b200 | 123 | pc.printf("error number -> %d\r\n", status); |
kenjiArai | 0:da0fdf120892 | 124 | } |
kenjiArai | 0:da0fdf120892 | 125 | while(true) { |
kenjiArai | 0:da0fdf120892 | 126 | t.reset(); |
kenjiArai | 0:da0fdf120892 | 127 | t.start(); |
kenjiArai | 0:da0fdf120892 | 128 | //myled = !myled; |
kenjiArai | 0:da0fdf120892 | 129 | status = sensor.get_distance(&data); |
kenjiArai | 0:da0fdf120892 | 130 | tm_sensor = t.read_ms(); |
kenjiArai | 0:da0fdf120892 | 131 | if (status == VL53L0X_ERROR_NONE) { |
kenjiArai | 0:da0fdf120892 | 132 | pc.printf("%s%5d,%s%5d,", msg2, count++, msg3, data); |
kenjiArai | 0:da0fdf120892 | 133 | } else { |
kenjiArai | 0:da0fdf120892 | 134 | pc.printf("%s%5d,%s", msg2, count++, msg4); |
kenjiArai | 0:da0fdf120892 | 135 | } |
kenjiArai | 0:da0fdf120892 | 136 | #if USE_LCD |
kenjiArai | 0:da0fdf120892 | 137 | if ((count % 4) == 0){ |
kenjiArai | 0:da0fdf120892 | 138 | lcd.locate(0, 0); |
kenjiArai | 0:da0fdf120892 | 139 | lcd.printf(" %5d ", data); |
kenjiArai | 0:da0fdf120892 | 140 | lcd.locate(0, 1); |
kenjiArai | 0:da0fdf120892 | 141 | lcd.printf(" %5d ", count); |
kenjiArai | 0:da0fdf120892 | 142 | } |
kenjiArai | 0:da0fdf120892 | 143 | #endif |
kenjiArai | 0:da0fdf120892 | 144 | pc.printf("%s%d,%s%d\r\n", msg5, tm_sensor, msg6, tm_all_work); |
kenjiArai | 0:da0fdf120892 | 145 | tm_all_work = t.read_ms(); |
kenjiArai | 0:da0fdf120892 | 146 | if (tm_all_work < 99){ |
kenjiArai | 3:1be17b18b200 | 147 | WAIT_MS(100 - tm_all_work); |
kenjiArai | 0:da0fdf120892 | 148 | } |
kenjiArai | 0:da0fdf120892 | 149 | } |
kenjiArai | 0:da0fdf120892 | 150 | } |