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()