#include #include VL53L1X sensor; // === ESP32-C3 Super Mini I2C pins === #define I2C_SDA 8 #define I2C_SCL 9 // (Optional) If you wired XSHUT to a pin, put that pin here and uncomment: // #define VL53_XSHUT_PIN 2 void setup() { Serial.begin(115200); delay(1000); // give USB time to enumerate // If using XSHUT pin, bring sensor out of reset #ifdef VL53_XSHUT_PIN pinMode(VL53_XSHUT_PIN, OUTPUT); digitalWrite(VL53_XSHUT_PIN, HIGH); delay(10); #endif Wire.begin(I2C_SDA, I2C_SCL); Wire.setClock(400000); // Fast-mode I2C sensor.setTimeout(500); Serial.println("Initializing VL53L1X..."); if (!sensor.init()) { Serial.println("ERROR: VL53L1X not found at 0x29. Check power/I2C/XSHUT."); while (1) { delay(10); } } // Basic configuration (tweak as you like) sensor.setDistanceMode(VL53L1X::Short); // Short | Medium | Long sensor.setMeasurementTimingBudget(50000); // µs (longer = more accurate) sensor.startContinuous(100); // ms between measurements Serial.println("VL53L1X initialized. Printing distance (mm)..."); } void loop() { sensor.read(); // updates sensor.ranging_data if (sensor.timeoutOccurred()) { Serial.println("Timeout reading VL53L1X"); return; } uint16_t mm = sensor.ranging_data.range_mm; uint8_t status = sensor.ranging_data.range_status; // 0 = valid if (status == 0) { Serial.print("Distance: "); Serial.print(mm); Serial.println(" mm"); } else { // Common nonzero statuses are out-of-range or too much ambient light Serial.print("Invalid reading (status "); Serial.print(status); Serial.println(")."); } // No extra delay needed; startContinuous(100) paces the measurements. }