• Recent
  • Tags
  • Popular
  • Home
  • Docs
  • Register
  • Login
RetroPie forum home
  • Recent
  • Tags
  • Popular
  • Home
  • Docs
  • Register
  • Login
Please do not post a support request without first reading and following the advice in https://retropie.org.uk/forum/topic/3/read-this-first

Syncing button leds with gameplay

Scheduled Pinned Locked Moved Help and Support
led buttonsled cledspicer
68 Posts 5 Posters 7.1k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G
    gomisensei @hopwon
    last edited by 19 Sept 2023, 02:01

    @hopwon If no ones suggested it yet, advanceMame has a scripting system that can take actions on emulated external outputs such as Led's, and other hardware...

    https://www.advancemame.it/doc-script here is the documentation for the scripting and outputs.

    1 Reply Last reply Reply Quote 1
    • H
      hopwon @Folly
      last edited by 19 Sept 2023, 06:30

      @Folly The computer is telling the truth, you need to populate the /etc/ledspicerd.conf file :)

      But this is fantastic, I will have a go at compiling and then give LR-mame a go. I looked at various scripting options last night and while I can create a counter which will increment every time the credit button is pressed, I could not find a way to decrement it, so I went to bed!

      F 1 Reply Last reply 19 Sept 2023, 07:24 Reply Quote 0
      • F
        Folly @hopwon
        last edited by 19 Sept 2023, 07:24

        @hopwon

        On which hardware do you run retropie ?
        lr-mame can be installed from binary when using rpi.

        Tell me, what script did you make to count the inserted coins and do you use a joystick or keyboard ?

        M H 3 Replies Last reply 19 Sept 2023, 07:34 Reply Quote 1
        • M
          mitu Global Moderator @Folly
          last edited by 19 Sept 2023, 07:34

          @Folly said in Syncing button leds with gameplay:

          On which hardware do you run retropie ?

          First post:

          ... I am using LEDSpicer on RPI4.

          1 Reply Last reply Reply Quote 1
          • H
            hopwon @Folly
            last edited by 19 Sept 2023, 12:12

            @Folly said in Syncing button leds with gameplay:

            Tell me, what script did you make to count the inserted coins and do you use a joystick or keyboard ?

            A bit nasty but:

            I used inputseeker running in background to grep for a credit button being pressed on(6=P1, 7=P2 in my case) and when it successfully finds a 6 or 7 it increments a counter +1.
            You can do it with awk also but I got tired and when to bed :)

            1 Reply Last reply Reply Quote 1
            • H
              hopwon @Folly
              last edited by 19 Sept 2023, 12:13

              @Folly said in Syncing button leds with gameplay:

              lr-mame can be installed from binary when using rpi.

              Installing it now

              F 2 Replies Last reply 19 Sept 2023, 15:11 Reply Quote 0
              • F
                Folly @hopwon
                last edited by 19 Sept 2023, 15:11

                @hopwon

                I will look at ledspicer with inputseeker again.
                Seem a really nice package but I have to take some time to dig into it.
                Hopefully I will grasp it.

                1 Reply Last reply Reply Quote 0
                • F
                  Folly @hopwon
                  last edited by Folly 20 Sept 2023, 18:06

                  @hopwon

                  I uninstalled my previous install of LEDspice.

                  This I what I did :

                  cd ~/Downloads/LEDSpicer-development/
                  ./autogen.sh
                  ./configure --prefix=/usr --sysconfdir=/etc --enable-raspberrypi
                  make
                  sudo make install
                  sudo usermod -a -G users pi #replace user with your username
                  sudo usermod -a -G input pi #replace user with your username
                  sudo cp /usr/share/doc/ledspicer/examples/21-ledspicer.rules /etc/udev/rules.d/
                  sudo chmod 744 /etc/udev/rules.d/21-ledspicer.rules
                  sudo udevadm control --reload-rules && sudo udevadm trigger
                  sudo cp /usr/share/doc/ledspicer/examples/ledspicer.conf /etc
                  ledspicerd -v
                  ledspicerd -d
                  sudo ledspicerd -d #seems to be the way to go with RaspberryPi

                  Running with -d gives :
                  Program terminated by error: Empty devices section

                  Added the controller name in /etc/ledspicer.conf :

                  	<devices
                  		name="RaspberryPi"
                      		boardId="1"
                  >
                  	</devices>
                  

                  or

                  <devices>
                  name="RaspberryPi"
                  boardId="1"
                  </devices>

                  Still no dice.

                  Any help would be appreciated.

                  H 2 Replies Last reply 21 Sept 2023, 07:53 Reply Quote 0
                  • H
                    hopwon @Folly
                    last edited by 21 Sept 2023, 07:53

                    @Folly You need to manually create your ledspicer.conf, I've attached mine to give you some idea (sorry admins no pastebin!), But basically the file maps pins #'s on your LED controller to an "Element", you can then create groups of Elements and address either the group or Element...

                    FYI On this controller I have 2 x Joystick + Trackball, each player has 8 buttons, plus start, credit, hotkey and exit.

                    pi@pacman:~ $ cat /etc/ledspicer.conf 
                    <?xml version="1.0" encoding="UTF-8"?>
                    <LEDSpicer
                        version="1.0"
                        type="Configuration"
                        fps="30"
                        port="16161"
                        colors="webColors"
                        loglevel="Info"
                        userId="1000"
                        groupId="1000"
                        craftProfile="true"
                    >
                        <devices>
                            <device
                                name="UltimarcUltimate"
                                boardId="1"
                            >
                                <element
                                    name="P1_BUTTON1"
                                    red="54"
                                    green="53"
                                    blue="52"
                    		defaultColor="Red"
                                />
                                <element
                                    name="P1_BUTTON2"
                                    red="57"
                                    green="56"
                                    blue="55"
                    		defaultColor="VeryDarkMagenta"
                                />
                                <element
                                    name="P1_BUTTON3"
                                    red="60"
                                    green="59"
                                    blue="58"
                    		defaultColor="Blue"
                                />
                                <element
                                    name="P1_BUTTON4"
                                    red="63"
                                    green="62"
                    		blue="61"
                    		defaultColor="Yellow"
                    	    />
                                <element
                                    name="P1_BUTTON5"
                                    red="66"
                                    green="65"
                    		blue="64"
                    		defaultColor="Salmon"
                    	    />
                                <element
                                    name="P1_BUTTON6"
                                    red="69"
                                    green="68"
                    		blue="67"
                    		defaultColor="Lime"
                    	    />
                                <element
                                    name="P1_BUTTON7"
                                    red="72"
                                    green="71"
                    		blue="70"
                    		defaultColor="Violet"
                    	    />
                                <element
                                    name="P1_BUTTON8"
                                    red="75"
                                    green="74"
                    		blue="73"
                    		defaultColor="VeryDarkYellow"
                    	    />
                                <element
                                    name="P1_START"
                                    red="79"
                                    green="80"
                    		blue="81"
                    		defaultColor="DarkOrange"
                                />
                                <element
                                    name="P1_CREDIT"
                                    red="93"
                                    green="92"
                    		blue="91"
                    		defaultColor="DarkOrange"
                                />
                                <element
                                    name="P1_TRACKBALL"
                                    red="28"
                                    green="29"
                                    blue="30"
                     	        defaultColor="Cyan"
                                />
                                <element
                                    name="P1_JOYSTICK1"
                                    red="49"
                                    green="50"
                    		blue="51"
                    		defaultColor="Lime"
                    	    />
                                <element
                                    name="HOTKEY"
                                    led="85"
                                />
                                <element
                                    name="EXIT_KEY"
                                    led="88"
                                />
                                <element
                                    name="P2_CREDIT"
                                    red="84"
                                    green="83"
                    		blue="82"
                    		defaultColor="DarkOrange"
                                />
                                <element
                                    name="P2_START"
                                    red="78"
                                    green="77"
                    		blue="76"
                    		defaultColor="DarkOrange"
                                />
                                <element
                                    name="P2_BUTTON1"
                                    red="4"
                                    green="5"
                                    blue="6"
                    		defaultColor="Red"
                                />
                                <element
                                    name="P2_BUTTON2"
                                    red="7"
                                    green="8"
                                    blue="9"
                    		defaultColor="Green"
                                />
                                <element
                                    name="P2_BUTTON3"
                                    red="10"
                                    green="11"
                                    blue="12"
                    		defaultColor="Blue"
                                />
                                <element
                                    name="P2_BUTTON4"
                                    red="13"
                                    green="14"
                    		blue="15"
                    		defaultColor="Yellow"
                    	    />
                                <element
                                    name="P2_BUTTON5"
                                    red="16"
                                    green="17"
                    		blue="18"
                    		defaultColor="Salmon"
                    	    />
                                <element
                                    name="P2_BUTTON6"
                                    red="19"
                                    green="20"
                    		blue="21"
                    		defaultColor="Lime"
                    	    />
                                <element
                                    name="P2_BUTTON7"
                                    red="22"
                                    green="23"
                    		blue="24"
                    		defaultColor="Violet"
                    	    />
                                <element
                                    name="P2_BUTTON8"
                                    red="25"
                                    green="26"
                    		blue="27"
                    		defaultColor="VeryDarkYellow"
                    	    />
                                <element
                                    name="P2_JOYSTICK1"
                                    red="1"
                                    green="2"
                    		blue="3"
                    		defaultColor="HotPink"
                    	    />
                            </device>
                        </devices>
                        <restrictors>
                          <restrictor name="ServoStik" boardId="1" player="1" joystick="1" />
                            <!-- Player 2 with ServoStik -->
                          <restrictor name="ServoStik" boardId="1" player="2" joystick="1" />
                        </restrictors>
                        <layout defaultProfile="default">
                            <group name="whole board">
                                <element name="P1_JOYSTICK1"/> 
                    	    <element name="P1_TRACKBALL"/>
                                <element name="P1_START"/>
                                <element name="P1_CREDIT"/>
                                <element name="P1_BUTTON1"/>
                                <element name="P1_BUTTON2"/>
                                <element name="P1_BUTTON3"/>
                                <element name="P1_BUTTON4"/>
                                <element name="P1_BUTTON5"/>
                                <element name="P1_BUTTON6"/>
                                <element name="P1_BUTTON7"/>
                                <element name="P1_BUTTON8"/>
                                <element name="P2_JOYSTICK1"/>
                                <element name="P2_BUTTON1"/>
                                <element name="P2_BUTTON2"/>
                                <element name="P2_BUTTON3"/>
                                <element name="P2_BUTTON4"/>
                                <element name="P2_BUTTON5"/>
                                <element name="P2_BUTTON6"/>
                                <element name="P2_BUTTON7"/>
                                <element name="P2_BUTTON8"/>
                                <element name="P2_CREDIT"/>
                                <element name="P2_START"/>
                            </group>
                            <group name="Player1">
                                <element name="P1_JOYSTICK1"/>
                                <element name="P1_TRACKBALL"/>
                                <element name="P1_START"/>
                                <element name="P1_CREDIT"/>
                                <element name="P1_BUTTON1"/>
                                <element name="P1_BUTTON2"/>
                                <element name="P1_BUTTON3"/>
                                <element name="P1_BUTTON4"/>
                                <element name="P1_BUTTON5"/>
                                <element name="P1_BUTTON6"/>
                                <element name="P1_BUTTON7"/>
                                <element name="P1_BUTTON8"/>
                            </group>    
                            <group name="Player2">
                                <element name="P2_JOYSTICK1"/>
                                <element name="P2_BUTTON1"/>
                                <element name="P2_BUTTON2"/>
                                <element name="P2_BUTTON3"/>
                                <element name="P2_BUTTON4"/>
                                <element name="P2_BUTTON5"/>
                                <element name="P2_BUTTON6"/>
                                <element name="P2_BUTTON7"/>
                                <element name="P2_BUTTON8"/>
                                <element name="P2_CREDIT"/>
                                <element name="P2_START"/>
                            </group>
                            <group name="Players">
                                <element name="P1_JOYSTICK1"/>
                                <element name="P1_TRACKBALL"/>
                                <element name="P1_START"/>
                                <element name="P1_CREDIT"/>
                                <element name="P1_BUTTON1"/>
                                <element name="P1_BUTTON2"/>
                                <element name="P1_BUTTON3"/>
                                <element name="P1_BUTTON4"/>
                                <element name="P1_BUTTON5"/>
                                <element name="P1_BUTTON6"/>
                                <element name="P1_BUTTON7"/>
                                <element name="P1_BUTTON8"/>
                                <element name="P2_JOYSTICK1"/>
                                <element name="P2_BUTTON1"/>
                                <element name="P2_BUTTON2"/>
                                <element name="P2_BUTTON3"/>
                                <element name="P2_BUTTON4"/>
                                <element name="P2_BUTTON5"/>
                                <element name="P2_BUTTON6"/>
                                <element name="P2_BUTTON7"/>
                                <element name="P2_BUTTON8"/>
                                <element name="P2_CREDIT"/>
                                <element name="P2_START"/>
                            </group>
                    	<group name="Whole board as a circle">
                        	    <element name="HOTKEY"/>
                                <element name="P1_CREDIT"/>
                    	    <element name="P1_START"/>
                                <element name="P1_JOYSTICK1"/>
                                <element name="P1_BUTTON5"/>
                                <element name="P1_BUTTON1"/>
                                <element name="P1_BUTTON6"/>
                                <element name="P1_BUTTON2"/>
                                <element name="P1_BUTTON7"/>
                                <element name="P1_BUTTON3"/>
                                <element name="P1_BUTTON8"/>
                                <element name="P1_BUTTON4"/>
                                <element name="P1_TRACKBALL"/>
                                <element name="P2_JOYSTICK1"/>
                                <element name="P2_BUTTON5"/>
                                <element name="P2_BUTTON1"/>
                                <element name="P2_BUTTON6"/>
                                <element name="P2_BUTTON2"/>
                                <element name="P2_BUTTON7"/>
                                <element name="P2_BUTTON3"/>
                                <element name="P2_BUTTON8"/>
                                <element name="P2_BUTTON4"/>
                                <element name="P2_CREDIT"/>
                                <element name="P2_START"/>
                    	</group>
                            <group name="Ctrl keys">
                        	    <element name="HOTKEY"/>
                                <element name="P1_CREDIT"/>
                    	    <element name="P1_START"/>
                                <element name="P2_CREDIT"/>
                                <element name="P2_START"/>
                                <element name="EXIT_KEY"/>
                    	</group>
                            <group name="TopRow">
                    	    <element name="P1_CREDIT"/>
                    	    <element name="P1_START"/>
                                <element name="HOTKEY"/>
                                <element name="EXIT_KEY"/>
                    	    <element name="P2_CREDIT"/>
                    	    <element name="P2_START"/>
                            </group>
                        </layout>
                    </LEDSpicer>
                    
                    
                    1 Reply Last reply Reply Quote 1
                    • H
                      hopwon @Folly
                      last edited by 21 Sept 2023, 07:54

                      @Folly said in Syncing button leds with gameplay:

                      @hopwon

                      I uninstalled my previous install of LEDspice.

                      This I what I did :

                      cd ~/Downloads/LEDSpicer-development/
                      ./autogen.sh
                      ./configure --prefix=/usr --sysconfdir=/etc --enable-raspberrypi
                      make
                      sudo make install
                      sudo usermod -a -G users pi #replace user with your username
                      sudo usermod -a -G input pi #replace user with your username
                      sudo cp /usr/share/doc/ledspicer/examples/21-ledspicer.rules /etc/udev/rules.d/
                      sudo chmod 744 /etc/udev/rules.d/21-ledspicer.rules
                      sudo udevadm control --reload-rules && sudo udevadm trigger
                      sudo cp /usr/share/doc/ledspicer/examples/ledspicer.conf /etc
                      ledspicerd -v
                      ledspicerd -d
                      sudo ledspicerd -d #seems to be the way to go with RaspberryPi

                      Running with -d gives :
                      Program terminated by error: Empty devices section

                      Added the controller name in /etc/ledspicer.conf :

                      	<devices
                      		name="RaspberryPi"
                          		boardId="1"
                      >
                      	</devices>
                      

                      or

                      <devices>
                      name="RaspberryPi"
                      boardId="1"
                      </devices>

                      Still no dice.

                      Any help would be appreciated.

                      Make sure when you are starting for the first time, run the daemon in foreground (-f) as it is the best way to troubleshoot. Its quite verbose in its output so if there is a problem you should get a good indication of exactly what it is.

                      F 1 Reply Last reply 21 Sept 2023, 08:12 Reply Quote 0
                      • F
                        Folly @hopwon
                        last edited by 21 Sept 2023, 08:12

                        @hopwon

                        Thanks, will have a look when I am using my pi.

                        H 1 Reply Last reply 21 Sept 2023, 11:33 Reply Quote 0
                        • H
                          hopwon @Folly
                          last edited by 21 Sept 2023, 11:33

                          @Folly So I managed to get the command line options passed to lr-mame based on the info you provided. I can now see that (I am using Missile Command as a test), led0=0, led1=0, led0=1 led1=1, repeating in the console for any button press.
                          This tells me (I think) that mame is making two led's flash and thats it. No specific output regarding credit or I could be wrong.

                          From runcommand.log using -output console

                          led0 = 1
                          led0 = 0
                          led0 = 1
                          led0 = 0
                          led0 = 1
                          led0 = 0
                          led0 = 1
                          led0 = 0
                          led0 = 1
                          led1 = 1
                          led1 = 0
                          led0 = 0
                          

                          These represent a button press, I think one press = 4 log entries

                          F 2 Replies Last reply 21 Sept 2023, 15:36 Reply Quote 0
                          • F
                            Folly @hopwon
                            last edited by Folly 21 Sept 2023, 15:36

                            @hopwon

                            Yes indeed that is correct.

                            It's jsut how the original hardware worked and that is implemented in mame.
                            It's basically the same with the galaga example I used before, only here you have to add 2 credits for 1 player and 4 credits for 2 players.

                            What you want is not implemented in mame so you need to get the information in an other way just like you did with inputseeker.
                            I tested that and indeed reading event becomes very easy but you need to add a whole script for doing stuff with that information.

                            I see the problem getting some uniform data for every game it seems a bit different.
                            Basically it could mean that for every game you need to make a script.

                            If you want more advanced ways you could look at mame lua plugin scripts.
                            With that you might be able to extract data in a different / better way.
                            FYI I used them for tests but I never wrote them.

                            H 1 Reply Last reply 21 Sept 2023, 17:25 Reply Quote 0
                            • H
                              hopwon @Folly
                              last edited by 21 Sept 2023, 17:25

                              @Folly @MeduZaPaT talks about doing the part to make credit flash here:

                              link text

                              If there was a way to set a counter or write to an output, then that's the solution...

                              F 1 Reply Last reply 21 Sept 2023, 19:29 Reply Quote 0
                              • F
                                Folly @hopwon
                                last edited by Folly 21 Sept 2023, 19:29

                                @hopwon

                                Ok, I used your ledspicer.conf and customised it for use with RaspberryPi (GPIO).
                                For error sake I made all red, green and blue use the same pin (red=4, green=5 and blue=6) and added an empty profile which is explained over here.

                                Now I don't get errors anymore when running :

                                ledspicerd -d
                                

                                Then I tried :

                                ledspicerd -f
                                

                                That gave me :

                                2023-09-21 21:23:41 initCheckPermitted: 
                                +---------------------------------------------------------+
                                |Sorry, you don't have permission to run this program.    |
                                |Try running as root, e.g. precede the command with sudo. |
                                +---------------------------------------------------------+
                                Program terminated by error: Failed to initialized Raspberry PI GPIO
                                

                                So now I know RaspberryPi needs running with sudo, like this :

                                sudo ledspicerd -f
                                

                                I might have to check ledspicer.conf again for correct values and then I have to add some game profiles.
                                Would like to check first if the mame "-output network" is detected without using emulationstation.

                                sudo ledspicerd -f should do that trick right ?

                                Will have look later again.

                                H 1 Reply Last reply 21 Sept 2023, 19:35 Reply Quote 0
                                • H
                                  hopwon @Folly
                                  last edited by 21 Sept 2023, 19:35

                                  @Folly the -f option runs in foreground so yes, you should see something...

                                  F 2 Replies Last reply 22 Sept 2023, 02:31 Reply Quote 0
                                  • F
                                    Folly @hopwon
                                    last edited by 22 Sept 2023, 02:27

                                    @hopwon said in Syncing button leds with gameplay:

                                    These represent a button press, I think one press = 4 log entries

                                    Missed that part.
                                    No they aren't really button presses.
                                    On the other end you could see it that way but inserting a coin while playing the game does nothing.
                                    Taking galaga as example, it's that led0 goes on and off after inserting a coin and when the start button is not pressed yet and not playing the game.
                                    For missile that is 2 coins (led0) and 4 coins(led1).

                                    1 Reply Last reply Reply Quote 0
                                    • F
                                      Folly @hopwon
                                      last edited by 22 Sept 2023, 02:31

                                      @hopwon

                                      Was able to test the led on GPIO pin 4 with this :

                                      pi@raspberrypi:~ $ sudo ledspicerd -l
                                      Test LEDs (q to quit)
                                      
                                      Select a Led (r to reset, q to quit):
                                      4
                                      
                                      Select a Led (r to reset, q to quit):
                                      r
                                      
                                      Select a Led (r to reset, q to quit):
                                      q
                                      

                                      So basically ledspicer is working.
                                      Have to look at the game profiles now.

                                      1 Reply Last reply Reply Quote 1
                                      • F
                                        Folly @hopwon
                                        last edited by Folly 22 Sept 2023, 16:17

                                        @hopwon

                                        It seems very hard to understand the docs and how everything actually works ;-(

                                        I am struggling with creating a single game input xml in /usr/share/ledspicer/profiles/arcade.
                                        I added galaga in /usr/share/ledspicer/profiles/profile_arcade.xml like this :

                                        <?xml version="1.0" encoding="UTF-8"?>
                                        <LEDSpicer
                                        	version="1.0"
                                        	type="Profile"
                                        	backgroundColor="Black"
                                        >
                                        	<inputs>
                                        		<input name="galaga"/>
                                        	</inputs>
                                        </LEDSpicer>
                                        

                                        I tried to begin with the example from here.
                                        Though I have to edit the file somehow as it is not accepted.
                                        Do you have an example for me ?
                                        Or, do you know what to edit ?

                                        I read over here that you can also use a "craftProfiles" option for multiple games.
                                        "LEDSpicer will attempt to use the pre-scraped data from mame (gameData.xml) along with controls.ini (if available) and colors.ini (if available) to set lighting based on the games control scheme. So... one profile_arcade.xml file to manage thousands of roms."

                                        They also use the emitter part.
                                        Is that nessesary to use ?

                                        H 1 Reply Last reply 22 Sept 2023, 18:53 Reply Quote 0
                                        • H
                                          hopwon @Folly
                                          last edited by 22 Sept 2023, 18:53

                                          @Folly I use craft profiles, it only works for mame. You need a profile in the profiles dir called profile_arcade.xml and then you call emitter from "runcommand_onstart.sh" with LoadProfileByEmulator

                                          Craft profiles really take the heavy lifting out of LEDSpicer config and its an awesome feature.

                                          This is my profile_arcade.xml - there is nothing in it...

                                          <?xml version="1.0" encoding="UTF-8"?>
                                          <LEDSpicer
                                          	version="1.0"
                                          	type="Profile"
                                          	backgroundColor="Black"
                                          >
                                          </LEDSpicer>
                                          

                                          After that LEDSpicer takes care of the rest.

                                          I'll try and do a bit more of a write up but Friday night is calling! But check out this link for a guide on as I used it to eventually decode and get LEDSpicer running...

                                          LEDSpicer on attractmode

                                          F 3 Replies Last reply 22 Sept 2023, 19:12 Reply Quote 0
                                          33 out of 68
                                          • First post
                                            33/68
                                            Last post

                                          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.

                                            This community forum collects and processes your personal information.
                                            consent.not_received