Introduzione ad Arduino - Controlli Arcade

Area dedicata alle guide tecniche,consigli e suggerimenti.
Avatar utente
Barito
Extreme Arcader
Extreme Arcader
Messaggi: 1856
Iscritto il: 08/12/2015, 19:18
Reputation: 500

Introduzione ad Arduino - Controlli Arcade

Messaggio da Barito » 12/04/2016, 11:47

Scrivo una introduzione ad Arduino perchè queste schedine sono uno strumento tanto potente quanto ignorato in ambito arcade (o almeno in Italia ... paradossalmente visto che Arduino nasce proprio nel nostro Paese).
Il linguaggio da me utilizzato sarà "base base" e poco "tecnico", quindi i "tennici" sono pregati di non rompere i co....ni: questa guida non è indirizzata a voi! ;) Inoltre non sarò esaustivo nelle spiegazioni: si trova un sacco di documentazione ben scritta nel caso si volesse approfondire l'argomento

Cos'è Arduino?
La descrizione più semplice di Arduino potrebbe essere: Arduino è una famiglia di schede di prototipazione facili da programmare. In realtà, Arduino è molto di più: Arduino è si una famiglia di schedine a microcontrollore che si differenziano prevalentemente per il numero di ingressi/uscite e microcontrollore utilizzato, ma è anche un ambiente di sviluppo semplificato, una vasta collezione di librerie sviluppate da appassionati e una comunità molto attiva. Tutto open source.

Cosa c'entra Arduino con il mondo arcade?
Devi sapere che esiste un gruppo di schede Arduino capace di emulare le comuni periferiche con le quali mandiamo input ai nostri PC: tastiera, mouse, joypad. Questo significa che tu puoi dare in ingresso alla schedina un segnale digitale (es. la pressione di un tasto del cabinato) o analogico (es. la rotazione di un volante di un cabinato di guida) e la scheda può far credere al PC che questi input siano la pressione di un tasto della tastiera, il movimento di un mouse, oppure il movimento di una leva di un joypad analogico. Tutto senza software aggiuntivi come joy2key, script autoit/autohotkey o altro. Queste schedine Arduino possono essere utilizzate in maniera molto diretta per interfacciare tutti i tipi di controlli arcade (tasti, stick, volanti, etc.) con tutti i software comunemente usati in ambito emulazione arcade.
Ad oggi il gruppo di schede capaci di emulare nativamente tastiera, mouse o pad include Arduino Micro, Arduino Leonardo e Arduino Due. Esistono poi schede di manifattura cinese, clone di dette schedine, come ad esempio Pro Micro, le quali supportano gli stessi ambienti di sviluppo e librerire ad una frazione del prezzo. Le più comuni Arduino Uno, Nano, Mini, NON vanno bene.

Un primo esempio - InterfASD/IPac fai-da-te
Il primo esempio che voglio mostrarti rigurada l'interfacciamento di tasti e joystick digitali di una plancia arcade al PC. In pratica, vedremo come programmare la schedina per ricevere in ingresso la pressione dei tasti o direzioni del joystick della plancia di un cab e mandare al Pc la pressione emulata di tasti della tastiera... sostanzialmente una InterfASD o Ipac fatta in casa!
Al massimo con Arduino Leonardo o Micro potrai gestire 20 input, mentre con pro micro (il clone cinese) 18 input. Ti consiglio vivamente la Leonardo, dato che ha dimensioni un po' maggiori (il che ne facilita l'uso) ed ha un numero maggiore di pin.

Hardware - cosa serve
- schedina arduino Micro o Leonardo (o clone, es. Pro Micro);
- saldatore con punta fine;
- stagno da 0.8 mm o inferiore.
Poi naturalmente servirà una plancia comandi da interfacciare e un PC con il tuo emulatore preferito, ma quelli già li hai di sicuro ;).

Software
Per poter programmare la schedina Arduino scelta bisogna scaricare l'interfaccia grafica in cui scrivere il codice con i comandi che si vogliono impartire. Questa interfaccia si chiama IDE (Integrated Development Environment) e ed è sostanzialmente un editor di testo e compilatore. Una volta scaricato l'IDE per il Sistema Operativo in uso (Win, Mac, Linux), va scompattato; all'interno del pacchetto troverai sia l'eseguibile dell'IDE che i driver necessari all'installazione della schedina. NON SERVE ALTRO.

Installazione driver Arduino
Semplicissimo (riporto la procedura per win): collega la schedina ad una porta USB del PC, lascia che win faccia la sua ricerca e riporti la necessità di installare i driver per la periferica, indica a win la cartella "drivers" contenuta nel pacchetto che hai scaricato prima e lascia che win lo installi. Non lasciare che win faccia la ricerca in rete. Il driver non è certificato, quindi quando win ti chiede se sei sicuro di volerlo installare accetta l'installazione cliccando sul tasto "si, cazzo" :). Cominciamo!

Collegamenti
il collegamento di un tasto alla schedina Arduino si fa secondo lo schema seguente
connessione_tasto.png
La freccia rossa indica il connettore USB da collegare al PC. La scheda si alimenta direttamente da quello, senza bisogno di altre alimentazioni (ci sono altri connettori di alimentazione sulla scheda e altri modi di alimentazione, ma a noi basta questo).

Codice
Una volta lanciato l'eseguibile comparirà una finestra come questa:
sketch1.png
Questo è l'editor in cui scrivere il codice (chiamato "sketch" in gergo Arduino). Uno sketch per dire ad Arduino di simulare la pressione del tasto "a" della tastiera quando arriva un segnale di pressione tasto sul pin "2" (cioè quando il pin viene cortocircuitato a massa) è il seguente. Nel codice ci sono tutti i commenti che ti servono per capire cosa ogni riga stia dicendo alla schedina di fare (tutto ciò che viene scritto dopo il doppio slash non viene visto dal codice e si usa appunto per inserire commenti).
sketch3.png
Il quale, tolti tutti i commenti, si riduce a questa cazzatina:
sketch2.png
(Di seguito il codice in un formato che puoi copiare)

Codice: Seleziona tutto

#include <Keyboard.h>
void setup() { 
Keyboard.begin(); 
pinMode(2, INPUT_PULLUP); 
} 
void loop() { 
int statoPulsante2 = digitalRead(2); 
if (statoPulsante2 == LOW) {Keyboard.press(97);} 
else {Keyboard.release(97);} 
} 


Se ora dal menu a tendina dell'IDE selezioni "strumenti", poi il tipo di "scheda" che stai usando e la "porta" a cui questa è collegata, puoi caricare sulla schedina il programma che hai scritto premendo la freccia verde in alto a sinistra dell'IDE... dopo pochi secondi, se la compilazione e il caricamento saranno andati a buon fine, la tua schedina sarà programmata (la scheda può essere programmata quante volte vuoi, quindi se vuoi provare subito non ti preoccupare!!!).
Con queste quattro righe di codice hai creato una scheda ipac/interfASD capace di tradurre la pressione di un tasto della tua plancia nella pressione di un tasto della tastiera. Volendo è possibile cambiare il tipo di tasto che la schedina simulerà; per fare questo è sufficiente scrivere al posto del codice decimale ASCII di "a", il numero/codice decimale ASCII della lettera di interesse.
Ti linko di seguito una tabella ASCII che puoi usare (fai riferimento alle colonne "Dec" e "Char").

Immagine

Per aggiungere altri tasti, sarà sufficiente aggiungere le linee di testo analogamente a quanto visto sopra.
Ok, ti faccio un esempio per un'altro tasto, ma poi basta :D (aggiungo l'emulazione pressione tasto tastiera "b" con un pulsante collegato al pin "3" di Arduino).

Codice: Seleziona tutto

#include <Keyboard.h>
void setup() { 
Keyboard.begin(); 
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP); } 
void loop() { 
int statoPulsante2 = digitalRead(2); 
int statoPulsante3 = digitalRead(3); 
if (statoPulsante2 == LOW) {Keyboard.press(97);} 
else {Keyboard.release(97);} 
if (statoPulsante3 == LOW) {Keyboard.press(98);} 
else {Keyboard.release(98);} 

} 


Semplice, no?! [up.gif]

Puoi usare i pin analogici (A0, A1, A2 etc.) come pin digitali.
Come già scritto, al massimo con Arduino leonardo o micro potrai gestire 20 input, mentre con pro micro (il clone cinese) 18 input. Nel caso ti servisse un numero maggiore di input, si può optare per una soluzione tipo questa.

Secondo esempio - interfaccia per volanti Arcade a potenziometro
Eccoci con un secondo esempio che ti tornerà sicuramente utile: l'interfacciamento di uno (o più) volanti arcade a potenziometro. Come per l'esempio precedente, serve una schedina Arduino Leonardo o Micro (o Pro Micro).
La soluzione con Arduino Leonardo o micro o pro micro ha il vantaggio, rispetto ad un joyhack, di permetterti di utilizzare il potenziometro originale del volante direttamente (solitamente da 5 KOhm), senza bisogno di sostituirlo con uno da 10 kOhm (valore tipico dei joypad a leve analogiche).
Sfrutteremo una libreria chiamata "joystick" per trasformare i movimenti del volante (più precisamente del potenziometro del volante) in movimenti di una leva analogica. Tutti i dettagli di questa libreria e i link per il download li trovi >>QUI<<.
Per installare la libreria devi semplicemente copiare ed incollare la cartella "joystick" nella cartella "libraries" nella root di arduino.exe.

Collegamenti
Per il collegamento del potenziometro del volante ad arduino, vedi lo schema seguente:
pot.png
In pratica, i due pin esterni vanno collegati l'uno a massa (GND), l'altro a +5V, mentre il pin centrale, quello che manda il segnale vero e proprio ad Arduino, va collegato ad uno degli ingressi analogici del microcontrollore (A2 in figura, ma puoi usare uno qualsiasi dei pin analogici A0-A5, basta che modifichi adeguatamente lo sketch).

Codice
Lo sketch che dovrai caricare sulla schedina Arduino sarà tipo il seguente:
volante arcade.png
... che, tolti i commenti, si riduce alla solita cazzatina :)

Di seguito lo sketch in un formato più facile da copiare:

Codice: Seleziona tutto

 
 #include <Joystick.h>

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_JOYSTICK,
  0, 0,                  // numero di tasti del joystick, numero di Hat Switch 
  true, false, false,    // Asse X, ma no asse Y e Z
  false, false, false,   // No Rx, Ry, o Rz
  false, false,          // No rudder o throttle
  false, false, false);  // No accelerator, brake, o steering

int letturaPot;
int deadZone = 5;

void setup() {

 Joystick.begin();
 Joystick.setXAxisRange(0, 1023);
 
}

void loop() {

letturaPot = analogRead(A2);

if(letturaPot >512 + deadZone || letturaPot < 512 - deadZone){ 
  Joystick.setXAxis(letturaPot);}
else {Joystick.setXAxis(512);}

}
 


Il valore di dead zone può essere cambiato a piacimento, naturalmente; in un volante arcade conviene settarlo a zero.
Se la rotazione del volante risulta invertita puoi invertire i valori di range, es.

Codice: Seleziona tutto

Joystick.setXAxisRange(1023, 0);
Se ruotando il volante non tiesci ad ottenere una sterzata completa, basta ridurre il range in

Codice: Seleziona tutto

Joystick.setXAxisRange(0, 1023);
con, per esempio

Codice: Seleziona tutto

Joystick.setXAxisRange(200, 823);
Per verificare la calibrazione, la procedura è la stessa identica che useresti per un volante interfacciato via joyhack:

- apri da pannello di controllo la schermata di test del game controller
testscreen.png
- se lo hai già fissato alla ghiera/ingranaggio del volante, sblocca il potenziometro (ci sono di solito due grani che lo tengono in posizione);

- aiutandoti con la schermata di test di qui sopra posiziona il potenziometro nella sua posizione centrale;

- blocca il potenziometro in posizione avvitando i due grani.

ok, tutto bello... ma mi servono due Arduini se voglio usare sia il volante che i tasti come spiegato nel primo esempio?
No, basta UNA schedina: unendo il codice appena visto con quello del primo esempio, potrai controllare con una singola schedina Arduino sia volante che tasti digitali.
Non solo! Se hai altri controlli analogici a potenziometro (i pedali per esempio, o uno spinner non ottico) potrai collegarli in maniera simile al volante (uno per ogni ingresso analogico della schedina Arduino).

Per fare un parallelo con prodotti in commercio, con una schedina Ardunio e con i codici (adeguatamente modificati) che stiamo scrivendo potrai avere una specie di A-Pac fatta in casa! ...e non abbiamo ancora finito ... prossimamente aggiungeremo funzionalità alla nostra schedina ;)

Terzo esempio - interfaccia per encoder ottici (volanti, spinner, trackball, etc.)
Veniamo al terzo esempio. Questo estende l'uso della nostra schedina al controllo di volanti e spinner ottici rendendola, di fatto, una OptiPac fatta in casa. Con questo esempio, inoltre, copriamo praticamente tutti gli usi della SmartASD!
Io ho testato il codice con uno spinner Taito.

Sono confidente che funzioni con qualsiasi unità ottica Arcade.

Questi gli elementi fondamentali dell'encoder ottico:
optical_encoder.jpg
Come puoi vedere in foto, c'è una "rotella" (disco) con una serie di fori rettangolari o trapezoidali omogeneamente spaziati fra loro. Questo è il primo elemento fondamentale di un encoder ottico. Nel mondo Arcade era anche in uso una "tazza" dentata al posto della rotella (si trova ad esempio in alcuni volanti Atari). Il funzionamento è il medesimo.
Il secondo elemento fondamentale è costituito da uno switch ottico. Un optoswitch, come suggerisce il termine, è un interruttore ottico.
Un optoswitch è costituito da due elementi: un rilevatore di radiazione infrarossa e una sorgente di tale radiazione. Quando fra questi due elementi non viene frapposto niente, il ricevitore "vede" la radiazione IR e l'optoswitch si comporta come se un pulsante venisse premuto (circuito chiuso); quando viene frapposto qualcosa che blocca la radiazione IR, il ricevitore non vede più la radiazione e l'opto si comporta come un tasto non premuto (circuito aperto).
Ecco un paio di optoswitch nuovi, visti da due angolature
optical_switches.jpg
Se si frappone la rotella dentata/forata ad uno switch ottico, abbiamo il nostro encoder ottico.
La rotella, ruotando, interrompe ciclicamente il fascio IR che raggiunge il ricevitore, consentendo di determinare se questa sia in movimento e con quale velocità.

Ma come si fa a sapere in quale direzione la rotella sta girando?
Ecco che entra in gioco il secondo switch: paragonando il segnale dell'uno e dell'altro optoswitch è possibile determinare anche la direzione di rotazione. Per comprendere meglio questo passaggio, ti rimando ad un ottimo javascript che trovi a >>questo link<<. Nella pagina linkata c'è anche una libreria apposita per encoder ottici, ma non ci serve.

Collegamenti
In funzione della schedina su cui sono montati gli opto, il pinout può essere differente fra spinner e spinner (o volante e volante etc.). In generale, troverai quattro pin: uno per massa, uno per +5V e uno per il segnale di ogni opto (quindi due in totale, che chiameremo A e B da qui in poi).
Il collegamento per massa e +5V su Arduino sono banali; i pin relativi al segnale degli opto vanno collegati a due pin di arduino (nell'esempio ho usato il pin "2" per opto A e il pin "3" per opto B). Sfogliando alcuni manuali e dalle info reperibili in rete, si vede che, per esempio, il pinout delle schedine degli spinner Taito è

1 - opto 1
2 - +5V
3 - GND
4 - opto 2

Dagli schemi reperibili, anche i volanti Atari del cab Super sprint hanno lo stesso pinout. Sempre meglio controllare comunque.
Durante i miei test, ho notato che per far funzionare l'encoder Taito è anche necessario collegare fra segnale (sia di Pin A che di Pin B) e massa, una resistenza da 10KOhm. Guardando gli schemi dello schedino Taito, onestamente non ho ben capito perchè (un parallelo fra una resistenza da 150 Ohm e una da 10KOhm è pur sempre una resistenza di circa 147 Ohm), ma tant'è.

Codice
Di seguito il codice per controllo a bassa risoluzione (cosiddetto "1X Counting") dello spinner; è possibile aumentare la risoluzione a 2X, 3X o 4X. Da quanto ho potuto vedere, la bassa risoluzione va più che bene per i nostri usi.
Ecco lo sketch (con commenti)...
sketch4.png
... senza commenti ...
sketch5.png
... e la versione semplice da copiare (senza commenti)

Codice: Seleziona tutto

 
 #include <Mouse.h> 

 int encoderPinAPrecedente = HIGH; 
 int encoderPinAAttuale = HIGH; 
 int encoderPinBAttuale = HIGH; 

 void setup() { 

 pinMode (2,INPUT_PULLUP); //OptA
 pinMode (3,INPUT_PULLUP); //OptB
 
 Mouse.begin(); 
 
 }
 
  void loop() { 
 
  encoderPinAAttuale = digitalRead(2);
  encoderPinBAttuale = digitalRead(3); 
  
  if (encoderPinAPrecedente == HIGH && encoderPinAAttuale == LOW){ 
     if(encoderPinBAttuale == HIGH){ 
        Mouse.move(2, 0, 0);} 
      else{ 
        Mouse.move(-2, 0, 0);} 
  } 
  
  encoderPinAPrecedente = encoderPinAAttuale; 
  
  }
   


Nota che nel codice viene considerato il solo cambio di stato del pin A da HIGH (alto) a LOW (basso); lo stato di B determina solo la direzione. Se prendessimo in esame anche il cambio di stato da LOW a HIGH del pin A, raddoppieremmo la risoluzione; potremmo triplicare o quadruplicare la risoluzione prendendo in considerazione anche i cambi di stato di B (HIGH->LOW, LOW->HIGH), ma come detto la bassa risoluzione mi sembra più che buona per i nostri usi e tiene il codice leggero e reattivo.

Se il movimento del mouse è troppo lento, ti basta aumentare il valore di "movimentoAsseX".
Se il movimento del mouse è troppo "scattoso", puoi aumentare la risoluzione.
Se il movimento del mouse è invertito, puoi invertire il collegamento di Pin A e PinB.

Come detto, per il collegamento di ogni spinner (o volante ottico) sono necessari due ingressi della schedina Arduino. Nel caso di una trackball, essendo due gli assi da gestire, ci vorranno quattro ingressi. Tieni presente queste considerazioni nel calcolo dei pin gestibili nel tuo progetto e ricorda che puoi usare più schedine Arduino contemporaneamente, se necessario, e che puoi usare Arduino contemporanemante ad altre interfacce se vuoi (ad esempio se il tuo cab arcade è collegato con una JammASD o J-Pac, puoi mettere anche una Arduino che gestisca gli spinner e/o le trackball).

Se vuoi approfondire l'argomento "Arduino ed encoder ottici" ti rimando a >>questo link<<.
Altre info utili >>QUI<< e >>QUI<<.

Cos'altro si può fare di figo con questa scheda?
Come avrai capito, non ci sono praticamente limiti; idealmente puoi interfacciare qualsiasi tipo di plancia arcade e tradurre i suoi input in pressioni di tasti della tastiera, movimenti del mouse o del joypad a tuo piacimento. Ad esempio, è possibile creare un'interfaccia per flipper virtuale con nudge analogico, oppure creare un simulatore di moto partendo da una motoretta arcade tipo quella usata in Suzuka 8 Hours di Namco. Non ti ho ancora convinto? E se ti dicessi che puoi creare una interfaccia PC to jamma come JammASD/Jpac alla metà del prezzo? [icon_wink.gif]
Si possono addirittura interfacciare plancie arcade complesse e atipiche come per esempio la plancia Densha De Go! (no, dico davvero).
Non hai i permessi necessari per visualizzare i file allegati in questo messaggio.
Non é vero che siamo quello che mangiamo: siamo quello che non dimentichiamo.


Avatar utente
bisus
Arcade Maniac
Arcade Maniac
Messaggi: 2924
Iscritto il: 03/11/2015, 2:16
Reputation: 486
Località: Firenze
Contatta:

Re: Interfaccia Arcade con Arduino

Messaggio da bisus » 12/04/2016, 11:59

Grande Barito, ottima guida e alternativa
Segnalazioni problemi Forum
Non esitate a contattarmi in privato se doveste avere problemi sul forum http://www.arcademania.eu
grazie


Avatar utente
giuppo
Site Admin
Site Admin
Messaggi: 3316
Iscritto il: 03/11/2015, 7:46
Medaglie: 27
Reputation: 529
Località: San Salvo
Nazione: Italia
:
Medaglia d'oro Medaglia d'argento Medaglia di bronzo Medaglia di legno I - Team Battle Maestro Yoda

Re: Interfaccia Arcade con Arduino

Messaggio da giuppo » 12/04/2016, 13:26

Perfetto [clap2.gif] [clap2.gif] [clap2.gif]
Arcademania the forum around you


Avatar utente
Moket
Arcade Maniac
Arcade Maniac
Messaggi: 2778
Iscritto il: 03/11/2015, 9:41
Medaglie: 4
Reputation: 473
Località: Roma
:
Medaglia d'oro Medaglia di bronzo Medaglia di legno

Re: Interfaccia Arcade con Arduino

Messaggio da Moket » 12/04/2016, 13:42

Na bestia!!!
<< Sono il padre dei famigerati Bacheca Boys >>


Avatar utente
bisus
Arcade Maniac
Arcade Maniac
Messaggi: 2924
Iscritto il: 03/11/2015, 2:16
Reputation: 486
Località: Firenze
Contatta:

Re: Interfaccia Arcade con Arduino

Messaggio da bisus » 12/04/2016, 13:43

cavolo sto vedendo cloni su ebay a 9 euro, se fossero 100% compatibili sarebbe eccezionale
Segnalazioni problemi Forum
Non esitate a contattarmi in privato se doveste avere problemi sul forum http://www.arcademania.eu
grazie


Avatar utente
Barito
Extreme Arcader
Extreme Arcader
Messaggi: 1856
Iscritto il: 08/12/2015, 19:18
Reputation: 500

Re: Interfaccia Arcade con Arduino

Messaggio da Barito » 12/04/2016, 14:07

Anche a 7 euro e si, sono 100% compatibili ;)
Chiaro che acquistando il prodotto originale si supporta il progetto, quindi almeno una originale bisognerebbe comprarla (io l'ho fatto).
Non é vero che siamo quello che mangiamo: siamo quello che non dimentichiamo.


Avatar utente
bisus
Arcade Maniac
Arcade Maniac
Messaggi: 2924
Iscritto il: 03/11/2015, 2:16
Reputation: 486
Località: Firenze
Contatta:

Re: Interfaccia Arcade con Arduino

Messaggio da bisus » 12/04/2016, 14:13

ti gà rason
Segnalazioni problemi Forum
Non esitate a contattarmi in privato se doveste avere problemi sul forum http://www.arcademania.eu
grazie


Avatar utente
biasini
Extreme Arcader
Extreme Arcader
Messaggi: 2132
Iscritto il: 03/11/2015, 17:38
Reputation: 370
Località: Roma

Re: Interfaccia Arcade con Arduino

Messaggio da biasini » 12/04/2016, 17:06

Ottimo thread, complimenti

Inviato dal mio X16 utilizzando Tapatalk


bartx
Gamer
Gamer
Messaggi: 3
Iscritto il: 19/04/2016, 12:54
Reputation: 1

Re: Interfaccia Arcade con Arduino

Messaggio da bartx » 19/04/2016, 13:20

io ne ho decine di queste schedine! le utilizzo per le cose piu impensabili!
Effettivamente è un ottima idea usarla come interfaccia, io stesso l'avevo usata, ma ho riscontrato i seguenti limiti:

Numero di inputs ridotto per alcune applicazioni (per esempio 2 giocatori con 9 pulsanti ciascuno), per superare questo limite bisogna acquistare un mega, che costa piu di un interfaccia usb bella e fatta, per 2 postazioni e 23 inputs (mi sembra che io l'abbia pagata 12-13 euro), la cosa delle resistenze per moltiplicare i tasti funziona, ma non deve mai accadere di premere piu tasti contemporaneamente affinche lo sketch interpreti correttamente gli inputs, cosa praticamente impossibile in un joy arcade!

Senza considerare il tempo per allacciarla ed eventulmente creare una shield ad-hoc.

Per quanto riguarda la parte analogica, è un'altra storia....
Premesso che esistano, o si riescano a creare dei driver ah-hoc, sicuramente sarebbe interessante l'applicazione e l'uso di arduino per volanti


Avatar utente
Barito
Extreme Arcader
Extreme Arcader
Messaggi: 1856
Iscritto il: 08/12/2015, 19:18
Reputation: 500

Re: Interfaccia Arcade con Arduino

Messaggio da Barito » 19/04/2016, 13:31

Diciamo che due joystick a 4 direzioni, P1 start, P2 start e altri 4 tasti per ogni giocatore (5 nel caso di arduino Leonardo) non é un limite inaccettabile.
Se poi consideri che al partitore resistivo puoi assegnare tasti che non usi mai contemporaneamente (es. Start, credito, etc) il limite si assottiglia ulteriormente. Stiamo parlando di una scheda da 7-8 euro.
La realizzazione porta via massimo due/tre ore, se non sei pratico, niente di che. Le shield sono seghe per venditori/mercanti: con una millefori e un po' di cavo fai tutto.
Il volante non richiede librerie particolari (a parte la "joystick" già scritta e disponibile): non é ne più ne meno che un semplice potenziometro.
Arduino mega non va bene perché non emula nativamente tastiera/mouse, quindi dovresti ricorrere alla linea seriale, con un programma nel pc che legga il seriale ed emuli lui gli input al pc in pressioni della tastiera. Se ti servono tanti ingressi puoi usare una Arduino DUE: emula tastiera/mouse/joy ed ha 66 (SESSANTASEI) ingressi ... [flexion.gif]
Non é vero che siamo quello che mangiamo: siamo quello che non dimentichiamo.


bartx
Gamer
Gamer
Messaggi: 3
Iscritto il: 19/04/2016, 12:54
Reputation: 1

Re: Interfaccia Arcade con Arduino

Messaggio da bartx » 19/04/2016, 14:51

io non parlavo di shiedl acquistate, ma di un'interfaccia un po piu solida, che si fa tranquillamente con una scheda millefori, e un pò di componentistica.... effettivamente non avevo pensato ad usare il partitore resistivo per i pulsanti meno utilizzati....
non ho avuto ancora modo di esplorare il funzionamento dei volanti, approfondirò a breve, visto che appena finisco il mio cab arcade, comincerò a ristrutturare i 2 sega rally....

Che io sappia nessun arduino emula direttamente tastiera e mouse, bisogna riflasharlo ed installare dei drivers specifici, in ogni caso anche l'utilizzo della seriale non sarebbe da escludere, come anche il bluethooth, è molto facile scrivere protocolli di comunicazione a questo scopo....

In ogni caso questo tread è pieno di spunti e davvero utile! avevo gia pensato di usare arduino per il sega rally, visto che i comandi solo molto meno di quelli del mio controller personalizzato per arcade...


Avatar utente
Barito
Extreme Arcader
Extreme Arcader
Messaggi: 1856
Iscritto il: 08/12/2015, 19:18
Reputation: 500

Re: Interfaccia Arcade con Arduino

Messaggio da Barito » 19/04/2016, 14:54

Arduino leonardo e micro emulano diretto, no flash no complicazioni, plug & play, (giuro :))
Non é vero che siamo quello che mangiamo: siamo quello che non dimentichiamo.


Avatar utente
Barito
Extreme Arcader
Extreme Arcader
Messaggi: 1856
Iscritto il: 08/12/2015, 19:18
Reputation: 500

Re: Interfaccia Arcade con Arduino

Messaggio da Barito » 26/04/2016, 14:07

Ragazzi, ho aggiornato la guida con un secondo esempio: interfaccia di un volante arcade a potenziometro :)
Non é vero che siamo quello che mangiamo: siamo quello che non dimentichiamo.


Avatar utente
nik
Super Arcader
Super Arcader
Messaggi: 883
Iscritto il: 08/12/2015, 12:39
Medaglie: 22
Reputation: 332
Località: Udine
:
Medaglia d'oro Medaglia d'argento Medaglia di bronzo Medaglia di legno

Re: Interfaccia Arcade con Arduino

Messaggio da nik » 26/04/2016, 14:22

così mi ingolosisci, appena ho tempo la guardo bene [clap2.gif]
PARTECIPA ANCHE TU ALLE SFIDE DELLA BACHECA RECORDS [Laie_73.gif]


Avatar utente
Barito
Extreme Arcader
Extreme Arcader
Messaggi: 1856
Iscritto il: 08/12/2015, 19:18
Reputation: 500

Re: Interfaccia Arcade con Arduino

Messaggio da Barito » 30/04/2016, 15:48

Ok, testato e corretto lo sketch per il volante: va che è una meraviglia ;)

A breve posterò come interfacciare uno spinner o volante ottico, tanto per dimostrarvi che SI -PUO'-FAAREEE :D
Non é vero che siamo quello che mangiamo: siamo quello che non dimentichiamo.


Avatar utente
bisus
Arcade Maniac
Arcade Maniac
Messaggi: 2924
Iscritto il: 03/11/2015, 2:16
Reputation: 486
Località: Firenze
Contatta:

Re: Interfaccia Arcade con Arduino

Messaggio da bisus » 30/04/2016, 15:56

Segnalazioni problemi Forum
Non esitate a contattarmi in privato se doveste avere problemi sul forum http://www.arcademania.eu
grazie


Avatar utente
Barito
Extreme Arcader
Extreme Arcader
Messaggi: 1856
Iscritto il: 08/12/2015, 19:18
Reputation: 500

Re: Interfaccia Arcade con Arduino

Messaggio da Barito » 02/05/2016, 11:13

Ragass, nel finesettimana ci ho dato dentro e ho scritto e testato il codice per controller ottici (spinner, volanti, trackball, etc.).
Aggiornato il primo post con questo terzo esempio ;)
Non é vero che siamo quello che mangiamo: siamo quello che non dimentichiamo.


jena.plissken
Gamer
Gamer
Messaggi: 4
Iscritto il: 03/05/2016, 9:44
Reputation: 1

Re: Interfaccia Arcade con Arduino

Messaggio da jena.plissken » 03/05/2016, 16:03

Ciao Barito, complimenti per il post, spiegazione chiara ed esauriente, veramente bravo!
Sto accingendomi a rifarmi una postazione da gioco arcade (ancora sono indeciso sul tipo) e avevo intenzione di utilizzare arduino per i controlli.
Nelle le prove che ho fatto con arduino (mai in ambito arcade), utilizzando microswitch, ho dovuto sempre utilizzare un delay di qualche mSec prima della lettura dello stato in quanto la vibrazione delle lamelle mi falsava i valori causa arduino che cicla troppo velocemente, succede anche a te?

In alternativa, chi vuole costruirsi volante e pedaliera con potenziometri, non ottici, può usare la vetusta gameport (che non ha più nessuna scheda audio ma emulabile con adattatore USB Microsoft da 10€) e i suoi due assi analogici + 4 pulsanti.

Jena


Avatar utente
Barito
Extreme Arcader
Extreme Arcader
Messaggi: 1856
Iscritto il: 08/12/2015, 19:18
Reputation: 500

Re: Interfaccia Arcade con Arduino

Messaggio da Barito » 03/05/2016, 16:54

Il debounce dei tasti esiste e in rete é ampiamente documentato come ovviare a tale problema, sia via software che via hardware.
Io qui non l'ho messo perché vuole essere una guida introduttiva, ma se decidi di intraprendere questa via ti dico come fare, tranquillo (volendo i codici di jammarduino e jammarduino DUE includono già tasti e debouce, quindi sta già tutto scritto qui nel forum [yes.gif] [yes.gif] )

Inoltre, il codice del primo esempio può essere perfezionato per ridurre al minimo possibile il lag, tutto già scritto nei topici di jammarduino e JDUE

Per quanto riguarda la gameport, é anacronistico usarla oggi come oggi, ma non escludo si possa fare.
Non é vero che siamo quello che mangiamo: siamo quello che non dimentichiamo.


diego160
Gamer
Gamer
Messaggi: 2
Iscritto il: 03/05/2016, 13:32
Reputation: 0

Re: Interfaccia Arcade con Arduino

Messaggio da diego160 » 04/05/2016, 19:33

Ciao Barito,
scrivo perchè sto cominciando a lavorare con arduino Leonardo, per costruire un simulatore, nello specifico uso leonardo perchè essendo collegato al pc mi simula la pressione dei tasti della tastiera anche se in realtà premo pulsanti vari, in questo devo inserire potenziometri per creare leve, e deviatori a due e tre posizioni, per alcune funzioni, in tal caso ti chiedo gentilmente come scrivere il programma per far si che se giro il potenziometro in un verso simuli diverse pressioni di una lettera, mentre se lo giro in senso contrario simuli la pressione di un altra lettera, per i deviatori a due vie volevo far si che se lo tiro su mi simuli la pressione di una lettera una sola volta mentre de lo tiro giù ripreme la stessa lettera senza che continui a simulare la pressione della stessa, perciò che riguarda il deviatore a tre vie è come per il potenziometro in un senso una lettera e nell'altro senso un'altra lettera poi se lo lasio nella posizione non deve continuare a premere la lettera, per collegare i potenziometri va bene lo schema che hai già postato? mentre per i deviatori?
Ah dimenticavo per i deviatori come li devo collegare?

Grazie mille

Diego


Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite