Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: VL53L0X_simple TextLCD
main.cpp@1:45891160ccab, 2018-02-05 (annotated)
- Committer:
- kenjiArai
- Date:
- Mon Feb 05 22:38:59 2018 +0000
- Revision:
- 1:45891160ccab
- Parent:
- 0:da0fdf120892
- Child:
- 2:f675507dcad3
added init_sensor() for changing I2C address (init_sensor() func. call is must for use)
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 | 0:da0fdf120892 | 24 | * Copyright (c) 2018 Kenji Arai / JH1PJL |
| kenjiArai | 0:da0fdf120892 | 25 | * http://www.page.sannet.ne.jp/kenjia/index.html |
| kenjiArai | 0:da0fdf120892 | 26 | * http://mbed.org/users/kenjiArai/ |
| kenjiArai | 0:da0fdf120892 | 27 | * Created: January 21st, 2018 |
| kenjiArai | 1:45891160ccab | 28 | * Revised: Feburary 6th, 2018 (with updated VL53L0X_simple library) |
| kenjiArai | 0:da0fdf120892 | 29 | */ |
| kenjiArai | 0:da0fdf120892 | 30 | |
| kenjiArai | 0:da0fdf120892 | 31 | // Include -------------------------------------------------------------------- |
| kenjiArai | 0:da0fdf120892 | 32 | #include "mbed.h" |
| kenjiArai | 0:da0fdf120892 | 33 | #include "TextLCD.h" |
| kenjiArai | 0:da0fdf120892 | 34 | #include "VL53L0X.h" |
| kenjiArai | 0:da0fdf120892 | 35 | |
| kenjiArai | 0:da0fdf120892 | 36 | // Definition ----------------------------------------------------------------- |
| kenjiArai | 0:da0fdf120892 | 37 | #define USE_LCD 1 |
| kenjiArai | 0:da0fdf120892 | 38 | |
| kenjiArai | 0:da0fdf120892 | 39 | // Constructor ---------------------------------------------------------------- |
| kenjiArai | 0:da0fdf120892 | 40 | DigitalOut myled(LED1); |
| kenjiArai | 0:da0fdf120892 | 41 | Serial pc(USBTX, USBRX); |
| kenjiArai | 0:da0fdf120892 | 42 | #if 1 |
| kenjiArai | 0:da0fdf120892 | 43 | //I2C i2c(P0_30, P0_7); // only for TY51822r3 |
| kenjiArai | 0:da0fdf120892 | 44 | I2C i2c(I2C_SDA, I2C_SCL); |
| kenjiArai | 1:45891160ccab | 45 | VL53L0X sensor(i2c, D8); // XSHUT = D8 |
| kenjiArai | 0:da0fdf120892 | 46 | #else |
| kenjiArai | 1:45891160ccab | 47 | //VL53L0X sensor(I2C_SDA, I2C_SCL, D8); // use XShut pin |
| kenjiArai | 0:da0fdf120892 | 48 | VL53L0X sensor(I2C_SDA, I2C_SCL, NC); // XSHUT = NC |
| kenjiArai | 0:da0fdf120892 | 49 | #endif |
| kenjiArai | 0:da0fdf120892 | 50 | #if USE_LCD |
| kenjiArai | 0:da0fdf120892 | 51 | TextLCD_I2C_N lcd(&i2c, 0x7c, TextLCD::LCD8x2); // LCD(Akizuki AQM0802A) |
| kenjiArai | 0:da0fdf120892 | 52 | #endif |
| kenjiArai | 0:da0fdf120892 | 53 | Timer t; |
| kenjiArai | 0:da0fdf120892 | 54 | |
| kenjiArai | 0:da0fdf120892 | 55 | // RAM ------------------------------------------------------------------------ |
| kenjiArai | 0:da0fdf120892 | 56 | |
| kenjiArai | 0:da0fdf120892 | 57 | // ROM / Constant data -------------------------------------------------------- |
| kenjiArai | 1:45891160ccab | 58 | char *const msg0 = "VL53L0X is running correctly!!\r\n"; |
| kenjiArai | 1:45891160ccab | 59 | char *const msg1 = "VL53L0X -> something is wrong!!\r\n"; |
| kenjiArai | 0:da0fdf120892 | 60 | char *const msg2 = "#,"; |
| kenjiArai | 0:da0fdf120892 | 61 | char *const msg3 = "d[mm]=,"; |
| kenjiArai | 0:da0fdf120892 | 62 | char *const msg4 = "d[mm]=,error,"; |
| kenjiArai | 0:da0fdf120892 | 63 | char *const msg5 = "VL53[mS]=, "; |
| kenjiArai | 0:da0fdf120892 | 64 | char *const msg6 = "all[mS]=, "; |
| kenjiArai | 0:da0fdf120892 | 65 | |
| kenjiArai | 0:da0fdf120892 | 66 | // Function prototypes -------------------------------------------------------- |
| kenjiArai | 0:da0fdf120892 | 67 | |
| kenjiArai | 0:da0fdf120892 | 68 | //------------------------------------------------------------------------------ |
| kenjiArai | 0:da0fdf120892 | 69 | // Control Program |
| kenjiArai | 0:da0fdf120892 | 70 | //------------------------------------------------------------------------------ |
| kenjiArai | 0:da0fdf120892 | 71 | int main() |
| kenjiArai | 0:da0fdf120892 | 72 | { |
| kenjiArai | 0:da0fdf120892 | 73 | int status = VL53L0X_ERROR_NONE; |
| kenjiArai | 0:da0fdf120892 | 74 | uint32_t data; |
| kenjiArai | 0:da0fdf120892 | 75 | uint32_t count = 0; |
| kenjiArai | 0:da0fdf120892 | 76 | uint32_t tm_sensor; |
| kenjiArai | 0:da0fdf120892 | 77 | uint32_t tm_all_work; |
| kenjiArai | 0:da0fdf120892 | 78 | |
| kenjiArai | 0:da0fdf120892 | 79 | #if USE_LCD |
| kenjiArai | 0:da0fdf120892 | 80 | lcd.locate(0, 0); |
| kenjiArai | 0:da0fdf120892 | 81 | // 12345678 |
| kenjiArai | 0:da0fdf120892 | 82 | lcd.puts("12345678"); |
| kenjiArai | 0:da0fdf120892 | 83 | lcd.locate(0, 1); |
| kenjiArai | 0:da0fdf120892 | 84 | // 12345678 |
| kenjiArai | 0:da0fdf120892 | 85 | lcd.puts(" JH1PJL "); |
| kenjiArai | 0:da0fdf120892 | 86 | lcd.setCursor(TextLCD_Base::CurOff_BlkOff); |
| kenjiArai | 0:da0fdf120892 | 87 | lcd.setContrast(0x19); |
| kenjiArai | 0:da0fdf120892 | 88 | wait(2.0f); |
| kenjiArai | 0:da0fdf120892 | 89 | #endif |
| kenjiArai | 1:45891160ccab | 90 | status = sensor.init_sensor(0x33); // set new I2C address |
| kenjiArai | 1:45891160ccab | 91 | if (status == VL53L0X_ERROR_NONE) { |
| kenjiArai | 1:45891160ccab | 92 | pc.printf(msg0); |
| kenjiArai | 1:45891160ccab | 93 | } else { |
| kenjiArai | 1:45891160ccab | 94 | pc.printf(msg1); |
| kenjiArai | 1:45891160ccab | 95 | } |
| kenjiArai | 0:da0fdf120892 | 96 | status = sensor.set_mode(range_long_distance_33ms_200cm); |
| kenjiArai | 0:da0fdf120892 | 97 | //status = sensor.set_mode(range_hi_accurate_200ms_120cm); |
| kenjiArai | 0:da0fdf120892 | 98 | //status = sensor.set_mode(range_hi_speed_20ms_120cm); |
| kenjiArai | 0:da0fdf120892 | 99 | if (status == VL53L0X_ERROR_NONE) { |
| kenjiArai | 0:da0fdf120892 | 100 | pc.printf(msg0); |
| kenjiArai | 0:da0fdf120892 | 101 | } else { |
| kenjiArai | 0:da0fdf120892 | 102 | pc.printf(msg1); |
| kenjiArai | 0:da0fdf120892 | 103 | } |
| kenjiArai | 0:da0fdf120892 | 104 | while(true) { |
| kenjiArai | 0:da0fdf120892 | 105 | t.reset(); |
| kenjiArai | 0:da0fdf120892 | 106 | t.start(); |
| kenjiArai | 0:da0fdf120892 | 107 | //myled = !myled; |
| kenjiArai | 0:da0fdf120892 | 108 | status = sensor.get_distance(&data); |
| kenjiArai | 0:da0fdf120892 | 109 | tm_sensor = t.read_ms(); |
| kenjiArai | 0:da0fdf120892 | 110 | if (status == VL53L0X_ERROR_NONE) { |
| kenjiArai | 0:da0fdf120892 | 111 | pc.printf("%s%5d,%s%5d,", msg2, count++, msg3, data); |
| kenjiArai | 0:da0fdf120892 | 112 | } else { |
| kenjiArai | 0:da0fdf120892 | 113 | pc.printf("%s%5d,%s", msg2, count++, msg4); |
| kenjiArai | 0:da0fdf120892 | 114 | } |
| kenjiArai | 0:da0fdf120892 | 115 | #if USE_LCD |
| kenjiArai | 0:da0fdf120892 | 116 | if ((count % 4) == 0){ |
| kenjiArai | 0:da0fdf120892 | 117 | lcd.locate(0, 0); |
| kenjiArai | 0:da0fdf120892 | 118 | lcd.printf(" %5d ", data); |
| kenjiArai | 0:da0fdf120892 | 119 | lcd.locate(0, 1); |
| kenjiArai | 0:da0fdf120892 | 120 | lcd.printf(" %5d ", count); |
| kenjiArai | 0:da0fdf120892 | 121 | } |
| kenjiArai | 0:da0fdf120892 | 122 | #endif |
| kenjiArai | 0:da0fdf120892 | 123 | pc.printf("%s%d,%s%d\r\n", msg5, tm_sensor, msg6, tm_all_work); |
| kenjiArai | 0:da0fdf120892 | 124 | tm_all_work = t.read_ms(); |
| kenjiArai | 0:da0fdf120892 | 125 | if (tm_all_work < 99){ |
| kenjiArai | 0:da0fdf120892 | 126 | wait_ms(100 - tm_all_work); |
| kenjiArai | 0:da0fdf120892 | 127 | } |
| kenjiArai | 0:da0fdf120892 | 128 | } |
| kenjiArai | 0:da0fdf120892 | 129 | } |