Pagina 2 di 5

Re: Interfaccia Arcade con Arduino

Inviato: 04/05/2016, 21:09
da Barito
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 ;)

Re: Interfaccia Arcade con Arduino

Inviato: 08/06/2016, 21:11
da boss
Barito ha scritto: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 heImmagine

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$$

Re: Interfaccia Arcade con Arduino

Inviato: 08/06/2016, 21:31
da Barito
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ì.

Re: Interfaccia Arcade con Arduino

Inviato: 08/06/2016, 21:49
da boss
intanto grazie per la risposta, e per le dritte su come procedere. mando qualche foto grazie ancora :)

Re: Interfaccia Arcade con Arduino

Inviato: 08/06/2016, 22:56
da boss
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);}
}

Re: Interfaccia Arcade con Arduino

Inviato: 09/06/2016, 6:34
da Barito
Apri il topico in area tecnica.

Re: Interfaccia Arcade con Arduino

Inviato: 09/06/2016, 10:02
da b4nd1t0
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.

Re: Interfaccia Arcade con Arduino

Inviato: 09/06/2016, 13:17
da boss
Barito ha scritto: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

Re: Interfaccia Arcade con Arduino

Inviato: 09/06/2016, 13:27
da Barito
Ottimo, grazie a te ;)

Re: Interfaccia Arcade con Arduino

Inviato: 09/06/2016, 15:10
da giuppo
boss ha scritto:
Barito ha scritto: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]

Re: Interfaccia Arcade con Arduino

Inviato: 02/09/2016, 18:33
da Il Dela
Siccome ho sviluppato un sketch che ho chiamato Arducade per arduino che gestisce anche le combinazioni di tasti ve lo posto

Codice: Seleziona tutto

#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

Re: Interfaccia Arcade con Arduino

Inviato: 02/09/2016, 18:58
da Barito
Bene, vedo che qualcuno comincia ad impegnarsi ;)
Quanta soddisfazione ti da quando uno sketch funziona, di la verità!

Re: Interfaccia Arcade con Arduino

Inviato: 02/09/2016, 19:25
da bisus
ottimo
si riesce ad averne uno che gestisca alo stesso modo due players o non ci sono abbastanza pins ?

Re: Interfaccia Arcade con Arduino

Inviato: 02/09/2016, 19:56
da Il Dela
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 :)

Re: Interfaccia Arcade con Arduino

Inviato: 02/09/2016, 20:41
da Barito
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.

Re: Interfaccia Arcade con Arduino

Inviato: 02/09/2016, 21:05
da Il Dela
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

Re: Interfaccia Arcade con Arduino

Inviato: 02/09/2016, 21:50
da Barito
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]

Re: Introduzione ad Arduino - Controlli Arcade

Inviato: 06/03/2017, 3:40
da titojunior
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?

Re: Introduzione ad Arduino - Controlli Arcade

Inviato: 06/03/2017, 7:44
da Barito
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

Re: Introduzione ad Arduino - Controlli Arcade

Inviato: 13/05/2017, 9:52
da f205v
Barito, non si vedono alcune immagini nel tuo post iniziale, potresti rimetterle? Grazie

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