diff --git a/NS.py b/NS.py index f69664f..ccc6a6e 100644 --- a/NS.py +++ b/NS.py @@ -1,10 +1,14 @@ # -*- 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 # the hardware. For more information on setting up and running the game, see # README.md, or for the game in general, visit . +# +# Full open source code is available at . +# +# This is the main file containing all the pygame code. import argparse, pathlib, operator, subprocess, sys from random import randint, choice, random diff --git a/gpio_test.py b/gpio_test.py new file mode 100644 index 0000000..e8d01c2 --- /dev/null +++ b/gpio_test.py @@ -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 . +# +# Full open source code is available at . +# +# 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)