GPIO buttons
This commit is contained in:
parent
617edd50e5
commit
ac9c5cdf4c
|
@ -1,3 +1,3 @@
|
||||||
[submodule "lib/pgfw"]
|
[submodule "lib/pgfw"]
|
||||||
path = lib/pgfw
|
path = lib/pgfw
|
||||||
url = makar:/var/www/git/pgfw
|
url = https://git.nugget.fun/nugget/pgfw
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys, os
|
||||||
|
|
||||||
|
def ignore_sighup():
|
||||||
|
"""
|
||||||
|
Ignore hangup signal (that is thrown when launching from systemd?).
|
||||||
|
Taken from https://stackoverflow.com/questions/57205271/how-to-display-pygame-framebuffer-using-systemd-service
|
||||||
|
"""
|
||||||
|
import signal
|
||||||
|
def handler(signum, frame):
|
||||||
|
pass
|
||||||
|
signal.signal(signal.SIGHUP, handler)
|
||||||
|
|
||||||
|
# Change directory to the directory of the program launching the script (usually this script "OPEN-GAME").
|
||||||
|
if "--go-to-dir" in sys.argv:
|
||||||
|
os.chdir(os.path.dirname(sys.argv[0]))
|
||||||
|
|
||||||
|
# Use the KMS video driver. This works for newer versions of Raspberry Pi with the KMS overlay
|
||||||
|
# enabled, SDL 2, and Pygame 2.
|
||||||
|
os.putenv("SDL_VIDEODRIVER", "kmsdrm")
|
||||||
|
# ignore_sighup()
|
||||||
|
|
||||||
|
from electric_sieve.ElectricSieve import ElectricSieve
|
||||||
|
|
||||||
|
ElectricSieve().run()
|
|
@ -3,6 +3,7 @@
|
||||||
from random import randint, randrange, choice
|
from random import randint, randrange, choice
|
||||||
from time import time
|
from time import time
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
|
import RPi.GPIO as GPIO
|
||||||
|
|
||||||
from pygame import Surface, PixelArray, Rect
|
from pygame import Surface, PixelArray, Rect
|
||||||
from pygame.draw import aalines, polygon
|
from pygame.draw import aalines, polygon
|
||||||
|
@ -17,12 +18,30 @@ from lib.pgfw.pgfw.extension import render_box
|
||||||
|
|
||||||
class ElectricSieve(Game):
|
class ElectricSieve(Game):
|
||||||
|
|
||||||
|
# The GPIO pins corresponding to the buttons and LED indicators
|
||||||
|
PIN_BUTTON_UP = 17
|
||||||
|
PIN_BUTTON_DOWN = 27
|
||||||
|
PIN_LED_UP = 22
|
||||||
|
PIN_LED_DOWN = 23
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
self.initialize_gpio()
|
||||||
Game.__init__(self)
|
Game.__init__(self)
|
||||||
self.background = Surface(self.display.screen.get_size())
|
self.background = Surface(self.display.screen.get_size())
|
||||||
self.background.fill((255, 80, 190))
|
self.background.fill((255, 80, 190))
|
||||||
self.title.activate()
|
self.title.activate()
|
||||||
|
|
||||||
|
def initialize_gpio(self):
|
||||||
|
"""
|
||||||
|
Set pin numbering mode to GPIO, initialize all buttons to input pullup.
|
||||||
|
"""
|
||||||
|
# Use GPIO numbering
|
||||||
|
GPIO.setmode(GPIO.BCM)
|
||||||
|
|
||||||
|
# Set all button pins to pullup
|
||||||
|
for pin in self.PIN_BUTTON_UP, self.PIN_BUTTON_DOWN:
|
||||||
|
GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
|
||||||
|
|
||||||
def set_children(self):
|
def set_children(self):
|
||||||
Game.set_children(self)
|
Game.set_children(self)
|
||||||
self.title = Title(self)
|
self.title = Title(self)
|
||||||
|
@ -112,6 +131,8 @@ class Strip(Sprite):
|
||||||
|
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
Sprite.__init__(self, parent)
|
Sprite.__init__(self, parent)
|
||||||
|
GPIO.add_event_detect(ElectricSieve.PIN_BUTTON_UP, GPIO.BOTH, self.respond)
|
||||||
|
GPIO.add_event_detect(ElectricSieve.PIN_BUTTON_DOWN, GPIO.BOTH, self.respond)
|
||||||
self.deactivate()
|
self.deactivate()
|
||||||
self.display_surface = self.get_display_surface()
|
self.display_surface = self.get_display_surface()
|
||||||
self.delegate = self.get_game().delegate
|
self.delegate = self.get_game().delegate
|
||||||
|
@ -130,12 +151,30 @@ class Strip(Sprite):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def respond(self, event):
|
def respond(self, event):
|
||||||
|
if type(event) == int:
|
||||||
|
pressed = "pressed" if GPIO.input(event) == GPIO.LOW else "released"
|
||||||
|
print(f"pin {event} {pressed}")
|
||||||
if self.active:
|
if self.active:
|
||||||
compare = self.delegate.compare
|
move = False
|
||||||
if compare(event, "left") or compare(event, "left", True):
|
if type(event) == int:
|
||||||
self.hshifts[self.LEFT].active = not event.cancel
|
if event == ElectricSieve.PIN_BUTTON_UP:
|
||||||
elif compare(event, "right") or compare(event, "right", True):
|
direction = self.LEFT
|
||||||
self.hshifts[self.RIGHT].active = not event.cancel
|
move = True
|
||||||
|
elif event == ElectricSieve.PIN_BUTTON_DOWN:
|
||||||
|
direction = self.RIGHT
|
||||||
|
move = True
|
||||||
|
active = GPIO.input(event) == GPIO.LOW
|
||||||
|
else:
|
||||||
|
compare = self.delegate.compare
|
||||||
|
if compare(event, "left") or compare(event, "left", True):
|
||||||
|
direction = self.LEFT
|
||||||
|
move = True
|
||||||
|
elif compare(event, "right") or compare(event, "right", True):
|
||||||
|
direction = self.RIGHT
|
||||||
|
move = True
|
||||||
|
active = not event.cancel
|
||||||
|
if move:
|
||||||
|
self.hshifts[direction].active = active
|
||||||
|
|
||||||
def activate(self):
|
def activate(self):
|
||||||
self.active = True
|
self.active = True
|
||||||
|
|
2
lib/pgfw
2
lib/pgfw
|
@ -1 +1 @@
|
||||||
Subproject commit 314b722528a65e6f0053f8be1844c2d8818319f4
|
Subproject commit 24b5d7c6e7c7f17ec09ddb3de2127c092aa6f874
|
|
@ -120,3 +120,16 @@
|
||||||
1529983381.92 171 BUG
|
1529983381.92 171 BUG
|
||||||
1586137469.11 247 NUT
|
1586137469.11 247 NUT
|
||||||
1669926143.6577697 5 ---
|
1669926143.6577697 5 ---
|
||||||
|
1670815336.2178595 112 ---
|
||||||
|
1670815414.8010118 21 ---
|
||||||
|
1670815999.6434624 147 FLA
|
||||||
|
1670816044.5578532 24 ---
|
||||||
|
1670816145.6957958 124 ---
|
||||||
|
1670816263.0361412 223 GUN
|
||||||
|
1670816338.4996192 28 ---
|
||||||
|
1670816435.1543665 105 ---
|
||||||
|
1670816534.3354058 102 ---
|
||||||
|
1670816639.158178 146 ---
|
||||||
|
1670817307.1141152 53 ---
|
||||||
|
1670819531.720299 203 FLA
|
||||||
|
1670819619.775536 96 ---
|
||||||
|
|
Loading…
Reference in New Issue