from machine import Pin, I2C
import utime
from lcd_api import LcdApi
from pico_i2c_lcd import I2cLcd
from ssd1306 import SSD1306_I2C
# Constants for the LCD
I2C_ADDR = 0x27
LCD_ROWS = 2
LCD_COLS = 16
# Initialize ultrasonic sensor pins
trigger = Pin(7, Pin.OUT)
echo = Pin(6, Pin.IN)
# Initialize I2C for LCD
i2c_lcd = I2C(0, scl=Pin(5), sda=Pin(4), freq=400000)
lcd = I2cLcd(i2c_lcd, I2C_ADDR, LCD_ROWS, LCD_COLS)
# Initialize I2C for OLED
i2c_oled = I2C(1, scl=Pin(15), sda=Pin(14))
oled = SSD1306_I2C(128, 64, i2c_oled)
# Global variable to store distance
distance = 0
def ultrasound():
global distance
trigger.low()
utime.sleep_us(2)
trigger.high()
utime.sleep_us(5)
trigger.low()
while echo.value() == 0:
signaloff = utime.ticks_us()
while echo.value() == 1:
signalon = utime.ticks_us()
timepassed = signalon - signaloff
distance = (timepassed * 0.0343) / 2
while True:
ultrasound()
print("The distance from object is ", distance, "cm")
# Update LCD display
lcd.clear()
lcd.putstr("Distance: {:.2f} cm".format(distance))
# Update OLED display
oled.fill(0)
oled.text("Distance:", 0, 0)
oled.text("{:.2f} cm".format(distance), 0, 10)
oled.show()
utime.sleep(1)