from machine import Pin, SoftI2C
from ssd1306 import SSD1306_I2C
from time import sleep_us, sleep, ticks_us
trig =Pin(27,Pin.OUT)
echo =Pin(26,Pin.IN)
I2C = SoftI2C(scl=Pin(33),sda=Pin(25))
ds = Pin(16, Pin.OUT)
latch = Pin(17, Pin.OUT)
shift = Pin(5, Pin.OUT)
dic=[0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF]
def bar(dis):
for i in range(8):
val=dis&1
ds.value(val)
shift.on()
shift.off()
dis=dis>>1
latch.on()
latch.off()
while True:
distance=0
trig.value(1)
sleep_us(10)
trig.value(0)
while echo.value()==0:
pass
if echo.value()==1:
ts=ticks_us()
while echo.value()==1:
pass
te=ticks_us()
tc=te -ts
distance=(tc*170)/10000
oled = SSD1306_I2C(128, 64, I2C, addr=0x3c)
text=str(round(distance,1))+' CM'
oled.text(text,35,28)
oled.show()
sleep_us(1)
cell=int(distance/50)
sleep(2)
bar(dic[cell])
print(dic[cell])