Fix interrupt and waiting
badVibes-- opened this issue · 1 comments
Sorry, I don't yet know hot to make a pull request but i thought this might be useful to others.
In the cpp file init method change line 239 to:
writeReg(GPIO_HV_MUX_ACTIVE_HIGH, readReg(GPIO_HV_MUX_ACTIVE_HIGH) & 0xEF);
this will make the GPIO pin go low when a measurement is done.
I would also add this two methods (maybe you have a better name for the second one) which splits the continuous read in two parts.
bool VL53L0X::dataAvailable(void)
{
if((readReg(RESULT_INTERRUPT_STATUS) & 0x07) == 0)
return false;
else return true;
}
uint16_t VL53L0X::readRangeDataContinuous(void)
{
uint16_t range = readReg16Bit(RESULT_RANGE_STATUS + 10);
writeReg(SYSTEM_INTERRUPT_CLEAR, 0x01);
return range;
}
You can use it like so:
if(sensor.dataAvailable())
{
Serial.println(sensor.readRangeDataContinuous());
}
Reading the sensor like this is leaves much more time for other stuff. Checking for data takes about 120 us and reading takes 230us on a tennsy 3.2. The original way takes around 20 ms. Using the interrupt pin makes checking even faster:). I measured this with the Wire clock at 400000.
Well, I learned how to make a pull request and did it...