#匯入類別庫及函式庫
from machine import Pin, I2C, PWM
import machine
import time
import ssd1306
# 定義函式:超音波感測距離
def distance(trigPin=None, echoPin=None):
echoTimeout = 23200
trigPin.value(0)
if trigPin!=None and echoPin!=None:
trigPin.value(1)
time.sleep_us(10)
trigPin.value(0)
pulseTime = machine.time_pulse_us(echoPin, 1, echoTimeout)
if pulseTime > 0:
return pulseTime / 58 # cm
else:
return pulseTime
else:
return 0
#定義函式:蜂鳴器發出聲音
def beep(p, f=1, d=100, t=0.5):
p.init() # 初始化PWM
p.freq(f) # 設定頻率
p.duty(d) # 設定佔空比
time.sleep(t) # 持續發聲時間
p.deinit() # 停止發聲
#------------------------
# 設定OLED
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
oled.text('Hello,Wokwi', 10, 10)
oled.show()
# 設定PWM
pwm = PWM(Pin(15),duty=0)
# song
beep(pwm, f=392, d=10, t=0.2)
time.sleep(0.1)
beep(pwm, f=300, d=10, t=0.4)
time.sleep(0.1)
beep(pwm, f=300, d=10, t=0.4)
time.sleep(0.1)
beep(pwm, f=349, d=10, t=0.2)
time.sleep(0.1)
beep(pwm, f=294, d=10, t=0.2)
time.sleep(0.1)
beep(pwm, f=294, d=10, t=0.4)
time.sleep(0.1)
while True:
cnt=cnt+1
d=distance(trigPin=Pin(27,mode=Pin.OUT),echoPin=Pin(13,mode=Pin.IN))
s='{}cm'.format(int(d))
print(s)
oled.fill(0)
oled.text(s, 10, 10)
oled.show()
if d<50:
beep(pwm, f=988, d=10, t=0.1)
time.sleep(0.1)
elif d<100:
beep(pwm, f=988, d=10, t=0.5)
time.sleep(0.5)