Skip to content

Instantly share code, notes, and snippets.

@extrasleepy
Created June 25, 2021 23:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save extrasleepy/a1a528d606ab387bbd0e70ea35ce720a to your computer and use it in GitHub Desktop.
Save extrasleepy/a1a528d606ab387bbd0e70ea35ce720a to your computer and use it in GitHub Desktop.
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
#
# SPDX-License-Identifier: Unlicense
"""
Author: Mark Roberts (mdroberts1243) from Adafruit code
This test will initialize the display using displayio and draw a solid white
background, a smaller black rectangle, miscellaneous stuff and some white text.
"""
import array
import math
import board
import time
import audiobusio
import displayio
import terminalio
# can try import bitmap_label below for alternative
from adafruit_display_text import label
import adafruit_displayio_sh1107
displayio.release_displays()
# oled_reset = board.D9
# Use for I2C
i2c = board.I2C()
display_bus = displayio.I2CDisplay(i2c, device_address=0x3C)
# SH1107 is vertically oriented 64x128
WIDTH = 128
HEIGHT = 64
BORDER = 2
display = adafruit_displayio_sh1107.SH1107(display_bus, width=WIDTH, height=HEIGHT)
# Make the display context
splash = displayio.Group(max_size=10)
display.show(splash)
color_bitmap = displayio.Bitmap(WIDTH, HEIGHT, 1)
color_palette = displayio.Palette(1)
color_palette[0] = 0xFFFFFF # White
bg_sprite = displayio.TileGrid(color_bitmap, pixel_shader=color_palette, x=0, y=0)
splash.append(bg_sprite)
# Draw a smaller inner rectangle in black
inner_bitmap = displayio.Bitmap(WIDTH - BORDER * 2, HEIGHT - BORDER * 2, 1)
inner_palette = displayio.Palette(1)
inner_palette[0] = 0x000000 # Black
inner_sprite = displayio.TileGrid(
inner_bitmap, pixel_shader=inner_palette, x=BORDER, y=BORDER
)
splash.append(inner_sprite)
#Draw some white squares
# sm_bitmap = displayio.Bitmap(8, 8, 1)
# sm_square = displayio.TileGrid(sm_bitmap, pixel_shader=color_palette, x=58, y=17)
# splash.append(sm_square)
# med_bitmap = displayio.Bitmap(16, 16, 1)
# med_square = displayio.TileGrid(med_bitmap, pixel_shader=color_palette, x=71, y=15)
# splash.append(med_square)
# lrg_bitmap = displayio.Bitmap(32, 32, 1)
# lrg_square = displayio.TileGrid(lrg_bitmap, pixel_shader=color_palette, x=91, y=28)
# splash.append(lrg_square)
#Draw some label text
# text1 = "0123456789ABCDEF123456789AB" # overly long to see where it clips
# text_area = label.Label(terminalio.FONT, text=text1, color=0xFFFFFF, x=8, y=8)
# splash.append(text_area)
# text2 = "SHHHITTTT"
# text_area2 = label.Label(
# terminalio.FONT, text=text2, scale=2, color=0xFFFFFF, x=9, y=44
# )
# splash.append(text_area2)
# time.sleep(5)
# splash.pop(5)
# Remove DC bias before computing RMS.
def mean(values):
return sum(values) / len(values)
def normalized_rms(values):
minbuf = int(mean(values))
samples_sum = sum(
float(sample - minbuf) * (sample - minbuf)
for sample in values
)
return math.sqrt(samples_sum / len(values))
# Main program
mic = audiobusio.PDMIn(board.TX, board.D12, sample_rate=16000, bit_depth=16)
samples = array.array('H', [0] * 160)
while True:
mic.record(samples, len(samples))
magnitude = normalized_rms(samples)
#print((magnitude,))
#time.sleep(0.1)
text2 = str(magnitude)
text_area2 = label.Label(
terminalio.FONT, text=text2, scale=2, color=0xFFFFFF, x=9, y=10
)
splash.append(text_area2)
display.show(splash)
time.sleep(0.1)
splash.pop(-1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment