check program for VL53L0X_simple library

Dependencies:   VL53L0X_simple TextLCD

Please refer below page.
/users/kenjiArai/notebook/vl53l0x-tof-sensor/

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?

UserRevisionLine numberNew 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 }