check program for VL53L0X_simple library
Dependencies: VL53L0X_simple TextLCD
Please refer below page.
/users/kenjiArai/notebook/vl53l0x-tof-sensor/
main.cpp@3:1be17b18b200, 2020-02-24 (annotated)
- Committer:
- kenjiArai
- Date:
- Mon Feb 24 11:22:18 2020 +0000
- Revision:
- 3:1be17b18b200
- Parent:
- 2:f675507dcad3
- Child:
- 4:325021757859
run on latest mbed-os(5.15.1)
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 | 3:1be17b18b200 | 29 | * Revised: Feburary 24th, 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 | 3:1be17b18b200 | 57 | VL53L0X sensor(i2c, D8); // XSHUT = D8 (or NC) |
kenjiArai | 0:da0fdf120892 | 58 | #if USE_LCD |
kenjiArai | 0:da0fdf120892 | 59 | TextLCD_I2C_N lcd(&i2c, 0x7c, TextLCD::LCD8x2); // LCD(Akizuki AQM0802A) |
kenjiArai | 0:da0fdf120892 | 60 | #endif |
kenjiArai | 0:da0fdf120892 | 61 | Timer t; |
kenjiArai | 0:da0fdf120892 | 62 | |
kenjiArai | 0:da0fdf120892 | 63 | // RAM ------------------------------------------------------------------------ |
kenjiArai | 0:da0fdf120892 | 64 | |
kenjiArai | 0:da0fdf120892 | 65 | // ROM / Constant data -------------------------------------------------------- |
kenjiArai | 3:1be17b18b200 | 66 | const char *const msg0 = "VL53L0X is running correctly!!\r\n"; |
kenjiArai | 3:1be17b18b200 | 67 | const char *const msg1 = "VL53L0X -> something is wrong!!\r\n"; |
kenjiArai | 3:1be17b18b200 | 68 | const char *const msg2 = "#,"; |
kenjiArai | 3:1be17b18b200 | 69 | const char *const msg3 = "d[mm]=,"; |
kenjiArai | 3:1be17b18b200 | 70 | const char *const msg4 = "d[mm]=,error,"; |
kenjiArai | 3:1be17b18b200 | 71 | const char *const msg5 = "VL53[mS]=, "; |
kenjiArai | 3:1be17b18b200 | 72 | const char *const msg6 = "all[mS]=, "; |
kenjiArai | 0:da0fdf120892 | 73 | |
kenjiArai | 0:da0fdf120892 | 74 | // Function prototypes -------------------------------------------------------- |
kenjiArai | 0:da0fdf120892 | 75 | |
kenjiArai | 0:da0fdf120892 | 76 | //------------------------------------------------------------------------------ |
kenjiArai | 0:da0fdf120892 | 77 | // Control Program |
kenjiArai | 0:da0fdf120892 | 78 | //------------------------------------------------------------------------------ |
kenjiArai | 0:da0fdf120892 | 79 | int main() |
kenjiArai | 0:da0fdf120892 | 80 | { |
kenjiArai | 0:da0fdf120892 | 81 | int status = VL53L0X_ERROR_NONE; |
kenjiArai | 0:da0fdf120892 | 82 | uint32_t data; |
kenjiArai | 0:da0fdf120892 | 83 | uint32_t count = 0; |
kenjiArai | 0:da0fdf120892 | 84 | uint32_t tm_sensor; |
kenjiArai | 0:da0fdf120892 | 85 | uint32_t tm_all_work; |
kenjiArai | 0:da0fdf120892 | 86 | |
kenjiArai | 0:da0fdf120892 | 87 | #if USE_LCD |
kenjiArai | 0:da0fdf120892 | 88 | lcd.locate(0, 0); |
kenjiArai | 0:da0fdf120892 | 89 | // 12345678 |
kenjiArai | 0:da0fdf120892 | 90 | lcd.puts("12345678"); |
kenjiArai | 0:da0fdf120892 | 91 | lcd.locate(0, 1); |
kenjiArai | 0:da0fdf120892 | 92 | // 12345678 |
kenjiArai | 0:da0fdf120892 | 93 | lcd.puts(" JH1PJL "); |
kenjiArai | 0:da0fdf120892 | 94 | lcd.setCursor(TextLCD_Base::CurOff_BlkOff); |
kenjiArai | 0:da0fdf120892 | 95 | lcd.setContrast(0x19); |
kenjiArai | 3:1be17b18b200 | 96 | WAIT_MS(2000); |
kenjiArai | 0:da0fdf120892 | 97 | #endif |
kenjiArai | 2:f675507dcad3 | 98 | #if USE_XSHUT |
kenjiArai | 1:45891160ccab | 99 | status = sensor.init_sensor(0x33); // set new I2C address |
kenjiArai | 2:f675507dcad3 | 100 | #else |
kenjiArai | 2:f675507dcad3 | 101 | // no control XSHUT then set default address (no other way) |
kenjiArai | 2:f675507dcad3 | 102 | status = sensor.init_sensor(VL53L0X_DEFAULT_ADDRESS); |
kenjiArai | 2:f675507dcad3 | 103 | #endif |
kenjiArai | 1:45891160ccab | 104 | if (status == VL53L0X_ERROR_NONE) { |
kenjiArai | 3:1be17b18b200 | 105 | pc.printf("%s", msg0); |
kenjiArai | 1:45891160ccab | 106 | } else { |
kenjiArai | 3:1be17b18b200 | 107 | pc.printf("%s", msg1); |
kenjiArai | 3:1be17b18b200 | 108 | pc.printf("error number -> %d\r\n", status); |
kenjiArai | 1:45891160ccab | 109 | } |
kenjiArai | 0:da0fdf120892 | 110 | status = sensor.set_mode(range_long_distance_33ms_200cm); |
kenjiArai | 0:da0fdf120892 | 111 | //status = sensor.set_mode(range_hi_accurate_200ms_120cm); |
kenjiArai | 0:da0fdf120892 | 112 | //status = sensor.set_mode(range_hi_speed_20ms_120cm); |
kenjiArai | 0:da0fdf120892 | 113 | if (status == VL53L0X_ERROR_NONE) { |
kenjiArai | 3:1be17b18b200 | 114 | pc.printf("%s", msg0); |
kenjiArai | 0:da0fdf120892 | 115 | } else { |
kenjiArai | 3:1be17b18b200 | 116 | pc.printf("%s", msg1); |
kenjiArai | 3:1be17b18b200 | 117 | pc.printf("error number -> %d\r\n", status); |
kenjiArai | 0:da0fdf120892 | 118 | } |
kenjiArai | 0:da0fdf120892 | 119 | while(true) { |
kenjiArai | 0:da0fdf120892 | 120 | t.reset(); |
kenjiArai | 0:da0fdf120892 | 121 | t.start(); |
kenjiArai | 0:da0fdf120892 | 122 | //myled = !myled; |
kenjiArai | 0:da0fdf120892 | 123 | status = sensor.get_distance(&data); |
kenjiArai | 0:da0fdf120892 | 124 | tm_sensor = t.read_ms(); |
kenjiArai | 0:da0fdf120892 | 125 | if (status == VL53L0X_ERROR_NONE) { |
kenjiArai | 0:da0fdf120892 | 126 | pc.printf("%s%5d,%s%5d,", msg2, count++, msg3, data); |
kenjiArai | 0:da0fdf120892 | 127 | } else { |
kenjiArai | 0:da0fdf120892 | 128 | pc.printf("%s%5d,%s", msg2, count++, msg4); |
kenjiArai | 0:da0fdf120892 | 129 | } |
kenjiArai | 0:da0fdf120892 | 130 | #if USE_LCD |
kenjiArai | 0:da0fdf120892 | 131 | if ((count % 4) == 0){ |
kenjiArai | 0:da0fdf120892 | 132 | lcd.locate(0, 0); |
kenjiArai | 0:da0fdf120892 | 133 | lcd.printf(" %5d ", data); |
kenjiArai | 0:da0fdf120892 | 134 | lcd.locate(0, 1); |
kenjiArai | 0:da0fdf120892 | 135 | lcd.printf(" %5d ", count); |
kenjiArai | 0:da0fdf120892 | 136 | } |
kenjiArai | 0:da0fdf120892 | 137 | #endif |
kenjiArai | 0:da0fdf120892 | 138 | pc.printf("%s%d,%s%d\r\n", msg5, tm_sensor, msg6, tm_all_work); |
kenjiArai | 0:da0fdf120892 | 139 | tm_all_work = t.read_ms(); |
kenjiArai | 0:da0fdf120892 | 140 | if (tm_all_work < 99){ |
kenjiArai | 3:1be17b18b200 | 141 | WAIT_MS(100 - tm_all_work); |
kenjiArai | 0:da0fdf120892 | 142 | } |
kenjiArai | 0:da0fdf120892 | 143 | } |
kenjiArai | 0:da0fdf120892 | 144 | } |