def system_features_menu(): oled.oleds_system_use(True) aiko.button.add_slider_handler(slider_handler, 12, 15) oled.set_system_title(save=True) oled.oleds_clear(write=False) menu_show() menu_item_select(0) oled.oleds_system_use(False)
def initialise(): global schedule, menu schedule = configuration.schedule.settings oled.oleds_clear(oled.BG) event.add_timer_handler(titlebar, 5000) prefix = configuration.schedule.settings['topicprefix'] for topic in configuration.schedule.settings['topics']: mqtt.add_message_handler(on_schedule_message, prefix + topic)
def run(period=50): oled.oleds_clear(0) new_eyes() display_eyes() event.add_timer_handler(timer_handler, period) try: event.loop() finally: event.remove_timer_handler(timer_handler)
def run(period=50): oled.title = "Snake 0.0" oled.oleds_clear(0) snake_new() display_snake() event.add_timer_handler(timer_handler, period) try: event.loop() finally: event.remove_timer_handler(timer_handler)
def system_features_handler(pin_numbers): global system_ui_active system_ui_active = not system_ui_active if system_ui_active: system_features_menu() aiko.button.add_touch_handler(button_handler, [14, 27]) oled.oleds_enable(False) else: aiko.button.remove_handler(button_handler) aiko.button.remove_handler(slider_handler) oled.oleds_enable(True) oled.set_system_title(restore=True) oled.oleds_clear()
def on_shake_ui(): # Disable System UI if that's what called me... otherwise we can't use nice things if aiko.system_ui.system_ui_active: print("[Shake] Called from System UI - disabling") aiko.system_ui.system_features_handler(1) # Clear the screen and draw the title oled.oleds_clear() oled.oleds_text(" Slide Left To Shake! ", 0, 14, 1) # The title takes a second to raster onto the second screen, to a little sleep_ms here for UI experience :) sleep_ms(250) # Register our slider handler aiko.button.add_slider_handler(on_shake_slider, 12, 15)
def system_features_handler(pin_numbers): global system_ui_active system_ui_active = not system_ui_active if system_ui_active: aiko.button.add_slider_handler(slider_handler, 12, 15) oled.set_system_title(save=True) oled.oleds_clear(write=False) menu_show() menu_item_highlight(0) oled.oleds_enable(False) else: aiko.button.remove_handler(slider_handler) oled.oleds_enable(True) oled.set_system_title(restore=True) oled.oleds_clear()
def on_shake_slider(pin_number, state, value): global shake_lastSliderVal, shake_SOURCE, shake_TARGET # Update the UI strength bar draw_progressbar(0, value) # If we're still dragging (state == 1), record latest value if state == 1: shake_lastSliderVal = value # Once finger has been released (state == 2), use the last value for sending the trigger message, then # show a little UI animation while resetting the stored value for the next use :) if state == 2 and shake_lastSliderVal > 0: # Send the MQTT trigger (shake) message print("MQTT Send {}: (shake {} {})".format(shake_TARGET, shake_lastSliderVal * 100, shake_SOURCE)) aiko.mqtt.client.publish( shake_TARGET, "(shake {} {})".format(shake_lastSliderVal * 30, shake_SOURCE)) # ... also display a little UI animation for fun oled.oleds_clear() oled.oleds_text( " Sending Shake! {}% POWER!".format(shake_lastSliderVal), 0, 14, 1) shake_lastSliderVal = 0 # (... oh, and don't forget to reset the slider value store) aiko.button.remove_handler( on_shake_slider) # and unregister our slider control! for screen in range(0, 2): for x in range(0, 20): draw_progressbar(screen, x * 5) sleep_ms(20) oled.oleds_text(" HANDSHAKE COMPLETE", 0, 32, 1) # Clear display after 8s to prevent messy overwriting sleep_ms(8000) oled.oleds_clear()
def run(): oled.oleds_clear(0) aiko.event.add_timer_handler(status_handler, 500, immediate=True)