check program for VL53L0X_simple library

Dependencies:   VL53L0X_simple TextLCD

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

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?

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