#deep sleep with alarm (button_d press) with magtag

1 messages · Page 1 of 1 (latest)

inner apex
onyx mountain
#

@inner apex You can use magtag.periphrials.deinit() to free the button pins (and other resources that it grabs) before setting up the pin alarm. Here is an example modified from the magtag library simpletest that seems to work:

import time
from adafruit_magtag.magtag import MagTag
import alarm
import board

IDLE_TIMEOUT = 10  # seconds idle, then sleep

magtag = MagTag()

magtag.add_text(
    text_position=(
        50,
        (magtag.graphics.display.height // 2) - 1,
    ),
    text_scale=3,
)

magtag.set_text("Awake")

button_colors = ((255, 0, 0), (255, 150, 0), (0, 255, 255), (180, 0, 255))
button_tones = (1047, 1318, 1568, 2093)

now = time.monotonic()
last_action_time = now
while True:
    now = time.monotonic()
    if now - last_action_time >= 10.0:

        magtag.set_text("Sleeping")
        magtag.peripherals.deinit()
        time.sleep(2)
        # go to sleep
        pin_alarm = alarm.pin.PinAlarm(pin=board.D11, value=False, pull=True)

        # Exit the program, and then deep sleep until the alarm wakes us.
        alarm.exit_and_deep_sleep_until_alarms(pin_alarm)

    for i, b in enumerate(magtag.peripherals.buttons):
        if not b.value:
            print("Button %c pressed" % chr((ord("A") + i)))
            last_action_time = now
            magtag.peripherals.neopixel_disable = False
            magtag.peripherals.neopixels.fill(button_colors[i])
            magtag.peripherals.play_tone(button_tones[i], 0.25)
            break
    else:
        magtag.peripherals.neopixel_disable = True
    time.sleep(0.01)
inner apex
#

@onyx mountain that finally works, thank you very much! magtag.peripherals.deinit() helped to get the code run!

#

this issue also has this solution, but i did not find that ticket before 😦 thanks again!