test description
Dependencies: C12832 Sht31 vl53l0x_api
Fork of mbed-cloud-connect-sensor-laser-distance by
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 }
Generated on Mon Jul 18 2022 17:09:52 by 1.7.2