73 lines
3.6 KiB
Markdown
73 lines
3.6 KiB
Markdown
# 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.
|