It is supposed to work

Dependencies:   mbed ros_lib_kinetic

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);