raspberry pi gpio input test script
This commit is contained in:
parent
0f0f771ea8
commit
f68fb897c5
6
NS.py
6
NS.py
|
@ -1,10 +1,14 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# [SCRAPEBOARD] is an arcade game in development by [@diskmem] & [@snakesandrews]
|
# [SCRAPEBOARD] is an arcade game in development by [@diskmem] & [@snakesandrews].
|
||||||
#
|
#
|
||||||
# It requires custom hardware to play but can be tested in keyboard mode without
|
# It requires custom hardware to play but can be tested in keyboard mode without
|
||||||
# the hardware. For more information on setting up and running the game, see
|
# the hardware. For more information on setting up and running the game, see
|
||||||
# README.md, or for the game in general, visit <https://scrape.nugget.fun/>.
|
# README.md, or for the game in general, visit <https://scrape.nugget.fun/>.
|
||||||
|
#
|
||||||
|
# Full open source code is available at <https://git.nugget.fun/scrape/scrapeboard>.
|
||||||
|
#
|
||||||
|
# This is the main file containing all the pygame code.
|
||||||
|
|
||||||
import argparse, pathlib, operator, subprocess, sys
|
import argparse, pathlib, operator, subprocess, sys
|
||||||
from random import randint, choice, random
|
from random import randint, choice, random
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
# [SCRAPEBOARD] is an arcade game in development by [@diskmem] & [@snakesandrews]
|
||||||
|
#
|
||||||
|
# It requires custom hardware to play but can be tested in keyboard mode without
|
||||||
|
# the hardware. For more information on setting up and running the game, see
|
||||||
|
# README.md, or for the game in general, visit <https://scrape.nugget.fun/>.
|
||||||
|
#
|
||||||
|
# Full open source code is available at <https://git.nugget.fun/scrape/scrapeboard>.
|
||||||
|
#
|
||||||
|
# This is a utility script for testing if the GPIO interface of a Raspberry Pi is working
|
||||||
|
# with the four input wires, which correspond to the four metal floor pads in the standard
|
||||||
|
# Scrapeboard build.
|
||||||
|
|
||||||
|
import time, itertools
|
||||||
|
import RPi.GPIO as GPIO
|
||||||
|
|
||||||
|
# These represent the game pads and the GPIO pins they're connected to
|
||||||
|
LNW, LNE, LSE, LSW = range(4)
|
||||||
|
pins = {
|
||||||
|
LNW: 17,
|
||||||
|
LNE: 27,
|
||||||
|
LSE: 22,
|
||||||
|
LSW: 23
|
||||||
|
}
|
||||||
|
|
||||||
|
def connection2(pin_a, pin_b):
|
||||||
|
"""
|
||||||
|
Set `pin_a` to output a low signal, and set every other pin to pullup. If `pin_b` reads a low signal even though
|
||||||
|
it's set to pullup, that means `pin_a` is connected to it, so return `True`.
|
||||||
|
|
||||||
|
@param pin_a Pin which will be set to output LOW
|
||||||
|
@param pin_b Pin which will be read
|
||||||
|
@return `True` if a low signal is sent from `pin_a` to `pin_b`, `False` otherwise
|
||||||
|
"""
|
||||||
|
for pin_id, pin in pins.items():
|
||||||
|
if pin == pin_a:
|
||||||
|
# Set pin_a to output LOW
|
||||||
|
GPIO.setup(pin, GPIO.OUT)
|
||||||
|
GPIO.output(pin, GPIO.LOW)
|
||||||
|
else:
|
||||||
|
# Set all other pins to input pullup
|
||||||
|
GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
|
||||||
|
|
||||||
|
# pin_b can now be tested to see if if reads the LOW signal from pin_a
|
||||||
|
return GPIO.input(pin_b) == GPIO.LOW
|
||||||
|
|
||||||
|
def connection(pin_a, pin_b):
|
||||||
|
"""
|
||||||
|
Tests low signals connect from both A to B and from B to A
|
||||||
|
|
||||||
|
@param pin_a Test if this pin is connected to `pin_b`
|
||||||
|
@param pin_b Test if this pin is connected to `pin_a`
|
||||||
|
@return `True` if `pin_a` and `pin_b` are connected, `False` otherwise
|
||||||
|
"""
|
||||||
|
return connection2(pin_a, pin_b) and connection2(pin_b, pin_a)
|
||||||
|
|
||||||
|
def connections():
|
||||||
|
"""
|
||||||
|
Look at all six possible connections between the four pins and print a message if one is found connected.
|
||||||
|
"""
|
||||||
|
for pin_id_a, pin_id_b in itertools.combinations(pins, 2):
|
||||||
|
if connection(pins[pin_id_a], pins[pin_id_b]):
|
||||||
|
print(f"{pin_id_a} ({pins[pin_id_a]}) <-> {pin_id_b} ({pins[pin_id_b]})")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# Use GPIO numbering
|
||||||
|
GPIO.setmode(GPIO.BCM)
|
||||||
|
|
||||||
|
# Set all pins to pullup
|
||||||
|
for pin_id, pin in pins.items():
|
||||||
|
GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
# Try all connections once each frame
|
||||||
|
connections()
|
||||||
|
time.sleep(0.1)
|
Loading…
Reference in New Issue