added I2C control function (Original program cannot handle I2C constructor)

Dependencies:   TextLCD X_NUCLEO_53L0A1

Fork of HelloWorld_53L0A1 by ST

Committer:
kenjiArai
Date:
Tue Feb 06 10:14:16 2018 +0000
Revision:
13:5a59de800135
Parent:
10:891e10d3b4a6
added I2C control function (original program cannot handle I2C ?onstructor)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 13:5a59de800135 1 //------- Feburary 6th, 2018 by JH1PJL / K.Arai --------------------------------
kenjiArai 13:5a59de800135 2 // Tested on Nucleo-F446RE and my handmade VL53L0X board
kenjiArai 13:5a59de800135 3 // https://os.mbed.com/users/kenjiArai/notebook/vl53l0x-tof-sensor/
kenjiArai 13:5a59de800135 4 #error "You will have real error when you try this sample program!!"
kenjiArai 13:5a59de800135 5 // If you use I2C class constractor you may have an error.
kenjiArai 13:5a59de800135 6 // You need to modify as follows.
kenjiArai 13:5a59de800135 7 // 1) line 4 of this file -> delete or comment out
kenjiArai 13:5a59de800135 8 // 2) /HelloWorld_53L0A1_with_I2C_device/X_NUCLEO_53L0A1/
kenjiArai 13:5a59de800135 9 // Components/VL53L0X/VL53L0X_i2c_platform.h
kenjiArai 13:5a59de800135 10 // line 55 #define I2C 0x01 -> delete or comment out
kenjiArai 13:5a59de800135 11 // line 56 #define SPI 0x00 -> delete or comment out
kenjiArai 13:5a59de800135 12 #define ADDED
kenjiArai 13:5a59de800135 13 //------------------------------------------------------------------------------
kenjiArai 13:5a59de800135 14
johnAlexander 0:ce8359133ae6 15 #include "mbed.h"
kenjiArai 13:5a59de800135 16 #ifndef ADDED
Davidroid 10:891e10d3b4a6 17 #include "XNucleo53L0A1.h"
kenjiArai 13:5a59de800135 18 #else
kenjiArai 13:5a59de800135 19 #include "VL53L0X.h"
kenjiArai 13:5a59de800135 20 #include "TextLCD.h"
kenjiArai 13:5a59de800135 21 #endif
johnAlexander 0:ce8359133ae6 22 #include <stdio.h>
johnAlexander 0:ce8359133ae6 23
johnAlexander 1:3483e701ec59 24 /* This VL53L0X Expansion board test application performs a range measurement in polling mode
johnAlexander 4:c8932fb926d6 25 on the onboard embedded top sensor. */
johnAlexander 0:ce8359133ae6 26
johnAlexander 0:ce8359133ae6 27 #define VL53L0_I2C_SDA D14
kenjiArai 13:5a59de800135 28 #define VL53L0_I2C_SCL D15
johnAlexander 0:ce8359133ae6 29
kenjiArai 13:5a59de800135 30 #ifndef ADDED
Davidroid 10:891e10d3b4a6 31 static XNucleo53L0A1 *board=NULL;
kenjiArai 13:5a59de800135 32 #else
kenjiArai 13:5a59de800135 33 static VL53L0X *board=NULL;
kenjiArai 13:5a59de800135 34 DigitalOut xshut(D10); // connection for XSHUT is MUST!!
kenjiArai 13:5a59de800135 35 I2C i2c(I2C_SDA, I2C_SCL);
kenjiArai 13:5a59de800135 36 TextLCD_I2C_N lcd(&i2c, 0x7c, TextLCD::LCD8x2); // LCD(Akizuki AQM0802A)
kenjiArai 13:5a59de800135 37 #endif
johnAlexander 0:ce8359133ae6 38
johnAlexander 0:ce8359133ae6 39 /*=================================== Main ==================================
johnAlexander 0:ce8359133ae6 40 =============================================================================*/
johnAlexander 0:ce8359133ae6 41 int main()
johnAlexander 0:ce8359133ae6 42 {
johnAlexander 4:c8932fb926d6 43 int status;
johnAlexander 4:c8932fb926d6 44 uint32_t distance;
johnAlexander 3:b3f70617a6b3 45
kenjiArai 13:5a59de800135 46 #ifdef ADDED
kenjiArai 13:5a59de800135 47 lcd.locate(0, 0);
kenjiArai 13:5a59de800135 48 // 12345678
kenjiArai 13:5a59de800135 49 lcd.puts("12345678");
kenjiArai 13:5a59de800135 50 lcd.locate(0, 1);
kenjiArai 13:5a59de800135 51 // 12345678
kenjiArai 13:5a59de800135 52 lcd.puts(" JH1PJL ");
kenjiArai 13:5a59de800135 53 lcd.setCursor(TextLCD_Base::CurOff_BlkOff);
kenjiArai 13:5a59de800135 54 lcd.setContrast(0x19);
kenjiArai 13:5a59de800135 55 wait(1.0f);
kenjiArai 13:5a59de800135 56 #endif
kenjiArai 13:5a59de800135 57
johnAlexander 7:c8087e7333b8 58 DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL);
johnAlexander 9:9733cfdb0a18 59
johnAlexander 7:c8087e7333b8 60 /* creates the 53L0A1 expansion board singleton obj */
kenjiArai 13:5a59de800135 61 #ifndef ADDED
Davidroid 10:891e10d3b4a6 62 board = XNucleo53L0A1::instance(device_i2c, A2, D8, D2);
kenjiArai 13:5a59de800135 63 #else
kenjiArai 13:5a59de800135 64 //--- xshut is mandantory (if xshut=NC then not run the program)
kenjiArai 13:5a59de800135 65 board = new VL53L0X(device_i2c, &xshut, NC);
kenjiArai 13:5a59de800135 66 #endif
kenjiArai 13:5a59de800135 67 #ifndef ADDED
johnAlexander 7:c8087e7333b8 68 /* init the 53L0A1 expansion board with default values */
johnAlexander 7:c8087e7333b8 69 status = board->init_board();
kenjiArai 13:5a59de800135 70 #else
kenjiArai 13:5a59de800135 71 status = board->init_sensor(0x33 << 1U);
kenjiArai 13:5a59de800135 72 #endif
johnAlexander 9:9733cfdb0a18 73 if (status) {
Davidroid 10:891e10d3b4a6 74 printf("Failed to init board!\r\n");
johnAlexander 7:c8087e7333b8 75 return 0;
johnAlexander 7:c8087e7333b8 76 }
johnAlexander 9:9733cfdb0a18 77 while (1) {
kenjiArai 13:5a59de800135 78 #ifndef ADDED
johnAlexander 7:c8087e7333b8 79 status = board->sensor_centre->get_distance(&distance);
kenjiArai 13:5a59de800135 80 #else
kenjiArai 13:5a59de800135 81 status = board->get_distance(&distance);
kenjiArai 13:5a59de800135 82 #endif
johnAlexander 9:9733cfdb0a18 83 if (status == VL53L0X_ERROR_NONE) {
Davidroid 10:891e10d3b4a6 84 printf("Distance : %ld\r\n", distance);
johnAlexander 7:c8087e7333b8 85 }
kenjiArai 13:5a59de800135 86 #ifdef ADDED
kenjiArai 13:5a59de800135 87 lcd.locate(0, 0);
kenjiArai 13:5a59de800135 88 // 12345678
kenjiArai 13:5a59de800135 89 lcd.printf("Dist.:mm");
kenjiArai 13:5a59de800135 90 lcd.locate(0, 1);
kenjiArai 13:5a59de800135 91 lcd.printf(" %5d ", distance);
kenjiArai 13:5a59de800135 92 #endif
johnAlexander 4:c8932fb926d6 93 }
johnAlexander 0:ce8359133ae6 94 }