from machine import Pin, PWM, I2C
from ssd1306 import SSD1306_I2C
import time
# 引脚定义
BUTTON = Pin(14, Pin.IN, Pin.PULL_UP)
RED = Pin(2, Pin.OUT)
BLUE = Pin(4, Pin.OUT)
BUZZER = PWM(Pin(15))
SERVO = PWM(Pin(13), freq=50)
# OLED初始化(带容错)
oled_ok = False
try:
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000)
oled = SSD1306_I2C(128, 64, i2c, addr=0x3C)
oled_ok = True
except Exception as e:
print("OLED 初始化失败:", e)
press_count = 0
last_btn = True
def servo_angle(angle):
duty = int(40 + (angle / 180) * 75)
SERVO.duty(duty)
time.sleep_ms(200)
def reset():
RED.value(0)
BLUE.value(0)
BUZZER.duty(0)
servo_angle(0)
if oled_ok:
oled.fill(0)
oled.text("Waiting...", 30, 25)
oled.show()
reset()
while True:
pressed = BUTTON.value() == 0
if pressed and not last_btn:
press_count += 1
print("按下次数:", press_count)
if press_count == 1:
RED.value(1)
BLUE.value(0)
BUZZER.freq(1000)
BUZZER.duty(512)
if oled_ok:
oled.fill(0)
oled.text("hello", 40, 25)
oled.show()
elif press_count == 2:
RED.value(0)
BLUE.value(1)
BUZZER.duty(0)
servo_angle(90)
if oled_ok:
oled.fill(0)
oled.text("welcome", 25, 25)
oled.show()
elif press_count == 3:
reset()
press_count = 0
last_btn = pressed
time.sleep_ms(20)