Upright Arcade Build
-
@aechadwick hey! great build!
Would you be willing to share you code for the marquee? im trying to get some LCD panels for the RGB hat working but failing big time...
I would like to use just one pie also so if you have anything like that illl take it..:-)I have installed pimarquee2 but this uses LCD via a second HDMI port...its great software also but i cannot get it working with a RGB hat....
im not a coder either so its all trail and error....Using a second pi perhaps a zero may work also....
thanks in adavance!
-
@britx Here is how i did it; i'm open to other ways, but this has worked constantly & consistently.
i named the units RetroPi and MatrixPi. They are connected directly with an ethernet cable; they connect to the network via Wifi, and to each other over ethernet. (I don't remember the exact instructions i used but it';s pretty straightforward.)
on MatrixPi, i created folders for Scripts and Marquees:
/home/pi/Arcade/Marquees/
/home/pi/ScriptsI made a script that, when called, searches the Marquees folder based on the arguments sent to it: the script will search for an image based on the ROM or SYSTEM. If it does not find an image (or is not sent any information) it will just display the "crash kitchen" logo.
I am using the Adafruit Matrix Hat with the hzeller library.
#!/bin/bash system=$1 # get the system name rom_bn=$2 # get the ROM with full path exec 2> /home/pi/Arcade/Scripts/runcommand-onstart.log # send stderr to a log file exec 1>&2 # send stdout to the same log file # first, make sure marquee is clear sudo start-stop-daemon --stop --name led-image-viewe function contains() { local n=$# local value=${!n} for ((i=1;i < $#;i++)) { if [ "${!i}" == "${value}" ]; then echo "y" return 0 fi } echo "n" return 1 } # rom_bn receives $rom excluding everything from the first char to the last slash rom_bn="${rom_bn##*/}" # rom_bn receives $rom_bn excluding everything from the last char to the first dot rom_bn="${rom_bn%.*}" ArcadeArray=("lr-fbalpha", "lr-fbalpha2012", "PiFBA", "lr-mame2003", "lr-mame2010", "MAME4ALL-Pi", "AdvanceMAME 1.4", "AdvanceMAME 0.94", "AdvanceMAME 3", "lr-mame2014", "lr-mame2016", "lr-mame2000") if [ $(contains "${ArcadeArray[@]}" $1) == "y" ]; then system="arcade" fi # set the image file to the first result matching the ROM name - accounts for various possible file extensions img="$(find "/home/pi/Arcade/Marquees/${system}" -type f -name "${rom_bn}.*" | head -1)" # check to see if there was a file found (length of the file name not zero), ELSE find an image based on system if [[ -z "${img}" ]] then img="$(find "/home/pi/Arcade/Marquees/systems" -type f -name "${system}.*" | head -1)" fi # check to see if there was a file found (length of the file name not zero), ELSE use Crash Kitchen logo if [[ -z "${img}" ]] then img="/home/pi/Arcade/Marquees/systems/CrashKitchen.png" fi # display the image, (6) 32-pixel panels, centered sudo /home/pi/rpi-rgb-led-matrix-master/utils/led-image-viewer --led-chain=6 --led-daemon -C "$img"
That's pretty well noted... (thanks, PASTaechadwick)
I called it "runcommand-onstart.sh" simply to keep track of it—it is triggered by runcommand on the RetroPi...
to trigger the MatrixPi Script, i added this line at the top of /opt/retropie/configs/all/runcommand-onstart.sh on the RetroPi...
ssh pi@192.168.1.22 "/home/pi/Scripts/runcommand-onstart.sh \"$1\" \"$3\"" # tell MatrixPi to display logo
(of course, use your pi’s IP address)
I also made scripts for -onend and -onstop, they simply revert the marquee to the “crash kitchen” logo.
#!/bin/bash # first, make sure marquee is clear sudo start-stop-daemon --stop --name led-image-viewe # set to crash kitchen logo img="/home/pi/Arcade/Marquees/systems/CrashKitchen.gif" # display the image, (6) 32-pixel panels, centered sudo /home/pi/rpi-rgb-led-matrix-master/utils/led-image-viewer --led-chain=6 --led-daemon -C "$img"
That's it.
When i add a game or system, i can just drop a new logo into the MatrixPi’s “Marquees” folder, and it's all taken care of. (I always make custom images and save them as a PNG, but it will try to display anything it finds.)
Let me know if there's anything i can explain further. good luck!
-
@aechadwick Amazing....thank you so much for posting...
here is a burner email, nkfey6aod59a@opayq.com
if you ok with it send me an email and ill reply back with my personal one..i dont know how to DM on this site...Iv been trying to get things working for weeks....so this may give me the info :-)
Also i have a good way of scrapping files automatically for the system..
plus i have over 1000 gifs in the 32x128 format...thank again..i know what im doing tomorrow working from home...:-)
-
@aechadwick hey quick question, does emulationstation have to be running for this to work?
I have everything done...but upon boot nothing is displayed? but if i execute the command manual then it displays the crashkitchen file?Ill bash away at it....but you answered a lot of open questions i had teaching myself :-)
-
@britx i think the runcommand scripts are a function of retroarch, not emulationstation? regardless, i understand exactly what's happening:
at boot, there is nothing started nor anything ending, so you need one initial call to get an image on the marquee. i did that by simply having rc.local run the "onend" script after boot--that's functionally the same as your manual execution.
(also, you don't have to use the name crashkitchen.gif, you can change that to anything you want)
-
@aechadwick hey thanks again...
Im nearlt there.....i have the image playing on boot :-)
have the stop gif playing when exciting a game from arcade:-)I dont have the change when selecting a game... i have just the default retropie installed noting else and i chose lr-mame2003 as the default.
It appears its not picking up the "$img" through the system? as it does play the gif on the ELSE command when it doesnt find a suitable file....I have also set it up to just run on one Pi for now as easier on reboots etc....
here is my runcommand-onstart:
#!/bin/bash echo "message to log" >&2 # get the full path filename of the ROM rom=$3 # get the system name system=$1 # get the ROM with full path rom_bn=$2 exec 2> /opt/retropie/configs/all/runcommand-onstart.log # send stderr to a log file exec 1>&2 # send stdout to the same log file # first, make sure marquee is clear sudo start-stop-daemon --stop --name led-image-viewe function contains() { local n=$# local value=${!n} for ((i=1;i < $#;i++)) { if [ "${!i}" == "${value}" ]; then echo "y" return 0 fi } echo "n" return 1 } # rom_bn receives $rom excluding everything from the first char to the last slash rom_bn="${rom_bn##*/}" # rom_bn receives $rom_bn excluding everything from the last char to the first dot rom_bn="${rom_bn%.*}" ArcadeArray=("lr-fbalpha", "lr-fbalpha2012", "PiFBA", "lr-mame2003", "lr-mame2010", "MAME4ALL-Pi", "AdvanceMAME 1.4", "AdvanceMAME 0.94", "AdvanceMAME 3", "lr-mame2014", "lr-mame2016", "lr-mame2000", "retroarch", "mame-libretro") if [ $(contains "${ArcadeArray[@]}" $1) == "y" ]; then system="arcade" fi # set the image file to the first result matching the ROM name - accounts for various possible file extensions #img="$(find "/home/pi/Arcade/Marquees/${system}" -type f -name "${rom_bn}.*" | head -1)" img="$(find "/home/pi/Arcade/Marquees/${system}" -type f -name "${rom_bn}-image.*" | head -1)" # check to see if there was a file found (length of the file name not zero), ELSE find an image based on system if [[ -z "${img}" ]] then img="$(find "/home/pi/Arcade/Marquees" -type f -name "${system}.*" | head -1)" fi # check to see if there was a file found (length of the file name not zero), ELSE use Crash Kitchen logo if [[ -z "${img}" ]] then img="/home/pi/Arcade/Marquees/systems/intro.gif" fi # display the image, (6) 32-pixel panels, centered sudo /home/pi/rpi-rgb-led-matrix/utils/led-image-viewer -f -C --led-no-hardware-pulse --led-rows=32 --led-cols=64 --led-chain=2 --led-slowdown-gpio=2 --led-gpio-mapping=adafruit-hat --led-daemon "$img"
Any ideas on what im missing...:-) i just cant nail it down...also the log is blank indicating the logic is correct?
I think its something here:
# set the image file to the first result matching the ROM name - accounts for various possible file extensions #img="$(find "/home/pi/Arcade/Marquees/${system}" -type f -name "${rom_bn}.*" | head -1)" img="$(find "/home/pi/Arcade/Marquees/${system}" -type f -name "${rom_bn}-image.*" | head -1)" # check to see if there was a file found (length of the file name not zero), ELSE find an image based on system if [[ -z "${img}" ]] then img="$(find "/home/pi/Arcade/Marquees" -type f -name "${system}.*" | head -1)" fi # check to see if there was a file found (length of the file name not zero), ELSE use Crash Kitchen logo if [[ -z "${img}" ]] then img="/home/pi/Arcade/Marquees/systems/intro.gif" fi
maybe the path to where the gig/png/jpg are stored? arrrhhhhhh LOL
thanks for your help....i have learnt so much just through this....... -
@britx
cracked it.....a simple $2........ -
Hmm, that's a LOT of buttons.
-
@landyvlad some games use more, some games use less. better over-prepared than under-equipt!
-
i added a (re)Action Cam, a fisheye lens mounted inside the bezel.
it shoots out so you can watch faces people make while playing—more fun than staring at backs.
the camera is connected to the direct interface slot of the pi that controls the LED marquee, running the RPi Cam Web Interface; the feed can only be viewed inside my house's network, it is not connected to the internet. It's just for fun.
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.