mirror of
https://github.com/dekuNukem/USB4VC.git
synced 2025-10-31 11:26:46 -07:00
90 lines
3.0 KiB
Python
90 lines
3.0 KiB
Python
import os
|
|
import sys
|
|
import time
|
|
import RPi.GPIO as GPIO
|
|
from demo_opts import get_device
|
|
from luma.core.render import canvas
|
|
from PIL import ImageFont
|
|
|
|
OLED_WIDTH = 128
|
|
OLED_HEIGHT = 32
|
|
|
|
my_arg = ['--display', 'ssd1306', '--interface', 'spi', '--spi-port', '0', '--spi-device', '1', '--gpio-reset', '6', '--gpio-data-command', '5', '--width', str(OLED_WIDTH), '--height', str(OLED_HEIGHT), '--spi-bus-speed', '2000000']
|
|
oled_device = get_device(my_arg)
|
|
time.sleep(0.5)
|
|
oled_device = get_device(my_arg)
|
|
|
|
font_regular = ImageFont.truetype("ProggyTiny.ttf", 16)
|
|
font_medium = ImageFont.truetype("ChiKareGo2.ttf", 16)
|
|
font_large = ImageFont.truetype("ProggyTiny.ttf", 32)
|
|
|
|
max_char_per_line = {font_regular:21, font_medium:17, font_large:11}
|
|
width_per_char = {font_regular:6, font_medium:7, font_large:12}
|
|
|
|
def oled_print_centered(text, font, y, this_canvas):
|
|
text = text.strip()[:max_char_per_line[font]]
|
|
start_x = int((OLED_WIDTH - (len(text) * width_per_char[font]))/2)
|
|
if start_x < 0:
|
|
start_x = 0
|
|
this_canvas.text((start_x, y), text, font=font, fill="white")
|
|
|
|
class my_button(object):
|
|
def __init__(self, bcm_pin):
|
|
super(my_button, self).__init__()
|
|
self.pin_number = bcm_pin
|
|
GPIO.setup(self.pin_number, GPIO.IN, pull_up_down=GPIO.PUD_UP)
|
|
self.prev_state = GPIO.input(self.pin_number)
|
|
|
|
def is_pressed(self):
|
|
result = False
|
|
current_state = GPIO.input(self.pin_number)
|
|
if self.prev_state == 1 and current_state == 0:
|
|
result = True
|
|
self.prev_state = current_state
|
|
return result
|
|
|
|
PLUS_BUTTON_PIN = 27
|
|
MINUS_BUTTON_PIN = 19
|
|
ENTER_BUTTON_PIN = 22
|
|
SHUTDOWN_BUTTON_PIN = 21
|
|
PCARD_CS_PIN = 8
|
|
SLEEP_LED_PIN = 26
|
|
|
|
GPIO.setup(SLEEP_LED_PIN, GPIO.OUT)
|
|
GPIO.output(SLEEP_LED_PIN, GPIO.LOW)
|
|
GPIO.setup(PCARD_CS_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
|
|
|
|
plus_button = my_button(PLUS_BUTTON_PIN)
|
|
minus_button = my_button(MINUS_BUTTON_PIN)
|
|
enter_button = my_button(ENTER_BUTTON_PIN)
|
|
shutdown_button = my_button(SHUTDOWN_BUTTON_PIN)
|
|
|
|
loop_count = 0
|
|
def print_pattern():
|
|
global loop_count
|
|
loop_count = (loop_count + 1) % 2
|
|
oled_device = get_device(my_arg)
|
|
if loop_count:
|
|
GPIO.output(SLEEP_LED_PIN, GPIO.HIGH)
|
|
with canvas(oled_device) as draw:
|
|
draw.text((0, 0), "ABCDEFGHIJKLMNO", font=font_medium, fill="white")
|
|
draw.text((0, 15), "PQRSTUVWXYZ0123", font=font_medium, fill="white")
|
|
else:
|
|
GPIO.output(SLEEP_LED_PIN, GPIO.LOW)
|
|
with canvas(oled_device) as draw:
|
|
draw.text((0, 0), "===================", font=font_medium, fill="white")
|
|
draw.text((0, 15), "===================", font=font_medium, fill="white")
|
|
|
|
print_pattern()
|
|
|
|
while 1:
|
|
time.sleep(0.05)
|
|
if GPIO.input(PCARD_CS_PIN) == 0:
|
|
GPIO.output(SLEEP_LED_PIN, GPIO.LOW)
|
|
exit()
|
|
if plus_button.is_pressed() or \
|
|
minus_button.is_pressed() or \
|
|
enter_button.is_pressed() or \
|
|
shutdown_button.is_pressed():
|
|
print_pattern()
|