import board
import busio
import adafruit_vl53l0x
from Adafruit_SSD1306 import SSD1306_128_64
import time
import subprocess
def initialize_components():
i2c = busio.I2C(board.SCL, board.SDA)
vl53 = adafruit_vl53l0x.VL53L0X(i2c)
disp = SSD1306_128_64(rst=None)
disp.begin()
disp.clear()
disp.display()
disp.set_contrast(10)
return vl53, disp
def reinitialize_sensor():
time.sleep(0.1)
i2c = busio.I2C(board.SCL, board.SDA)
vl53 = adafruit_vl53l0x.VL53L0X(i2c)
return vl53
def display_distance_and_warning(vl53, disp):
prev_distance = None
while True:
distance = vl53.range
print(f"Distance: {distance} mm")
if distance != prev_distance:
disp.clear()
if distance < 100:
disp.text("Warning: Too Close!", 0, 0, 1)
elif distance > 2000:
disp.text("Warning: Too Far!", 0, 0, 1)
else:
disp.text(f"Distance: {distance} mm", 0, 0, 1)
disp.display()
prev_distance = distance
time.sleep(1)
def main():
vl53, disp = initialize_components()
try:
display_distance_and_warning(vl53, disp)
except Exception as e:
print("Sensor error: ", e)
vl53 = reinitialize_sensor()
display_distance_and_warning(vl53, disp)
if __name__ == "__main__":
main()