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

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