Introduzione ad Arduino - Controlli Arcade

Tutto quello che c'è da sapere lo trovate qui.
User avatar
Barito
Arcade Maniac
Arcade Maniac
Posts: 3455
Joined: 08/12/2015, 19:18
Reputation: 802

Re: Interfaccia Arcade con Arduino

Post by Barito » 04/05/2016, 21:09

Aspetta, aspetta, questa é una guida introduttiva che copre quasi tutte le applicazioni tipiche arcade. Se hai domande sulle applicazioni e sketch descritti ok, sennò é meglio se apri un topico apposta e spieghi bene cosa vuoi fare: vediamo di trovare una soluzione.
Tieni presente che questo é un forum che tratta di arcade, quindi mi raccomando questo "simulatore" deve essere attinente ;)


Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

User avatar
boss
Gamer
Gamer
Posts: 28
Joined: 08/06/2016, 20:56
Reputation: 6

Re: Interfaccia Arcade con Arduino

Post by boss » 08/06/2016, 21:11

Barito wrote: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 ;)

Inoltre, il codice del primo esempio può essere perfezionato per ridurre al minimo possibile il lag, ma prima voglio vedere qualcuno interessato davvero, he he heImage

Per quanto riguarda la gameport, é anacronistico usarla oggi come oggi, ma non escludo si possa fare.



salve sono nuovo, sto adattando un quickjoy sv-119 per amiga.
vorrei pilotarlo con arduino pro micro, separando i due tasti di fire e inglobando il tutto all'interno del controller così che esca direttamente il cavo usb da collegare al raspberry o pc, cosi da poter giocare con retropie o con l'emulatore dell'amiga su pc.
saresti così cortese di spiegarmi dove mettere il delay e di che valore approssimativamente più adatto ed eventuali migliorie? grazie e scusa per le molteplici domande.

Bo$$
[2guns.gif] [2guns.gif] [2guns.gif]Bo$$ [2guns.gif] [2guns.gif] [2guns.gif]

User avatar
Barito
Arcade Maniac
Arcade Maniac
Posts: 3455
Joined: 08/12/2015, 19:18
Reputation: 802

Re: Interfaccia Arcade con Arduino

Post by Barito » 08/06/2016, 21:31

Per il debounce ci vogliono un 15-20 ms. Sul sito ufficiale di arduino e in rete ci sono un saaaacco di esempi.
Per il codice, vorrei vedere un minimo di impegno e poi ne riparliamo. Comincia aprendo un topico e riempilo di foto del tuo joy, dentro e fuori. Descrivi bene cosa vuoi fare e pubblica il tuo codice arduino (basato su quanto già scritto nella guida se vuoi, oppure scritto di sana pianta) e vediamo di migliorarlo, se necessario... potrebbe anche andare bene così.
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

User avatar
boss
Gamer
Gamer
Posts: 28
Joined: 08/06/2016, 20:56
Reputation: 6

Re: Interfaccia Arcade con Arduino

Post by boss » 08/06/2016, 21:49

intanto grazie per la risposta, e per le dritte su come procedere. mando qualche foto grazie ancora :)
[2guns.gif] [2guns.gif] [2guns.gif]Bo$$ [2guns.gif] [2guns.gif] [2guns.gif]

User avatar
boss
Gamer
Gamer
Posts: 28
Joined: 08/06/2016, 20:56
Reputation: 6

Re: Interfaccia Arcade con Arduino

Post by boss » 08/06/2016, 22:56

non sapendo dove aprire un nuovo topic mi limito a mettere qui solo lo sketch che intendevo utilizzare per questo piccolo progetto. se non è un problema, eventualmente se potete indicarmi come e in che sezione aprire un topic nuovo, sarò più chiaro e più dettagliato.

#include <Keyboard.h>
void setup() {
Keyboard.begin();
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
}

void loop() {
int statoPulsante2 = digitalRead(2);
int statoPulsante3 = digitalRead(3);
int statoPulsante4 = digitalRead(4);
int statoPulsante5 = digitalRead(5);
int statoPulsante6 = digitalRead(6);
int statoPulsante7 = digitalRead(7);

if (statoPulsante2 == LOW) {Keyboard.press(32);} //fire 1
else {Keyboard.release(32);}
if (statoPulsante3 == LOW) {Keyboard.press(44);} //fire 2
else {Keyboard.release(44);}
if (statoPulsante4 == LOW) {Keyboard.press(119);} // su
else {Keyboard.release(119);}
if (statoPulsante5 == LOW) {Keyboard.press(122);} // giù
else {Keyboard.release(122);}
if (statoPulsante6 == LOW) {Keyboard.press(97);} // sx
else {Keyboard.release(97);}
if (statoPulsante7 == LOW) {Keyboard.press(115);} // dx
else {Keyboard.release(115);}
}
[2guns.gif] [2guns.gif] [2guns.gif]Bo$$ [2guns.gif] [2guns.gif] [2guns.gif]

User avatar
Barito
Arcade Maniac
Arcade Maniac
Posts: 3455
Joined: 08/12/2015, 19:18
Reputation: 802

Re: Interfaccia Arcade con Arduino

Post by Barito » 09/06/2016, 6:34

Apri il topico in area tecnica.
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

User avatar
b4nd1t0
Arcade Maniac
Arcade Maniac
Posts: 4461
Joined: 06/06/2016, 17:34
Medals: 11
Reputation: 925
Location: Roma
Nazione: Italia
:
Medaglia d'oro Medaglia d'argento Medaglia di bronzo Medaglia di legno
Contact:

Re: Interfaccia Arcade con Arduino

Post by b4nd1t0 » 09/06/2016, 10:02

Accidenti, non ci avevo mai pensato... mi stampo la guida che me la leggo in metro, è dannatamente interessante la cosa, bravo e grazie per la condivisione.
groovymame nonag aggiornato? b4nd1t0's repo anche per linux -- 0.209 ready!

User avatar
boss
Gamer
Gamer
Posts: 28
Joined: 08/06/2016, 20:56
Reputation: 6

Re: Interfaccia Arcade con Arduino

Post by boss » 09/06/2016, 13:17

Barito wrote:Apri il topico in area tecnica.
Grazie barito stasera farò il topic del joystick e magari anche uno della console autocostruita che ho precedentemente accennato in area di presentazione
[2guns.gif] [2guns.gif] [2guns.gif]Bo$$ [2guns.gif] [2guns.gif] [2guns.gif]

User avatar
Barito
Arcade Maniac
Arcade Maniac
Posts: 3455
Joined: 08/12/2015, 19:18
Reputation: 802

Re: Interfaccia Arcade con Arduino

Post by Barito » 09/06/2016, 13:27

Ottimo, grazie a te ;)
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

User avatar
giuppo
Site Admin
Site Admin
Posts: 4183
Joined: 03/11/2015, 7:46
Medals: 41
Reputation: 660
Nazione: Italia
:
Medaglia d'oro Medaglia d'argento Medaglia di bronzo Medaglia di legno I - Team Battle Maestro Yoda
Contact:

Re: Interfaccia Arcade con Arduino

Post by giuppo » 09/06/2016, 15:10

boss wrote:
Barito wrote:Apri il topico in area tecnica.
Grazie barito stasera farò il topic del joystick e magari anche uno della console autocostruita che ho precedentemente accennato in area di presentazione
Bravo, sono progetti interessanti e che possono tornare utili anche ad altri utenti del forum. [up.gif]
Arcademania il forum di riferimento

User avatar
Il Dela
Arcader
Arcader
Posts: 281
Joined: 24/08/2016, 15:25
Reputation: 59
Location: Valle Camonica
Nazione: IT

Re: Interfaccia Arcade con Arduino

Post by Il Dela » 02/09/2016, 18:33

Siccome ho sviluppato un sketch che ho chiamato Arducade per arduino che gestisce anche le combinazioni di tasti ve lo posto

Code: Select all

#include <Keyboard.h>

//Interfaccia Arducade con gestione combinazione tasti//
//Sketch scritto da Nicolas Delaidelli//
//Il Dela su arcademania.eu//

void setup() {
  Keyboard.begin();

  //Impostazione Input
  pinMode(0, INPUT_PULLUP); //Joystick Su
  pinMode(1, INPUT_PULLUP); //Joystick Giù
  pinMode(2, INPUT_PULLUP); //Joystick Sinistra
  pinMode(3, INPUT_PULLUP); //Joystick Destra
  pinMode(4, INPUT_PULLUP); //Tasto 1
  pinMode(5, INPUT_PULLUP); //Tasto 2
  pinMode(6, INPUT_PULLUP); //Tasto 3
  pinMode(7, INPUT_PULLUP); //Tasto 4
  pinMode(8, INPUT_PULLUP); //Tasto 5
  pinMode(9, INPUT_PULLUP); //Tasto 6
  pinMode(10, INPUT_PULLUP); //Coin
  pinMode(11, INPUT_PULLUP); //Start

}

void loop() {

  // Definisco le Variabili:
  int joystickSu = digitalRead(0);
  int joystickGiu = digitalRead(1);
  int joystickSx = digitalRead(2);
  int joystickDx = digitalRead(3);
  int tasto1 = digitalRead(4);
  int tasto2 = digitalRead(5);
  int tasto3 = digitalRead(6);
  int tasto4 = digitalRead(7);
  int tasto5 = digitalRead(8);
  int tasto6 = digitalRead(9);
  int coin = digitalRead(10);
  int start = digitalRead(11);
  int shift = 0; //Variabile utilizzata per segnalare se è stata usata una combinazione dopo la pressione di Start

  
  // Start - 1
   if (start == LOW)     // Se start è premuto apro la gestione combinazione tasti                          
  { do
    { tasto1 = digitalRead(4);
      coin = digitalRead(10);
      tasto2 = digitalRead(5);
      // Start+Tasto1 - TAB
      if (tasto1 == LOW)
      { Keyboard.press(9);
        shift = 1;
      }
      else
      { Keyboard.release(9);
      }
      // Start+Coin - ESC
      if (coin == LOW)
      { Keyboard.press(177);
        shift = 1;
      }
      else
      { Keyboard.release(177);
      }
      // Start+Tasto2 - p
      if (tasto2 == LOW)
      { Keyboard.press(112);
        shift = 1;
      }
      else
      { Keyboard.release(112);
      }
      start = digitalRead (11);
    }
    while (start == HIGH); // Finchè start rimane premuto continuo a ripetere il controllo sulle combinazioni

    if (shift == 1)  // Se è stata utilizzata una combinazione riporto la variabile a 0 e me ne vado
    {
      shift = 0;
    }
    else            // Altrimenti se non è stata usata nessuna combinazione premo il tasto start
    { Keyboard.press(49);
      delay(200);
      Keyboard.release(49);
    }
  }

  else
  {
  
  // Joystick Su - Freccia Su
  if (joystickSu == LOW) {
    Keyboard.press(218);
  }
  else {
    Keyboard.release(218);
  }

  // Joystick Giu - Freccia Giu
  if (joystickGiu == LOW) {
    Keyboard.press(217);
  }
  else {
    Keyboard.release(217);
  }

  // Joystick Sinistra - Freccia Sinistra
  if (joystickSx == LOW) {
    Keyboard.press(216);
  }
  else {
    Keyboard.release(216);
  }

  // Joystick Destra - Freccia Destra
  if (joystickDx == LOW) {
    Keyboard.press(215);
  }
  else {
    Keyboard.release(215);
  }

  // Tasto 1 - CTRL sx
  if (tasto1 == LOW) {
    Keyboard.press(128);
  }
  else {
    Keyboard.release(128);
  }

  // Tasto 2 - ALT sx
  if (tasto2 == LOW) {
    Keyboard.press(130);
  }
  else {
    Keyboard.release(130);
  }

  // Tasto 3 - Spazio
  if (tasto3 == LOW) {
    Keyboard.press(32);
  }
  else {
    Keyboard.release(32);
  }

  // Tasto 4 - SHIFT sx
  if (tasto4 == LOW) {
    Keyboard.press(129);
  }
  else {
    Keyboard.release(129);
  }

  // Tasto 5 - z
  if (tasto5 == LOW) {
    Keyboard.press(122);
  }
  else {
    Keyboard.release(122);
  }

  // Tasto 6 - x
  if (tasto6 == LOW) {
    Keyboard.press(120);
  }
  else {
    Keyboard.release(120);
  }

  // Coin - 5
  if (coin == LOW) {
    Keyboard.press(53);
  }
  else {
    Keyboard.release(53);
  }
}
}



Il codice fa funzionare i tasti alla pressione tranne start1 che funziona al rilascio. Ecco le configurazioni attuali dei tasti

Joystick Su - Freccia Su
Joystick Giu - Freccia Giu
Joystick Sinistra - Freccia Sinistra
Joystick Destra - Freccia Destra
Tasto 1 - Ctrl SX
Tasto 2 - Alt SX
Tasto 3 - Spazio
Tasto 4 - Shift SX
Tasto 5 - z
Tasto 6 - x
Start - 1
Coin - 5
Start 1 + Coin - Esc
Start 1 + Tasto 1 - TAB
Start 1 + Tasto 2 - p

User avatar
Barito
Arcade Maniac
Arcade Maniac
Posts: 3455
Joined: 08/12/2015, 19:18
Reputation: 802

Re: Interfaccia Arcade con Arduino

Post by Barito » 02/09/2016, 18:58

Bene, vedo che qualcuno comincia ad impegnarsi ;)
Quanta soddisfazione ti da quando uno sketch funziona, di la verità!
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

User avatar
bisus
Arcade Maniac
Arcade Maniac
Posts: 4426
Joined: 03/11/2015, 14:15
Reputation: 675
Contact:

Re: Interfaccia Arcade con Arduino

Post by bisus » 02/09/2016, 19:25

ottimo
si riesce ad averne uno che gestisca alo stesso modo due players o non ci sono abbastanza pins ?
Segnalazioni problemi Forum
Non esitate a contattarmi in privato se doveste avere problemi sul forum http://www.arcademania.eu
grazie

User avatar
Il Dela
Arcader
Arcader
Posts: 281
Joined: 24/08/2016, 15:25
Reputation: 59
Location: Valle Camonica
Nazione: IT

Re: Interfaccia Arcade con Arduino

Post by Il Dela » 02/09/2016, 19:56

Dipende da quanti tasti vuoi mettere a player. Per un due player puoi avere massimo 4 pulsanti a player più start e coin essendo 20 gli ingressi.
Barito ci credi che non ho mai avuto un Arduino? Solo che sono un amante dell'informatica e Arduino me lo sono studiato per dare una mano ad un mio amico a gestire l'illuminazione RGB della sua stanza attraverso App su smartphone :)

User avatar
Barito
Arcade Maniac
Arcade Maniac
Posts: 3455
Joined: 08/12/2015, 19:18
Reputation: 802

Re: Interfaccia Arcade con Arduino

Post by Barito » 02/09/2016, 20:41

Procuratene uno subito che costa pochissimo e ci si diverte
Alessio, due players li puoi gestire bene con 20 pin. Come ho scritto nella guida (o nei commenti dopo, boh) ci sono metodo furbi (e soprartutto economici) per aumentare il numero di input.
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

User avatar
Il Dela
Arcader
Arcader
Posts: 281
Joined: 24/08/2016, 15:25
Reputation: 59
Location: Valle Camonica
Nazione: IT

Re: Interfaccia Arcade con Arduino

Post by Il Dela » 02/09/2016, 21:05

Se non sbaglio però la libreria keyboard.h gestisce solo la pressione di 6 pulsanti contemporaneamente e ciò leggevo da qualche parte che nelle partite più frenetiche a due giocatori crea qualche problemino

User avatar
Barito
Arcade Maniac
Arcade Maniac
Posts: 3455
Joined: 08/12/2015, 19:18
Reputation: 802

Re: Interfaccia Arcade con Arduino

Post by Barito » 02/09/2016, 21:50

EDIT: Si, è un limite del protocollo USB per le tastiere e ne soffre qualunque perifrerica USB che venga riconosciuta dal sistema operativo come tale; è anche vero che ci sono le chiavi "modifiers" (o "non printable") come Ctrl sinistro e destro, Shift sinistro e destro, Alt, etc i quali non entrano nel computo dei 6 tasti: sono 8 tasti che si sommano ai 6 per un totale di 14 tasti in contemporanea.

Tra l'altro, ecco spiegato perchè in MAME il key mapping default fa largo uso di queste chiavi apparentemente astruse [icon_wink.gif]
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

User avatar
titojunior
Super Arcader
Super Arcader
Posts: 1107
Joined: 10/12/2015, 19:38
Medals: 24
Reputation: 224
Location: Campobasso
Nazione: IT
:
Medaglia d'oro Medaglia d'argento Medaglia di bronzo Medaglia di legno I - Team Battle III - Arcade Deathmatch ex Dio della Bacheca Records
Contact:

Re: Introduzione ad Arduino - Controlli Arcade

Post by titojunior » 06/03/2017, 3:40

ciao barito,
volevo chiederti se l'esempio che hai fatto con lo spinner si può fare anche con un potenziometro e se sì com'è il risultato finale?
Bartop e progetti vari, blog - Tutto sul mio mondo qui http://titojunior73.wix.com/orancade
INPtoZIP - Il programma per postare i record dal cabinato *http://arcademania.eu/viewtopic.php?f=12&t=228&p=3373*
Image
Versione WOLFMAME : 0.167

User avatar
Barito
Arcade Maniac
Arcade Maniac
Posts: 3455
Joined: 08/12/2015, 19:18
Reputation: 802

Re: Introduzione ad Arduino - Controlli Arcade

Post by Barito » 06/03/2017, 7:44

Lo spinner è un sistema ottico, quindi diverso dal potenziometro. Nella guida c'è comunque la risposta alla tua domanda visto che l'esempio con il volante è per volante a potenziometro.
Il risultato è eccellente, al pari (se non superiore) delle soluzioni commerciali, ma ad una frazione del prezzo.

Ti consiglio di rileggerla bene la guida, dall'inizio alla fine
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

User avatar
f205v
Site Admin
Site Admin
Posts: 5951
Joined: 01/12/2015, 10:37
Medals: 1
Reputation: 407
Location: Lugano
Nazione: Svizzera
:
Medaglia di bronzo
Contact:

Re: Introduzione ad Arduino - Controlli Arcade

Post by f205v » 13/05/2017, 9:52

Barito, non si vedono alcune immagini nel tuo post iniziale, potresti rimetterle? Grazie

Aspetta!, forse è solo l'host delle immagini che è temporaneamente giù.
Imagef205v

Post Reply