import machine
from machine import Pin, PWM, I2C
from lcd_api import LcdApi
from i2c_lcd import I2cLcd
#from ssd1306 import SSD1306_I2C
import ssd1306
import time
# Set up OLED display (yellow)
i2c = I2C(-1, scl=Pin(22), sda=Pin(21))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# Set up Ultrasonic Sensor (pink)
trig = Pin(14, Pin.OUT)
echo = Pin(27, Pin.IN)
# Set up Servo Motor (grey)
servo = PWM(Pin(12), freq=50)
# Set up Buzzer (brown)
buzzer = Pin(4, Pin.OUT)
# Set up LEDs (white)
led = Pin(18, Pin.OUT)
# Set up PIR Motion Sensor (dark blue)
pir = Pin(5, Pin.IN)
# Define function to display number on seven-segment display
def display_num(num):
if num == 0:
A.on()
B.on()
C.on()
D.on()
E.on()
F.on()
G.off()
elif num == 1:
A.off()
B.on()
C.on()
D.off()
E.off()
F.off()
G.off()
elif num == 2:
A.on()
B.on()
C.off()
D.on()
E.on()
F.off()
G.on()
elif num == 3:
A.on()
B.on()
C.on()
D.on()
E.off()
F.off()
G.on()
elif num == 4:
A.off()
B.on()
C.on()
D.off()
E.off()
F.on()
G.on()
elif num == 5:
A.on()
B.off()
C.on()
D.on()
E.off()
F.on()
G.on()
elif num == 6:
A.on()
B.off()
C.on()
D.on()
E.on()
F.on()
G.on()
elif num == 7:
A.on()
B.on()
C.on()
D.off()
E.off()
F.off()
G.off()
elif num == 8:
A.on()
B.on()
C.on()
D.on()
E.on()
F.on()
G.on()
elif num == 9:
A.on()
B.on()
C.on()
D.on()
E.off()
F.on()
G.on()
while True:
# Read distance from ultrasonic sensor
trig.off()
time.sleep_us(2)
trig.on()
time.sleep_us(10)
trig.off()
'''
while echo.value() == 0:
pass
'''
x=machine.time_pulse_us(echo, 1)
distance=0.0343*x/2
# Turn on LEDs based on distance
if distance > 30:
led2.off()
led3.off()
elif distance > 20:
led1.on()
led2.off()
led3.off()
led4.off()
elif distance > 10:
led1.on()
led2.on()
led3.off()
led4.off()
else:
led1.on()
led2.on()
led3.on()
led4.off()
# Check PIR motion sensor
if pir.value() == 1:
buzzer.on()
time.sleep(1)
buzzer.off()
# Move servo motor based on distance
if distance < 30:
angle = int(distance / 2)
if angle > 180:
angle = 180
servo.duty(angle)
else:
servo.duty(0)