TwangLEDGAME/docs/CONTROLS.md

3.6 KiB

Bottoni

Nota: qui "Bottoni" indica ingressi digitali (pulsanti fisici collegati ai pin). Usa src/config.h come fonte di verità per i numeri dei pin.

  • Sinistra/Destra: muovi — pulsanti per spostare il giocatore a sinistra o a destra. Pin: BUTTON_LEFT = GPIO 15, BUTTON_RIGHT = GPIO 2

  • Attacco: wobble — il pulsante di attacco innesca l'azione di gioco chiamata "wobble"; nel firmware questo attiva il flag IN.attack che viene consumato dal loop. Pin: BUTTON_ATTACK = GPIO 4

  • Start: pausa/resume — mette in pausa o riprende il gioco; genera un evento a singolo fronte (vedi IN.startPressedEdge). Pin: BUTTON_START = GPIO 5

Seriale (115200)

  • a, d, w, s - movimenti/azioni (descritti esaustivamente sotto)
  • debug - modalità debug (attiva pattern di prova)
  • restart - riavvia
  • status - stampa stato

Nota: all'avvio il firmware esegue un test LED (R, G, B) per verificare connessione e ordine colori.


Dettagli comandi seriali

Formato riga

  • Ogni comando è una singola riga terminata da newline (Invio).
  • La prima parola è il comando, tutto ciò che segue (dopo il primo spazio) è l'argomento (arg).

Esempi

  • debug (Invio) — entra in modalità debug del gioco; vedrai un pattern di prova sui LED.
  • restart (Invio) — riavvia la scheda (equivale a premere reset).
  • status (Invio) — stampa su seriale informazioni di stato (placeholder).
  • level 2 (Invio) — comando hook futuro: non fa nulla attualmente ma l'argomento viene passato al parser.

Cosa succede nel codice

In pratica:

  • a imposta IN.left = true e IN.right = false (simula pressione del pulsante "sinistra").
  • d imposta IN.right = true e IN.left = false (simula pressione del pulsante "destra").
  • w imposta IN.attack = true (simula l'azione di attacco).
  • s imposta IN.start = true e IN.startPressedEdge = true (simula il pulsante Start e segnala il fronte di salita).

Questi flag vengono letti e gestiti dal ciclo principale (loop) al passo successivo; ad esempio startPressedEdge è pensato come evento a singolo fronte e viene resettato dopo l'uso. Per questo motivo i comandi sono "input simulati": non aspettarti un riscontro sincrono immediato via seriale, ma guarda il comportamento del gioco (LED, suoni, spostamenti) per verificare l'effetto.

Se vuoi simulare un "hold" (tenere premuto) devi ripetere il comando periodicamente o modificare il firmware per mantenere il flag attivo fino a nuovo comando.

Cosa aspettarsi (feedback)

  • Molti comandi non producono echo/ACK automatico: osserva i LED o il comportamento del gioco per conferma.
  • debug attiva pattern visivo; restart riavvia la board e vedrai il log di boot sulla seriale; status stampa testo.

Come inviare comandi (PlatformIO)

  • Apri il monitor seriale:

platformio device monitor --baud 115200

  • Scrivi il comando e premi Invio. Assicurati che il monitor usi newline come terminatore.

Troubleshooting rapido

  • Niente succede: verifica porta COM e baud (115200). Assicurati di premere Invio.
  • Comandi non riconosciuti: usa minuscolo (il parser confronta esattamente le stringhe come nel codice).
  • Porta occupata/instabile: chiudi altre applicazioni che possono accedere alla COM (IDE, tool di upload).

Debug e miglioramenti possibili

  • Se vuoi echo/ACK quando un comando viene ricevuto, posso aggiungere una piccola modifica che stampa OK <cmd> su seriale.
  • Per test automatici puoi anche creare uno script che apre la seriale e invia sequenze di comandi per verificare input e reazioni.

Se vuoi che applichi il cambiamento che aggiunge echo/ACK ai comandi, dimmi e preparo la patch.