pimoroni-pico/micropython/examples/pico_enviro/mic.py

86 lines
1.8 KiB
Python

'''
Audio Sensor Example
'''
from picographics import PicoGraphics, DISPLAY_ENVIRO_PLUS
from pimoroni import RGBLED
from machine import Pin, ADC
import time
print("""mic.py - displays a waveform on the attached screen
""")
display = PicoGraphics(display=DISPLAY_ENVIRO_PLUS)
display.set_backlight(1.0)
# Setup RGB Led
led = RGBLED(6, 7, 10, invert=True)
led.set_rgb(0, 0, 0)
# Setup background
BG = display.create_pen(0, 0, 0)
TEXT = display.create_pen(255, 255, 255)
MIC = display.create_pen(255, 0, 0)
display.set_pen(BG)
display.clear()
# Setup analogue Channel for Mic
MIC_PIN = 26
mic = ADC(Pin(26))
# array for storing
results = []
# Settings for bandwith and side
BANDWIDTH = 2000
SAMPLE_N = 240
# Drawing routines
def draw_background():
display.set_pen(BG)
display.clear()
display.set_pen(TEXT)
display.text("Sound Sensor", 5, 10, scale=3)
def draw_txt_overlay(sensor_data):
display.set_pen(MIC)
display.text("Peak: {0}".format(sensor_data), 5, 60, scale=3)
def draw_wave(results_array):
result_index = 0
for result in results_array:
display.set_pen(MIC)
display.pixel(result_index, int(120 + result))
result_index += 1
def read_mic():
return mic.read_u16()
def take_sample(frequency, length=240):
buffer = []
for index in range(length):
buffer.append(read_mic())
time.sleep(1 / frequency)
return buffer
while True:
results = take_sample(BANDWIDTH, SAMPLE_N)
# Rescale for display
for result_index in range(len(results)):
results[result_index] = (results[result_index] - 33100) / 30
# Display Upates
draw_background()
draw_wave(results)
draw_txt_overlay(max(results))
display.update()
time.sleep(0.2)