Trial program, to test 3 sensors together, in polling / autonomous mode.

Dependencies:   X_NUCLEO_53L1A2

Files at this revision

API Documentation at this revision

Comitter:
johnAlexander
Date:
Fri Jun 18 10:23:52 2021 +0000
Parent:
11:818b711eb4ae
Commit message:
Initial release, using VL53L1 sensor class.

Changed in this revision

X_NUCLEO_53L1A2.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/X_NUCLEO_53L1A2.lib	Fri Jun 11 17:20:34 2021 +0100
+++ b/X_NUCLEO_53L1A2.lib	Fri Jun 18 10:23:52 2021 +0000
@@ -1,1 +1,1 @@
-https://os.mbed.com/teams/ST-Expansion-SW-Team/code/X_NUCLEO_53L1A2/#3e19c89acda7
+https://os.mbed.com/teams/ST-Expansion-SW-Team/code/X_NUCLEO_53L1A2/#57998dc85ed4
--- a/main.cpp	Fri Jun 11 17:20:34 2021 +0100
+++ b/main.cpp	Fri Jun 18 10:23:52 2021 +0000
@@ -69,9 +69,15 @@
 
 
 VL53L1_Dev_t devCentre;
-VL53L1_DEV Dev = &devCentre;
+VL53L1_DEV DevC = &devCentre;
+
+VL53L1_Dev_t devLeft;
+VL53L1_DEV DevL = &devLeft;
 
-VL53L1CB *Sensor;
+VL53L1_Dev_t devRight;
+VL53L1_DEV DevR = &devRight;
+
+VL53L1 *Sensor;
 
 
 
@@ -91,30 +97,55 @@
 {
     int status = 0;
 
-    Dev=&devCentre;
-    Sensor=board->sensor_centre;
+    DevC=&devCentre;
+    DevC->comms_speed_khz = 400;
+    DevC->comms_type = 1;
+    DevC->i2c_slave_address = NEW_SENSOR_CENTRE_ADDRESS;
+    devCentre.i2c_slave_address = NEW_SENSOR_CENTRE_ADDRESS;
+//    Sensor=board->sensor_centre;
 
+    DevL=&devLeft;
+//    Sensor=board->sensor_left;
     // configure the sensors
-    Dev->comms_speed_khz = 400;
-    Dev->comms_type = 1;
-    Dev->i2c_slave_address = NEW_SENSOR_CENTRE_ADDRESS;
+    DevL->comms_speed_khz = 400;
+    DevL->comms_type = 1;
+    DevL->i2c_slave_address = NEW_SENSOR_LEFT_ADDRESS;
+    devLeft.i2c_slave_address = NEW_SENSOR_LEFT_ADDRESS;
 
-    printf("configuring centre channel \n");
+    DevR=&devLeft;
+    // configure the sensors
+    DevR->comms_speed_khz = 400;
+    DevR->comms_type = 1;
+    DevR->i2c_slave_address = NEW_SENSOR_RIGHT_ADDRESS;
+    devRight.i2c_slave_address = NEW_SENSOR_RIGHT_ADDRESS;
 
-    /* Device Initialization and setting */
-    status = Sensor->VL53L1CB_DataInit();
-    status = Sensor->VL53L1CB_StaticInit();
-
-    status = Sensor->VL53L1CB_SetPresetMode(VL53L1_PRESETMODE_AUTONOMOUS);
-    status = Sensor->VL53L1CB_SetDistanceMode(VL53L1_DISTANCEMODE_LONG);
+    for (int i = 0; i < 3; i++)
+    {
+        if (i == 0) { Sensor=board->sensor_centre;  }
+        if (i == 1) { Sensor=board->sensor_left;  }    
+        if (i == 2) { Sensor=board->sensor_right;  }    
+        
+        if (Sensor != NULL)
+        {
+            if (i == 0) {  printf("configuring centre channel \n"); }
+            if (i == 1) {  printf("configuring left channel \n"); }    
+            if (i == 2) {  printf("configuring right channel \n"); }    
+            
+            /* Device Initialization and setting */
+            status = Sensor->vl53L1_DataInit();
+            status = Sensor->vl53L1_StaticInit();
 
-    status = Sensor->VL53L1CB_SetInterMeasurementPeriodMilliSeconds(500);
+            status = Sensor->vl53L1_SetPresetMode(VL53L1_PRESETMODE_AUTONOMOUS);
+            status = Sensor->vl53L1_SetDistanceMode(VL53L1_DISTANCEMODE_LONG);
 
-    status = Sensor->VL53L1CB_SetMeasurementTimingBudgetMicroSeconds(45000);
+            status = Sensor->vl53L1_SetInterMeasurementPeriodMilliSeconds(500);
 
-    status = Sensor->VL53L1CB_SetSequenceStepEnable(VL53L1_SEQUENCESTEP_MM1, 0);
-    status = Sensor->VL53L1CB_SetSequenceStepEnable(VL53L1_SEQUENCESTEP_MM2, 0);
+            status = Sensor->vl53L1_SetMeasurementTimingBudgetMicroSeconds(45000);
 
+            status = Sensor->vl53L1_SetSequenceStepEnable(VL53L1_SEQUENCESTEP_MM1, 0);
+            status = Sensor->vl53L1_SetSequenceStepEnable(VL53L1_SEQUENCESTEP_MM2, 0);
+        }
+    }    
 
     // create interrupt handler and start measurements
     if (board->sensor_centre!= NULL) {
@@ -123,11 +154,38 @@
             return status;
         }
 
-        status = Sensor->VL53L1CB_StartMeasurement();
+        status = board->sensor_centre->vl53L1_StartMeasurement();
         if (status != 0) {
             return status;
         }
     }
+    
+    // create interrupt handler and start measurements
+    if (board->sensor_left!= NULL) {
+        status = board->sensor_left->stop_measurement();
+        if (status != 0) {
+            return status;
+        }
+
+        status = board->sensor_left->vl53L1_StartMeasurement();
+        if (status != 0) {
+            return status;
+        }
+    }
+    
+    // create interrupt handler and start measurements
+    if (board->sensor_right!= NULL) {
+        status = board->sensor_right->stop_measurement();
+        if (status != 0) {
+            return status;
+        }
+
+        status = board->sensor_right->vl53L1_StartMeasurement();
+        if (status != 0) {
+            return status;
+        }
+    }
+    
     return status;
 }
 
@@ -178,16 +236,39 @@
     while (true) {
         pMultiRangingData = &MultiRangingData;
 
-        status = board->sensor_centre->VL53L1CB_WaitMeasurementDataReady();
-//        if (int_sensor) {
-//            int_sensor = false;
-        status = board->sensor_centre->VL53L1CB_GetMultiRangingData( pMultiRangingData);
-
-        print_results( devCentre.i2c_slave_address, pMultiRangingData );
-
-        status = board->sensor_centre->VL53L1CB_ClearInterrupt();
-//                board->sensor_centre->enable_interrupt_measure_detection_irq();
-//        }
+        if (board->sensor_centre!= NULL) {
+            printf("Range result from Centre sensor\n");
+            status = board->sensor_centre->vl53L1_WaitMeasurementDataReady();
+    
+            status = board->sensor_centre->vl53L1_GetMultiRangingData( pMultiRangingData);
+    
+            print_results( devCentre.i2c_slave_address, pMultiRangingData );
+    
+            status = board->sensor_centre->VL53L1_ClearInterrupt();
+        }
+    
+        if (board->sensor_left!= NULL) {
+            printf("Range result from Left Satellite\n");
+            status = board->sensor_left->vl53L1_WaitMeasurementDataReady();
+    
+            status = board->sensor_left->vl53L1_GetMultiRangingData( pMultiRangingData);
+    
+            print_results( devLeft.i2c_slave_address, pMultiRangingData );
+    
+            status = board->sensor_left->VL53L1_ClearInterrupt();
+        }
+    
+        // create interrupt handler and start measurements
+        if (board->sensor_right!= NULL) {
+            printf("Range result from Right Satellite\n");
+            status = board->sensor_right->vl53L1_WaitMeasurementDataReady();
+    
+            status = board->sensor_right->vl53L1_GetMultiRangingData( pMultiRangingData);
+    
+            print_results( devRight.i2c_slave_address, pMultiRangingData );
+    
+            status = board->sensor_right->VL53L1_ClearInterrupt();
+        }    
     }
 
     printf("Terminating.\n");
@@ -202,9 +283,12 @@
     int ambient_rate = 0;
 
     int RoiNumber = pMultiRangingData->RoiNumber;
+    
+    printf("no_of_object_found : %d\n", no_of_object_found);
 
     if (( no_of_object_found < 10 ) &&  ( no_of_object_found != 0)) {
         for(int j=0; j<no_of_object_found; j++) {
+            printf("RangeStatus : %d\n", pMultiRangingData->RangeData[j].RangeStatus);
             if ((pMultiRangingData->RangeData[j].RangeStatus == VL53L1_RANGESTATUS_RANGE_VALID) ||
                     (pMultiRangingData->RangeData[j].RangeStatus == VL53L1_RANGESTATUS_RANGE_VALID_NO_WRAP_CHECK_FAIL)) {
                 signal_rate = pMultiRangingData->RangeData[j].SignalRateRtnMegaCps / 65535;