int VL53L0X_read_multi(uint8_t deviceAddress, uint8_t index, uint8_t *pdata, uint32_t count) {
Wire.beginTransmission(deviceAddress);
Wire.write(index);
Wire.endTransmission();
Wire.requestFrom(deviceAddress, (byte)count);
#ifdef I2C_DEBUG
Serial.print("\tReading "); Serial.print(count); Serial.print(" from addr 0x"); Serial.print(index, HEX); Serial.print(": ");
#endif
while (count--) {
pdata[0] = Wire.read();
#ifdef I2C_DEBUG
Serial.print("0x"); Serial.print(pdata[0], HEX); Serial.print(", ");
#endif
pdata++;
}
#ifdef I2C_DEBUG
Serial.println();
#endif
return VL53L0X_ERROR_NONE;
}
Želimo li naučiti kako bilioteka poziva I
2C funkcije, pogledajmo datoteku "vl53l0x_i2c_comms.spp".
Namjena ove funkcije je upisati na sabirnicu jednu adresu (virtualni registri lidara) i nakon toga pročitati sa sabirnice niz bajtova koji se vrate.
Prve 3 funkcije rezultiraju pisanjem u ciljnu jedinicu:
- Wire.beginTransmission() započinje prijenos,
- Wire.write() šalje 1 bajt,
- Wire.endTransmission je kraj poruke.
Sljedeće 2 čitaju sa sabirnice:
- Wire.RequestFrom() traži od ciljne jedinice slanje danog broja bajtova,
- Wire.read() čita bajt po bajt.