Select Git revision
-
Damien George authored
TODO: should go in a more port-neutral place, like drivers/dht, but at the moment in relies on specific esp module.
Damien George authoredTODO: should go in a more port-neutral place, like drivers/dht, but at the moment in relies on specific esp module.
main.py 4.07 KiB
from machine import Pin
from hardware import *
import time
import cap_touch_demo
import melodic_demo
boot = Pin(0, Pin.IN)
vol_up = Pin(35, Pin.IN, Pin.PULL_UP)
vol_down = Pin(37, Pin.IN, Pin.PULL_UP)
foreground = 0
volume = 0
select = [\
[0,1,1,0,0,1,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,0,1],\
[1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1],\
[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1],\
[0,1,1,0,0,1,1,1,1,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1],\
[0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1],\
[1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0],\
[0,1,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1],\
]
background = 0
g = 0b0000011111100000
r = 0b1111100000000000
b = 0b0000000000011111
# pin numbers
# right side: left 37, down 0, right 35
# left side: left 7, down 6, right 5
# NOTE: All except for 0 should be initialized with Pin.PULL_UP
# 0 (bootsel) probably not but idk? never tried
def clear_all_leds():
for i in range(40):
set_led_rgb(i, 0, 0, 0)
update_leds()
def draw_text_big(text, x, y):
ypos = 120+int(len(text)/2) + int(y)
xpos = 120+int(len(text[0])/2) + int(x)
for l, line in enumerate(text):
for p, pixel in enumerate(line):
if(pixel == 1):
display_draw_pixel(xpos - 2*p, ypos - 2*l, r)
display_draw_pixel(xpos - 2*p, ypos - 2*l-1, b)
display_draw_pixel(xpos - 2*p-1, ypos - 2*l, b)
display_draw_pixel(xpos - 2*p-1, ypos - 2*l-1, r)
def highlight_bottom_petal(num, r, g, b):
start = 4 + 8*num
for i in range(7):
set_led_rgb(((i+start)%40), r, g, b)
update_leds()
def long_bottom_petal_captouch_blocking(num, ms):
if(get_captouch((num*2) + 1) == 1):
time.sleep_ms(ms)
if(get_captouch((num*2) + 1) == 1):
return True
return False
def draw_rect(x,y,w,h,col):
for j in range(w):
for k in range(h):
display_draw_pixel(x+j,y+k,col)
def draw_volume_slider():
global volume
length = 96 + ((volume - 20) * 1.6)
if length > 96:
length = 96
if length < 0:
length = 0
length = int(length)
draw_rect(70,20,100,10,g)
draw_rect(71,21,98,8, 0)
draw_rect(72+96-length,22,length,6,g)
def run_menu():
global foreground
display_fill(background)
draw_text_big(select, 0, 0)
draw_volume_slider()
display_update()
if long_bottom_petal_captouch_blocking(0,20):
clear_all_leds()
highlight_bottom_petal(0,55,0,0)
display_fill(background)
display_update()
foreground = cap_touch_demo.run
time.sleep_ms(100)
clear_all_leds()
cap_touch_demo.foreground()
if long_bottom_petal_captouch_blocking(1,20):
clear_all_leds()
highlight_bottom_petal(1,55,0,0)
display_fill(background)
display_update()
foreground = melodic_demo.run
time.sleep_ms(100)
clear_all_leds()
melodic_demo.foreground()
def foreground_menu():
clear_all_leds()
highlight_bottom_petal(0,0,55,55);
highlight_bottom_petal(1,55,0,55);
display_fill(background)
draw_text_big(select, 0, 0)
display_update()
def set_rel_volume(vol):
global volume
vol += volume
if vol > 20:
vol = 20
if vol < -40:
vol = -40
volume = vol
if vol == -40: #mute
set_global_volume_dB(-90)
else:
set_global_volume_dB(volume)
time.sleep_ms(100)
def main():
global foreground
time.sleep_ms(5000)
captouch_autocalib()
cap_touch_demo.init()
melodic_demo.init()
foreground = run_menu
foreground_menu()
set_global_volume_dB(volume)
while True:
if(boot.value() == 0):
if foreground == run_menu:
captouch_autocalib()
else:
foreground = run_menu
foreground_menu()
if(vol_up.value() == 0):
set_rel_volume(+3)
if(vol_down.value() == 0):
set_rel_volume(-3)
foreground()
main()