Pablo Henrique
/
STM32F103C8T6_VL53l0x_CAN
code for read VL53l0x sensor with CAN
Diff: STM32F103C8T6_MPA/main.cpp
- Revision:
- 1:7bbfe329c62b
- Parent:
- 0:44429c0a71d4
--- a/STM32F103C8T6_MPA/main.cpp Mon Mar 18 22:36:03 2019 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,130 +0,0 @@ -#include "stm32f103c8t6.h" -#include "mbed.h" -/* - * Mbed Application program - * Time-of-Flight ranging and gesture detection sensor / STMicro VL53L0X - * http://www.st.com/ja/imaging-and-photonics-solutions/vl53l0x.html - * - * 1) AKIZUKI AE-VL53L0X - * http://akizukidenshi.com/catalog/g/gM-12590/ - * 2) SWITCH SCIENCE Pololu VL53L0X (POLOLU-2490) - * https://www.switch-science.com/catalog/2869/ - * 3) SWITCH SCIENCE VL53L0X (SSCI-028943) - * https://www.switch-science.com/catalog/2894/ - * 4) Strawberry Linux - * https://strawberry-linux.com/catalog/items?code=15310 - * - * ---- Tested AE-VL53L0X BOARD and handmade circuit ---- - * Tested on below Mbed boards and works fine on mbed 2.0 - * Nucleo-F303K8 - * Nucleo-F334R8, -F401RE, -F411RE, -F446RE - * Nucleo-L053R8, -L073RZ, -L152RE, -L476RG - * FRDM-K64F - * TY51822r3 - * Run also on mbed-os5 (Tested on Nucleo-F446RE) - * - * Copyright (c) 2018 Kenji Arai / JH1PJL - * http://www.page.sannet.ne.jp/kenjia/index.html - * http://mbed.org/users/kenjiArai/ - * Created: January 21st, 2018 - * Revised: Feburary 6th, 2018 (with updated VL53L0X_simple library) - */ - -// Include -------------------------------------------------------------------- -#include "VL53L0X.h" - -// Definition ----------------------------------------------------------------- -#define USE_XSHUT 1 - -// Constructor ---------------------------------------------------------------- -DigitalOut myled(PA_5); -DigitalOut CAN_STB(PA_4); - -CAN can1(PA_11, PA_12); - -Serial pc(USBTX, USBRX, 9600); -//I2C i2c(P0_30, P0_7); // only for TY51822r3 -I2C i2c(PB_9, PB_8); //placa hensys -//I2C i2c(PB_11, PB_10); //bluepill - -#if USE_XSHUT -VL53L0X sensor(i2c, PA_8); // XSHUT = D8 -#else -VL53L0X sensor(i2c, NC); // XSHUT = NC -#endif -Timer t; - -// RAM ------------------------------------------------------------------------ - -// ROM / Constant data -------------------------------------------------------- -char *const msg0 = "VL53L0X is running correctly!!\r\n"; -char *const msg1 = "VL53L0X -> something is wrong!!\r\n"; -char *const msg2 = "#,"; -char *const msg3 = "d[mm]=,"; -char *const msg4 = "d[mm]=,error,"; -char *const msg5 = "VL53[mS]=, "; -char *const msg6 = "all[mS]=, "; - -// Function prototypes -------------------------------------------------------- - -//------------------------------------------------------------------------------ -// Control Program -//------------------------------------------------------------------------------ -int main() -{ - char bosta = 1; - can1.frequency(500000); - CAN_STB = 0; - int status = VL53L0X_ERROR_NONE; - uint32_t data; - uint32_t count = 0; - uint32_t tm_sensor; - uint32_t tm_all_work; - -#if USE_XSHUT - status = sensor.init_sensor(0x53); // set new I2C address -#else - // no control XSHUT then set default address (no other way) - status = sensor.init_sensor(VL53L0X_DEFAULT_ADDRESS); -#endif - if (status == VL53L0X_ERROR_NONE) { - pc.printf(msg0); - } else { - pc.printf(msg1); - } - //status = sensor.set_mode(range_long_distance_33ms_200cm); - //status = sensor.set_mode(range_hi_accurate_200ms_120cm); - status = sensor.set_mode(range_hi_speed_20ms_120cm); - if (status == VL53L0X_ERROR_NONE) { - pc.printf(msg0); - } else { - pc.printf(msg1); - } - while(true) { - //can1.write(CANMessage(1337,&bosta,1)); - //wait(0.2); - t.reset(); - t.start(); - pc.printf("olar"); - //myled = !myled; - status = sensor.get_distance(&data); - tm_sensor = t.read_ms(); - if (status == VL53L0X_ERROR_NONE) { - pc.printf("%s%5d,%s%5d,", msg2, count++, msg3, data); - if(data >= 300){ - myled = 1; - can1.write(CANMessage(1337,&bosta,1)); - wait(0.2); - } - else { - myled = 0;} - } else { - pc.printf("%s%5d,%s", msg2, count++, msg4); - } - pc.printf("%s%d,%s%d\r\n", msg5, tm_sensor, msg6, tm_all_work); - tm_all_work = t.read_ms(); - if (tm_all_work < 99){ - wait_ms(100 - tm_all_work); - } - } -}