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)
SrRubio
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.