add Clue versions

This commit is contained in:
caternuson 2020-02-24 08:59:43 -08:00
parent 62cb79e213
commit 897d94fa87
2 changed files with 179 additions and 0 deletions

View file

@ -0,0 +1,104 @@
# Display stuff
import board
import displayio
import adafruit_imageload
from adafruit_bitmap_font import bitmap_font
from adafruit_display_text import label
# BLE stuff
from adafruit_ble import BLERadio
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble.services.nordic import UARTService
from adafruit_bluefruit_connect.packet import Packet
from adafruit_bluefruit_connect.color_packet import ColorPacket
#---| User Config |--------------------------------------------------
BLE_NAME = "Candy Heart"
MESSAGE_DELIMITER = ","
MESSAGE_COLOR = 0xFF0000
#---| User Config |--------------------------------------------------
# Setup BLE radio and service
ble = BLERadio()
uart = UARTService()
advertisement = ProvideServicesAdvertisement(uart)
ble._adapter.name = BLE_NAME #pylint: disable=protected-access
# Create the display
display = board.DISPLAY
# Load the candy heart BMP
bitmap, palette = adafruit_imageload.load("/heart_bw.bmp",
bitmap=displayio.Bitmap,
palette=displayio.Palette)
heart = displayio.TileGrid(bitmap, pixel_shader=palette)
# Set up message text
LINE1_MAX = 9
LINE2_MAX = 5
font = bitmap_font.load_font("/Multicolore_36.bdf")
line1 = label.Label(font, text="?"*LINE1_MAX)
line2 = label.Label(font, text="?"*LINE2_MAX)
line1.anchor_point = (0.5, 0) # middle top
line2.anchor_point = (0.5, 1.0) # middle bottom
line1.anchored_position = (120, 85)
line2.anchored_position = (120, 175)
line1.color = line2.color = MESSAGE_COLOR
# Set up group and add to display
group = displayio.Group()
group.append(heart)
group.append(line1)
group.append(line2)
display.show(group)
def update_heart(message, heart_color):
# turn off auto refresh while we change some things
display.auto_refresh = False
# set message text
text1, _, text2 = message.partition(MESSAGE_DELIMITER)
line1.text = text1[:LINE1_MAX] if len(text1) > LINE1_MAX else text1
line2.text = text1[:LINE2_MAX] if len(text2) > LINE2_MAX else text2
# update location for new text bounds
line1.anchored_position = (120, 85)
line2.anchored_position = (120, 175)
# set heart color
palette[1] = heart_color
# OK, now turn auto refresh back on to display
display.auto_refresh = True
# Initial update
text = "TEXT,ME"
color = 0x00FFFF
update_heart(text, color)
# Loop forever
while True:
# advertise and wait for connection
print("WAITING...")
ble.start_advertising(advertisement)
while not ble.connected:
pass
# connected
print("CONNECTED")
ble.stop_advertising()
# receive and handle BLE traffic
while ble.connected:
if uart.in_waiting:
raw_bytes = uart.read(uart.in_waiting)
if raw_bytes[0] == ord('!'):
# BLE Connect Control Packet
packet = Packet.from_bytes(raw_bytes)
if isinstance(packet, ColorPacket):
print("color = ", color)
color = packet.color
else:
# Just plain text
text = raw_bytes.decode("utf-8").strip()
print("text = ", text)
update_heart(text, color)
# disconnected
print("DISCONNECTED")

View file

@ -0,0 +1,75 @@
import time
from random import choice
import board
import displayio
import adafruit_imageload
from adafruit_bitmap_font import bitmap_font
from adafruit_display_text import label
from adafruit_clue import clue
#---| User Config |--------------------------------------------------
HEART_MESSAGES = (
("I LUV", "YOU"),
("SAY", "YES"),
("HUG", "ME"),
("BE", "MINE"),
("TEXT","ME"),
("OMG","LOL"),
("PEACE",""),
)
HEART_COLORS = (
0xEAFF50, # yellow
0xFFAD50, # orange
0x9D50FF, # purple
0x13B0FE, # blue
0xABFF96, # green
0xFF96FF, # pink
)
MESSAGE_COLORS = (
0xFF0000, # red
)
#---| User Config |--------------------------------------------------
# Create the display
display = board.DISPLAY
# Load the candy heart BMP
bitmap, palette = adafruit_imageload.load("/heart_bw.bmp",
bitmap=displayio.Bitmap,
palette=displayio.Palette)
heart = displayio.TileGrid(bitmap, pixel_shader=palette)
# Set up message text
font = bitmap_font.load_font("/Multicolore_36.bdf")
line1 = label.Label(font, text="?"*9)
line2 = label.Label(font, text="?"*5)
line1.anchor_point = (0.5, 0) # middle top
line2.anchor_point = (0.5, 1.0) # middle bottom
# Set up group and add to display
group = displayio.Group()
group.append(heart)
group.append(line1)
group.append(line2)
display.show(group)
while True:
# turn off auto refresh while we change some things
display.auto_refresh = False
# pick a random message
line1.text, line2.text = choice(HEART_MESSAGES)
# update location for new text bounds
line1.anchored_position = (120, 85)
line2.anchored_position = (120, 175)
# pick a random text color
line1.color = line2.color = choice(MESSAGE_COLORS)
# pick a ranomd heart color
palette[1] = choice(HEART_COLORS)
# OK, now turn auto refresh back on to display
display.auto_refresh = True
# wait for button press
while not clue.button_a and not clue.button_b:
pass
# just a little debounce
time.sleep(0.25)