Close

Modificación de script retrobat para iluminación del panel

A project log for THE ULTIMATE MINI ARCADE

Classic arcade with all the latest technological advancements, ready for the classics. Enjoy!

srrubioSrRubio 06/04/2026 at 16:340 Comments

En las pruebas que hice, situé la tira en el canal impreso y fui contando los leds que debían encenderse según conveniencia. También he de arreglar los COM usados para las 3 comunicaciones que tengo. El script es un ejemplo de las pruebas que hice. Pero no el definitivo. 

import serial
import serial.tools.list_ports
import sys
import time
import os

# ================= CONFIG =================

COM_RESTRICTOR = "COM7"   # Pro Micro restrictor
COM_ORIENTACION = "COM5"  # Pro Micro giro pantalla
COM_PANEL = "COM5" #Pro Micro LEDs panel

BAUDRATE = 115200

# -------- 4 WAY --------
lista_4 = [
    "pacman", "puckman", "galaga",
    "digdug", "donkeykong", "dkong",
    "frogger"
]

# -------- 8 WAY --------
lista_8 = [
    "sf2", "sf2ce", "sf2hf",
    "ssf2", "mk", "mk2", "mk3", "umk3",
    "kof94", "kof95", "kof96", "kof97",
    "kof98", "kof99",
    "samsho", "samsho2"
]

# -------- VERTICALES --------
lista_vertical = [
    "pacman", "galaga", "dkong", "frogger",
    "1942", "1943", "commando"
]

# -------- 1 BUTTON --------
lista_1BUTTON = [
    "pacman", "galaga"
 ]  
 # -------- 2 BUTTON --------
lista_2BUTTON = [
     "1942", "1943", "commando"
  ]

# ================= FUNCIONES =================

def contiene(lista, rom):
    for item in lista:
        if item in rom:   # coincidencia parcial (clones incluidos)
            return True
    return False


def puerto_disponible(nombre):
    puertos = [p.device for p in serial.tools.list_ports.comports()]
    return nombre in puertos


def enviar(puerto, mensaje):
    if not puerto_disponible(puerto):
        return  # si no está conectado, no hace nada

    try:
        with serial.Serial(puerto, BAUDRATE, timeout=1) as ser:
            time.sleep(1.2)  # necesario por reset del Pro Micro
            ser.write((mensaje + "\n").encode())
    except:
        pass


# ================= MAIN =================

if __name__ == "__main__":

    # 👉 SALIDA DEL JUEGO → HOME
    if len(sys.argv) < 2 or sys.argv[1] == "":
        enviar(COM_RESTRICTOR, "0")  # cuadrado
        enviar(COM_ORIENTACION, "H") # horizontal
        enviar(COM_PANEL, "OFF") #OFF
        sys.exit(0)

    rom_path = sys.argv[1]
    rom = os.path.splitext(os.path.basename(rom_path))[0].lower()

    # ---------------- CONTROL (RESTRICTOR) ----------------
    if contiene(lista_4, rom):
        control = "4"
    elif contiene(lista_8, rom):
        control = "8"
    else:
        control = "0"

    # ---------------- ORIENTACIÓN ----------------
    if contiene(lista_vertical, rom):
        modo = "V"
    else:
        modo = "H"
        
      # ---------------- CONTROLES ----------------
    if contiene(lista_1BUTTON, rom):
        control = "J1"
    elif contiene(lista_2BUTTON, rom):
        control = "J12"
    else:
        control = "OFF"

    # ---------------- ENVÍO ----------------
    enviar(COM_RESTRICTOR, control)
    enviar(COM_ORIENTACION, modo)
    enviar(COM_PANEL, control)

Discussions