added I2C control function (Original program cannot handle I2C constructor)
Dependencies: TextLCD X_NUCLEO_53L0A1
Fork of HelloWorld_53L0A1 by
main.cpp@13:5a59de800135, 2018-02-06 (annotated)
- 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?
User | Revision | Line number | New 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 | } |