test description

Dependencies:   C12832 Sht31 vl53l0x_api

Fork of mbed-cloud-connect-sensor-laser-distance by Andrea Corrado

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "C12832.h"
00003 #include "vl53l0x_api.h"
00004 #include "vl53l0x_platform.h"
00005 #include "vl53l0x_i2c_platform.h"
00006 
00007 #define USE_I2C_2V8
00008 //change 1
00009 /* Sets up LCD and prints sensor data value of Indoor Air Quality sensor to LCD */
00010 C12832 lcd(PE_14, PE_12, PD_12, PD_11, PE_9); //LCD: MOSI, SCK, RESET, A0, nCS
00011 
00012 VL53L0X_Error WaitMeasurementDataReady(VL53L0X_DEV Dev) {
00013     VL53L0X_Error Status = VL53L0X_ERROR_NONE;
00014     uint8_t NewDatReady=0;
00015     uint32_t LoopNb;
00016     
00017     if (Status == VL53L0X_ERROR_NONE) {
00018         LoopNb = 0;
00019         do {
00020             Status = VL53L0X_GetMeasurementDataReady(Dev, &NewDatReady);
00021             if ((NewDatReady == 0x01) || Status != VL53L0X_ERROR_NONE) {
00022                 break;
00023             }
00024             LoopNb = LoopNb + 1;
00025             VL53L0X_PollingDelay(Dev);
00026         } while (LoopNb < VL53L0X_DEFAULT_MAX_LOOP);
00027 
00028         if (LoopNb >= VL53L0X_DEFAULT_MAX_LOOP) {
00029             Status = VL53L0X_ERROR_TIME_OUT;
00030         }
00031     }
00032 
00033     return Status;
00034 }
00035 
00036 VL53L0X_Error WaitStopCompleted(VL53L0X_DEV Dev) {
00037     VL53L0X_Error Status = VL53L0X_ERROR_NONE;
00038     uint32_t StopCompleted=0;
00039     uint32_t LoopNb;
00040 
00041     if (Status == VL53L0X_ERROR_NONE) {
00042         LoopNb = 0;
00043         do {
00044             Status = VL53L0X_GetStopCompletedStatus(Dev, &StopCompleted);
00045             if ((StopCompleted == 0x00) || Status != VL53L0X_ERROR_NONE) {
00046                 break;
00047             }
00048             LoopNb = LoopNb + 1;
00049             VL53L0X_PollingDelay(Dev);
00050         } while (LoopNb < VL53L0X_DEFAULT_MAX_LOOP);
00051 
00052         if (LoopNb >= VL53L0X_DEFAULT_MAX_LOOP) {
00053             Status = VL53L0X_ERROR_TIME_OUT;
00054         }
00055 
00056     }
00057 
00058     return Status;
00059 }
00060 
00061 int main()
00062 {
00063     lcd.cls();
00064     
00065     //Setup laser
00066     int var=1, measure=0;
00067     int ave=0, sum=0;
00068     VL53L0X_Dev_t MyDevice;
00069     VL53L0X_Dev_t *pMyDevice = &MyDevice;
00070     VL53L0X_RangingMeasurementData_t    RangingMeasurementData;
00071     VL53L0X_RangingMeasurementData_t   *pRangingMeasurementData    = &RangingMeasurementData;
00072     
00073     // Initialize Comms laster
00074     pMyDevice->I2cDevAddr      = 0x52;
00075     pMyDevice->comms_type      =  1;
00076     pMyDevice->comms_speed_khz =  400;
00077     
00078     
00079     VL53L0X_RdWord(&MyDevice, VL53L0X_REG_OSC_CALIBRATE_VAL,0);
00080     VL53L0X_DataInit(&MyDevice); 
00081     uint32_t refSpadCount;
00082     uint8_t isApertureSpads;
00083     uint8_t VhvSettings;
00084     uint8_t PhaseCal;
00085     
00086     VL53L0X_StaticInit(pMyDevice); 
00087     VL53L0X_PerformRefSpadManagement(pMyDevice, &refSpadCount, &isApertureSpads); // Device Initialization
00088     VL53L0X_PerformRefCalibration(pMyDevice, &VhvSettings, &PhaseCal); // Device Initialization
00089     VL53L0X_SetDeviceMode(pMyDevice, VL53L0X_DEVICEMODE_CONTINUOUS_RANGING); // Setup in single ranging mode
00090     VL53L0X_SetLimitCheckValue(pMyDevice, VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE, (FixPoint1616_t)(0.25*65536)); //High Accuracy mode, see API PDF
00091     VL53L0X_SetLimitCheckValue(pMyDevice, VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, (FixPoint1616_t)(18*65536)); //High Accuracy mode, see API PDF
00092     VL53L0X_SetMeasurementTimingBudgetMicroSeconds(pMyDevice, 200000); //High Accuracy mode, see API PDF
00093     VL53L0X_StartMeasurement(pMyDevice);
00094     
00095     while(1) {
00096         lcd.cls();
00097         lcd.locate(0,3);
00098         lcd.printf("[DISTANCE]");
00099             while(var<=10){
00100                 WaitMeasurementDataReady(pMyDevice);
00101                 VL53L0X_GetRangingMeasurementData(pMyDevice, pRangingMeasurementData);
00102                 measure=pRangingMeasurementData->RangeMilliMeter;
00103                 sum=sum+measure;
00104                 VL53L0X_ClearInterruptMask(pMyDevice, VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_NEW_SAMPLE_READY);
00105                 VL53L0X_PollingDelay(pMyDevice);
00106                 var++;
00107                 }
00108         ave=sum/var;
00109         var=1;
00110         sum=0; 
00111         lcd.locate(0,15);
00112         lcd.printf("%dmm", ave); // Print to LCD values
00113         wait_ms(500);
00114     }
00115 }