def draw_progressbar(screen, value): screen = oled.oleds[screen] screen.fill_rect(0, 32, 128, 8, 0) if value: value = int(map_value(value, 0, 100, 0, 128)) screen.fill_rect(0, 48, 128, 16, 0) screen.fill_rect(0, 48, value, 16, 1) screen.show()
def slider_handler(pin_number, state, value): print("Slider {}: {} {}".format(pin_number, state, value)) screen = None if pin_number == 12: screen = aiko.oled.oleds[0] if pin_number == 14: screen = aiko.oled.oleds[1] if screen: screen.fill_rect(0, 32, 128, 8, 0) text = "Slider: {} {}".format(state, value) screen.text(text, 0, 32) if value: value = int(map_value(value, 0, 100, 0, 128)) screen.fill_rect(0, 48, 128, 16, 0) screen.fill_rect(0, 48, value, 16, 1) screen.show()
def slider_handler(number, state, value): if value: menu_item = menu_items - int( map_value(value, 0, 100, 0, menu_items - 1)) - 1 menu_item_highlight(menu_item)
def button_handler(): # software timer event handler # microPython doesn't support TouchPad interrupts :( for touch_button in touch_buttons: if touch_button.value(use_cache=False): if not touch_button.get_state(): irq_state = disable_irq() pins_active.append(touch_button.driver) enable_irq(irq_state) irq_state = disable_irq() local_pins_active = [pin for pin in pins_active] enable_irq(irq_state) for pin in local_pins_active: button = buttons[pins.index(pin)] if button.value(): call = button.continuous or not button.get_state() if button.safe and len(local_pins_active) != 1: call = False button.set_state(True) if call: button.call_handlers() else: # button no longer active irq_state = disable_irq() pins_active.remove(pin) enable_irq(irq_state) button.set_state(False) button.call_handlers() pin_numbers_active = None for multibutton_handler in multibutton_handlers: if not pin_numbers_active: pin_numbers_active = pin_numbers_sorted(pins_active) pin_numbers_active.sort() handler = multibutton_handler[HANDLER] pin_numbers_multibutton = multibutton_handler[PIN_NUMBERS] hold_time = multibutton_handler[HOLD_TIME] if pin_numbers_active == pin_numbers_multibutton: if handler in multibutton_press_time: time_held = time.ticks_ms() - multibutton_press_time[handler] if time_held >= hold_time: button = buttons[pin_numbers.index( pin_numbers_multibutton[0])] if not button.multibutton_state: button.multibutton_state = True handler(pin_numbers_multibutton) else: multibutton_press_time[handler] = time.ticks_ms() else: if handler in multibutton_press_time: del multibutton_press_time[handler] button = buttons[pin_numbers.index(pin_numbers_multibutton[0])] button.multibutton_state = False for slider_handler in slider_handlers: lower_value = slider_handler[LOWER_BUTTON].value(digital=False) upper_value = slider_handler[UPPER_BUTTON].value(digital=False) handler = slider_handler[HANDLER] pin_number = slider_handler[LOWER_BUTTON].pin_number slider_state = slider_handler[LOWER_BUTTON].slider_state if lower_value < TOUCH_THRESHOLD or upper_value < TOUCH_THRESHOLD: value = int(map_value(lower_value - upper_value, -180, 180, 0, 100)) handler(pin_number, slider_state, value) if slider_state == 0: slider_handler[LOWER_BUTTON].slider_state = 1 elif slider_state == 1: handler(pin_number, 2, None) slider_handler[LOWER_BUTTON].slider_state = 0