It is supposed to work
Dependencies: mbed ros_lib_kinetic
Diff: main.cpp
- Revision:
- 6:8832bc658845
- Parent:
- 5:4a24d8597fc3
- Child:
- 7:c5017af4c555
--- a/main.cpp Thu Oct 17 10:05:27 2019 +0000 +++ b/main.cpp Thu Oct 17 11:37:04 2019 +0000 @@ -10,13 +10,22 @@ DigitalOut SHDN_1(PC_9); DigitalOut SHDN_2(PC_11); DigitalOut SHDN_3(PD_2); +DigitalOut SHDN_4(PG_3); // set-up serial to pc I2C i2c(I2C_SDA, I2C_SCL); // Set up I²C on the STM32 NUCLEO-401RE -#define addr1 (0x52) -#define addr2 (0x60) +#define addr1 (0x29) +#define addr2 (0x2A) +#define addr3 (0x2B) + +//Macro for addresses +#define ADDR1 (addr1 << 1) +#define ADDR2 (addr2 << 2) + + + // I²C address of VL6180 shifted by 1 bit //(0x29 << 1) so the R/W command can be added @@ -154,10 +163,17 @@ /////////////////////////////////////////////////////////////////// // Main Program loop /////////////////////////////////////////////////////////////////// -int main() { +int main() { + SHDN_1 = 0; + SHDN_3 = 0; + SHDN_2 = 0; + SHDN_4 = 0; + wait_ms(0.5); - SHDN_3 =1; - SHDN_2 =1; + SHDN_1 = 1; + SHDN_3 =0; + SHDN_2 =0; + SHDN_4 = 0; // ros::NodeHandle nh; // nh.initNode(); // @@ -170,34 +186,43 @@ // nh.advertise(range2_pub); int range1; - int range2; + int range2; + int range3; - SHDN_1 = 0; + - //change default address of sensor 2 - WriteByte(0x212, 0x30, addr1); - - SHDN_1 = 1; - + //change default address of sensor 4 + VL6180_Init(addr1<<1); + WriteByte(0x212, addr2, addr1<<1); + SHDN_2 = 1; + VL6180_Init(addr1<<1); + WriteByte(0x212, addr3, addr1<<1); + SHDN_3 = 1; //SHDN_1 = 1; // load settings onto VL6180X - VL6180_Init(addr1); + //VL6180_Init(addr1<<1); //SHDN_1 = 0; - VL6180_Init(addr2); + //VL6180_Init(addr2<<1); + VL6180_Init(addr3<<1); while (1) { // start range measurement // poll the VL6180 till new sample ready - VL6180_Start_Range(addr1); - VL6180_Poll_Range(addr1); - range1 = VL6180_Read_Range(addr1); + VL6180_Start_Range(addr1<<1); + VL6180_Poll_Range(addr1<<1); + range1 = VL6180_Read_Range(addr1<<1); // read range result - VL6180_Start_Range(addr2); - VL6180_Poll_Range(addr2); - range2 = VL6180_Read_Range(addr2); + VL6180_Start_Range(addr2<<1); + VL6180_Poll_Range(addr2<<1); + range2 = VL6180_Read_Range(addr2<<1); + + VL6180_Start_Range(addr3<<1); + VL6180_Poll_Range(addr3<<1); + range3 = VL6180_Read_Range(addr3<<1); + // clear the interrupt on VL6180 VL6180_Clear_Interrupts(); // send range to pc by serial @@ -207,7 +232,8 @@ // range1_pub.publish(&int_sensor1_msg); // range2_pub.publish(&int_sensor2_msg); // nh.spinOnce(); - pc.printf("Range one =%d and range two = %d\r\n ",range1, range2); + pc.printf("Range one = %d | range two = %d | range three = %d\r\n ",range1, range2, range3); + //pc.printf("lfajfl\r\n"); //pc.printf("Range one = %d\r\n ",range1); wait(0.1);