from machine import Pin, I2C, ADC, PWM
import ssd1306
import onewire, ds18x20
from time import sleep
import random
sleep(0.1) # Wait for USB to become ready
# DISPLAY
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# MENU
menu = ["Smart Light", "Temp Monitor", "Pot Meter", "Dice Game"]
cursor = 0
last_nav = 1
last_sel = 1
# POTENTIOMETER + LED
adc = ADC(26)
led = PWM(Pin(14))
led.freq(1000)
# BUTTONS
btn_nav = Pin(11, Pin.IN)
btn_sel = Pin(12, Pin.IN)
# DS18B20 setup
ds_pin = Pin(15)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
roms = ds_sensor.scan()
def draw_menu():
oled.fill(0)
oled.text("Smart Menu", 20, 0 ,1)
oled.hline(10, 10, 108, 1)
for i, item in enumerate(menu):
y = 14 + i * 12
if i == cursor:
oled.fill_rect(0, y-1, 128, 11, 1)
oled.text("> "+item, 2, y, 0)
else:
oled.text(" "+item, 2, y, 1)
oled.show()
def smart_light():
while btn_nav.value() == 1:
raw = adc.read_u16()
led.duty_u16(raw)
brightness = int(raw / 65535 * 100)
oled.fill(0)
oled.rect(0, 0, 128, 64, 1)
oled.text("Smart Light", 18, 2, 1)
oled.hline(10, 20,108, 1)
oled.text("Brightness:", 10, 28, 1)
oled.text(str(brightness) + " %", 35, 44, 1)
oled.show()
led.duty_u16(0)
def temp_sensor():
while btn_nav.value() == 1:
ds_sensor.convert_temp()
sleep(1)
for rom in roms:
temp = ds_sensor.read_temp(rom)
oled.fill(0)
if temp < 25:
oled.text("COLD", 35, 44, 1)
elif temp >=25 and temp <=35:
oled.text("Normal", 28, 44, 1)
else:
oled.text("HOT ALERT!", 15, 44, 1)
oled.rect(0, 0, 128, 64, 1)
oled.text("Temp Monitor", 18, 2, 1)
oled.hline(10, 15,108, 1)
oled.text("Temperature:", 0, 22, 1)
oled.text(str(temp) + " C", 35, 34, 1)
oled.show()
def pot_meter():
while btn_nav.value() == 1:
raw = adc.read_u16()
led.duty_u16(raw)
voltage = raw * 3.3 / 65535
oled.fill(0)
oled.rect(0, 0, 128, 64, 1)
oled.text("Pot Meter", 18, 2, 1)
oled.hline(10, 10, 88, 1)
oled.text("Raw: " + str(raw), 10, 28, 1)
oled.text("Volt: " + str(voltage) + "V", 10, 44, 1)
oled.show()
def dice_game():
num = random.randint(1,6)
oled.fill(0)
oled.rect(0, 0, 128, 64, 1)
oled.text("Dice Game", 18, 2, 1)
oled.text("Press SEL", 18, 28, 1)
oled.text("to roll!", 25, 44, 1)
oled.show()
while btn_nav.value() == 1:
if btn_sel.value() == 0:
oled.fill(0)
oled.rect(0, 0, 128, 64, 1)
oled.text("Dice Game", 18, 2, 1)
oled.hline(10, 18, 108, 1)
oled.text("Rolling...", 18, 28, 1)
oled.text(str(num), 57, 44, 1)
oled.show()
sleep(0.01)
draw_menu()
while True:
nav = btn_nav.value()
sel = btn_sel.value()
# navigate
if last_nav == 1 and nav == 0:
sleep(0.05)
cursor = (cursor + 1) % len(menu)
draw_menu()
#select
if last_sel == 1 and sel == 0:
if cursor == 0:
smart_light()
elif cursor == 1:
temp_sensor()
elif cursor == 2:
pot_meter()
elif cursor == 3:
dice_game()
sleep(0.05)
draw_menu()
last_nav = nav
last_sel = sel
sleep(0.01)Loading
pi-pico-w
pi-pico-w