Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Added Bonnet Buttons example #82

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jun 24, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 161 additions & 0 deletions examples/rgb_display_pillow_bonnet_buttons.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
# Copyright (c) 2017 Adafruit Industries
# Author: James DeVito
# Ported to RGB Display by Melissa LeBlanc-Williams
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

# This example is for use on (Linux) computers that are using CPython with
# Adafruit Blinka to support CircuitPython libraries. CircuitPython does
# not support PIL/pillow (python imaging library)!

import time
import random
from colorsys import hsv_to_rgb
import board
from digitalio import DigitalInOut, Direction
from PIL import Image, ImageDraw, ImageFont
import adafruit_rgb_display.st7789 as st7789

# Create the display
cs_pin = DigitalInOut(board.CE0)
dc_pin = DigitalInOut(board.D25)
reset_pin = DigitalInOut(board.D24)
BAUDRATE = 24000000

spi = board.SPI()
disp = st7789.ST7789(
spi,
height=240,
y_offset=80,
rotation=180,
cs=cs_pin,
dc=dc_pin,
rst=reset_pin,
baudrate=BAUDRATE,
)

# Input pins:
button_A = DigitalInOut(board.D5)
button_A.direction = Direction.INPUT

button_B = DigitalInOut(board.D6)
button_B.direction = Direction.INPUT

button_L = DigitalInOut(board.D27)
button_L.direction = Direction.INPUT

button_R = DigitalInOut(board.D23)
button_R.direction = Direction.INPUT

button_U = DigitalInOut(board.D17)
button_U.direction = Direction.INPUT

button_D = DigitalInOut(board.D22)
button_D.direction = Direction.INPUT

button_C = DigitalInOut(board.D4)
button_C.direction = Direction.INPUT

# Turn on the Backlight
backlight = DigitalInOut(board.D26)
backlight.switch_to_output()
backlight.value = True

# Create blank image for drawing.
# Make sure to create image with mode 'RGB' for color.
width = disp.width
height = disp.height
image = Image.new("RGB", (width, height))

# Get drawing object to draw on image.
draw = ImageDraw.Draw(image)

# Clear display.
draw.rectangle((0, 0, width, height), outline=0, fill=(255, 0, 0))
disp.image(image)

# Get drawing object to draw on image.
draw = ImageDraw.Draw(image)

# Draw a black filled box to clear the image.
draw.rectangle((0, 0, width, height), outline=0, fill=0)

udlr_fill = "#00FF00"
udlr_outline = "#00FFFF"
button_fill = "#FF00FF"
button_outline = "#FFFFFF"

fnt = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 30)

while True:
up_fill = 0
if not button_U.value: # up pressed
up_fill = udlr_fill
draw.polygon(
[(40, 40), (60, 4), (80, 40)], outline=udlr_outline, fill=up_fill
) # Up

down_fill = 0
if not button_D.value: # down pressed
down_fill = udlr_fill
draw.polygon(
[(60, 120), (80, 84), (40, 84)], outline=udlr_outline, fill=down_fill
) # down

left_fill = 0
if not button_L.value: # left pressed
left_fill = udlr_fill
draw.polygon(
[(0, 60), (36, 42), (36, 81)], outline=udlr_outline, fill=left_fill
) # left

right_fill = 0
if not button_R.value: # right pressed
right_fill = udlr_fill
draw.polygon(
[(120, 60), (84, 42), (84, 82)], outline=udlr_outline, fill=right_fill
) # right

center_fill = 0
if not button_C.value: # center pressed
center_fill = button_fill
draw.rectangle((40, 44, 80, 80), outline=button_outline, fill=center_fill) # center

A_fill = 0
if not button_A.value: # left pressed
A_fill = button_fill
draw.ellipse((140, 80, 180, 120), outline=button_outline, fill=A_fill) # A button

B_fill = 0
if not button_B.value: # left pressed
B_fill = button_fill
draw.ellipse((190, 40, 230, 80), outline=button_outline, fill=B_fill) # B button

# make a random color and print text
rcolor = tuple([int(x * 255) for x in hsv_to_rgb(random.random(), 1, 1)])
draw.text((20, 150), "Hello World", font=fnt, fill=rcolor)
rcolor = tuple([int(x * 255) for x in hsv_to_rgb(random.random(), 1, 1)])
draw.text((20, 180), "Hello World", font=fnt, fill=rcolor)
rcolor = tuple([int(x * 255) for x in hsv_to_rgb(random.random(), 1, 1)])
draw.text((20, 210), "Hello World", font=fnt, fill=rcolor)

# Display the Image
disp.image(image)

time.sleep(0.01)