diff --git a/Adafruit_Metro_RP2040/Capacitive_Touch/One_Pin/code.py b/Adafruit_Metro_RP2040/Capacitive_Touch/One_Pin/code.py new file mode 100644 index 000000000..5415f0bbc --- /dev/null +++ b/Adafruit_Metro_RP2040/Capacitive_Touch/One_Pin/code.py @@ -0,0 +1,15 @@ +# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries +# SPDX-License-Identifier: MIT +""" +CircuitPython Capacitive Touch Pin Example - Print to the serial console when one pin is touched. +""" +import time +import board +import touchio + +touch = touchio.TouchIn(board.A1) + +while True: + if touch.value: + print("Pin touched!") + time.sleep(0.1) diff --git a/Adafruit_Metro_RP2040/Capacitive_Touch/Two_Pins/code.py b/Adafruit_Metro_RP2040/Capacitive_Touch/Two_Pins/code.py new file mode 100644 index 000000000..397c3635c --- /dev/null +++ b/Adafruit_Metro_RP2040/Capacitive_Touch/Two_Pins/code.py @@ -0,0 +1,18 @@ +# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries +# SPDX-License-Identifier: MIT +""" +CircuitPython Capacitive Two Touch Pin Example - Print to the serial console when a pin is touched. +""" +import time +import board +import touchio + +touch_one = touchio.TouchIn(board.A1) +touch_two = touchio.TouchIn(board.A2) + +while True: + if touch_one.value: + print("Pin one touched!") + if touch_two.value: + print("Pin two touched!") + time.sleep(0.1) diff --git a/Adafruit_Metro_RP2040/Digital_Input/code.py b/Adafruit_Metro_RP2040/Digital_Input/code.py new file mode 100644 index 000000000..46548f90f --- /dev/null +++ b/Adafruit_Metro_RP2040/Digital_Input/code.py @@ -0,0 +1,19 @@ +# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries +# SPDX-License-Identifier: MIT +""" +CircuitPython Digital Input Example - Blinking an LED using a button switch. +""" +import board +import digitalio + +led = digitalio.DigitalInOut(board.LED) +led.direction = digitalio.Direction.OUTPUT + +button = digitalio.DigitalInOut(board.A1) +button.switch_to_input(pull=digitalio.Pull.UP) + +while True: + if not button.value: + led.value = True + else: + led.value = False diff --git a/Adafruit_Metro_RP2040/I2S/Tone/code.py b/Adafruit_Metro_RP2040/I2S/Tone/code.py new file mode 100644 index 000000000..55527b22b --- /dev/null +++ b/Adafruit_Metro_RP2040/I2S/Tone/code.py @@ -0,0 +1,29 @@ +# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries +# SPDX-License-Identifier: MIT +""" +CircuitPython I2S Tone playback example. +Plays a tone for one second on, one +second off, in a loop. +""" +import time +import array +import math +import audiocore +import board +import audiobusio + +audio = audiobusio.I2SOut(board.A0, board.A1, board.A2) + +tone_volume = 0.1 # Increase this to increase the volume of the tone. +frequency = 440 # Set this to the Hz of the tone you want to generate. +length = 8000 // frequency +sine_wave = array.array("h", [0] * length) +for i in range(length): + sine_wave[i] = int((math.sin(math.pi * 2 * i / length)) * tone_volume * (2 ** 15 - 1)) +sine_wave_sample = audiocore.RawSample(sine_wave) + +while True: + audio.play(sine_wave_sample, loop=True) + time.sleep(1) + audio.stop() + time.sleep(1) diff --git a/Adafruit_Metro_RP2040/I2S/WAV/StreetChicken.wav b/Adafruit_Metro_RP2040/I2S/WAV/StreetChicken.wav new file mode 100755 index 000000000..55d4eb0f2 Binary files /dev/null and b/Adafruit_Metro_RP2040/I2S/WAV/StreetChicken.wav differ diff --git a/Adafruit_Metro_RP2040/I2S/WAV/code.py b/Adafruit_Metro_RP2040/I2S/WAV/code.py new file mode 100644 index 000000000..9a8e429ea --- /dev/null +++ b/Adafruit_Metro_RP2040/I2S/WAV/code.py @@ -0,0 +1,21 @@ +# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries +# SPDX-License-Identifier: MIT +""" +CircuitPython I2S WAV file playback. +Plays a WAV file once. +""" +import audiocore +import board +import audiobusio + +audio = audiobusio.I2SOut(board.A0, board.A1, board.A2) + +with open("StreetChicken.wav", "rb") as wave_file: + wav = audiocore.WaveFile(wave_file) + + print("Playing wav file!") + audio.play(wav) + while audio.playing: + pass + +print("Done!") diff --git a/Adafruit_Metro_RP2040/PWM_Audio/Tone/code.py b/Adafruit_Metro_RP2040/PWM_Audio/Tone/code.py new file mode 100644 index 000000000..2f8d309f2 --- /dev/null +++ b/Adafruit_Metro_RP2040/PWM_Audio/Tone/code.py @@ -0,0 +1,32 @@ +# SPDX-FileCopyrightText: 2018 Kattni Rembor for Adafruit Industries +# +# SPDX-License-Identifier: MIT + +""" +CircuitPython PWM Audio Out tone example +Plays a tone for one second on, one +second off, in a loop. +""" +import time +import array +import math +import board +from audiocore import RawSample +from audiopwmio import PWMAudioOut as AudioOut + +audio = AudioOut(board.A0) + +tone_volume = 0.1 # Increase this to increase the volume of the tone. +frequency = 440 # Set this to the Hz of the tone you want to generate. +length = 8000 // frequency +sine_wave = array.array("H", [0] * length) +for i in range(length): + sine_wave[i] = int((1 + math.sin(math.pi * 2 * i / length)) * tone_volume * (2 ** 15 - 1)) + +sine_wave_sample = RawSample(sine_wave) + +while True: + audio.play(sine_wave_sample, loop=True) + time.sleep(1) + audio.stop() + time.sleep(1) diff --git a/Adafruit_Metro_RP2040/PWM_Audio/WAV/StreetChicken.wav b/Adafruit_Metro_RP2040/PWM_Audio/WAV/StreetChicken.wav new file mode 100755 index 000000000..55d4eb0f2 Binary files /dev/null and b/Adafruit_Metro_RP2040/PWM_Audio/WAV/StreetChicken.wav differ diff --git a/Adafruit_Metro_RP2040/PWM_Audio/WAV/code.py b/Adafruit_Metro_RP2040/PWM_Audio/WAV/code.py new file mode 100644 index 000000000..f714ac868 --- /dev/null +++ b/Adafruit_Metro_RP2040/PWM_Audio/WAV/code.py @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: 2018 Kattni Rembor for Adafruit Industries +# +# SPDX-License-Identifier: MIT + +""" +CircuitPython PWM Audio Out WAV example +Play a WAV file once. +""" +import board +from audiocore import WaveFile +from audiopwmio import PWMAudioOut as AudioOut + +audio = AudioOut(board.A0) + +with open("StreetChicken.wav", "rb") as wave_file: + wave = WaveFile(wave_file) + print("Playing wav file!") + audio.play(wave) + while audio.playing: + pass + +print("Done!") diff --git a/Adafruit_Metro_RP2040/Storage/boot.py b/Adafruit_Metro_RP2040/Storage/boot.py new file mode 100644 index 000000000..48c2f3495 --- /dev/null +++ b/Adafruit_Metro_RP2040/Storage/boot.py @@ -0,0 +1,14 @@ +# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries +# SPDX-License-Identifier: MIT +""" +CircuitPython Essentials Storage CP Filesystem boot.py file +""" +import board +import digitalio +import storage + +pin = digitalio.DigitalInOut(board.A0) +pin.switch_to_input(pull=digitalio.Pull.UP) + +# If the pin is connected to ground, the filesystem is writable by CircuitPython +storage.remount("/", readonly=pin.value) diff --git a/Adafruit_Metro_RP2040/Storage/code.py b/Adafruit_Metro_RP2040/Storage/code.py new file mode 100644 index 000000000..9f9a8f5be --- /dev/null +++ b/Adafruit_Metro_RP2040/Storage/code.py @@ -0,0 +1,39 @@ +# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries +# SPDX-License-Identifier: MIT +""" +CircuitPython Essentials Storage CP Filesystem code.py file + +For use with boards with a built-in red LED. +""" +import time +import board +import digitalio +import microcontroller + +led = digitalio.DigitalInOut(board.LED) +led.switch_to_output() + +try: + with open("/temperature.txt", "a") as temp_log: + while True: + # The microcontroller temperature in Celsius. Include the + # math to do the C to F conversion here, if desired. + temperature = microcontroller.cpu.temperature + + # Write the temperature to the temperature.txt file every 10 seconds. + temp_log.write('{0:.2f}\n'.format(temperature)) + temp_log.flush() + + # Blink the LED on every write... + led.value = True + time.sleep(1) # ...for one second. + led.value = False # Then turn it off... + time.sleep(9) # ...for the other 9 seconds. + +except OSError as e: # When the filesystem is NOT writable by CircuitPython... + delay = 0.5 # ...blink the LED every half second. + if e.args[0] == 28: # If the file system is full... + delay = 0.15 # ...blink the LED every 0.15 seconds! + while True: + led.value = not led.value + time.sleep(delay) diff --git a/Adafruit_Metro_RP2040/asyncio/code.py b/Adafruit_Metro_RP2040/asyncio/code.py new file mode 100644 index 000000000..c240e6335 --- /dev/null +++ b/Adafruit_Metro_RP2040/asyncio/code.py @@ -0,0 +1,80 @@ +# SPDX-FileCopyrightText: Copyright (c) 2022 Dan Halbert for Adafruit Industries +# SPDX-FileCopyrightText: Copyright (c) 2022 Kattni Rembor for Adafruit Industries +# +# SPDX-License-Identifier: MIT +""" +CircuitPython asyncio example for two NeoPixel rings and one button. +""" +import asyncio +import board +import neopixel +import keypad +from rainbowio import colorwheel + +button_pin = board.A0 # The pin the button is connected to. +num_pixels = 16 # The number of NeoPixels on a single ring. +brightness = 0.2 # The LED brightness. + +# Set up NeoPixel rings. +ring_one = neopixel.NeoPixel(board.A1, num_pixels, brightness=brightness, auto_write=False) +ring_two = neopixel.NeoPixel(board.A2, num_pixels, brightness=brightness, auto_write=False) + + +class AnimationControls: + """The controls to allow you to vary the rainbow and blink animations.""" + def __init__(self): + self.reverse = False + self.wait = 0.0 + self.delay = 0.5 + + +async def rainbow_cycle(controls): + """Rainbow cycle animation on ring one.""" + while True: + for j in range(255, -1, -1) if controls.reverse else range(0, 256, 1): + for i in range(num_pixels): + rc_index = (i * 256 // num_pixels) + j + ring_one[i] = colorwheel(rc_index & 255) + ring_one.show() + await asyncio.sleep(controls.wait) + + +async def blink(controls): + """Blink animation on ring two.""" + while True: + ring_two.fill((0, 0, 255)) + ring_two.show() + await asyncio.sleep(controls.delay) + ring_two.fill((0, 0, 0)) + ring_two.show() + await asyncio.sleep(controls.delay) + await asyncio.sleep(controls.wait) + + +async def monitor_button(button, controls): + """Monitor button that reverses rainbow direction and changes blink speed. + Assume button is active low. + """ + with keypad.Keys((button,), value_when_pressed=False, pull=True) as key: + while True: + key_event = key.events.get() + if key_event: + if key_event.pressed: + controls.reverse = True + controls.delay = 0.1 + elif key_event.released: + controls.reverse = False + controls.delay = 0.5 + await asyncio.sleep(0) + + +async def main(): + animation_controls = AnimationControls() + button_task = asyncio.create_task(monitor_button(button_pin, animation_controls)) + animation_task = asyncio.create_task(rainbow_cycle(animation_controls)) + blink_task = asyncio.create_task(blink(animation_controls)) + + # This will run forever, because no tasks ever finish. + await asyncio.gather(button_task, animation_task, blink_task) + +asyncio.run(main())