Arduino spinner  [SOLVED]

Tutto quello che c'è da sapere lo trovate qui.
Avatar utente
bisus
Arcade Maniac
Arcade Maniac
Messaggi: 4481
Iscritto il: 03/11/2015, 14:15
Reputation: 686
Contatta:

Arduino spinner  [SOLVED]

Messaggio da bisus » 06/04/2019, 12:55

Allora vediamo se riusciamo a costruire uno spinner da utilizzare per i giochi tipo Arkanoid. Se riesco nell'impresa mi piacerebbe anche aggiungere un tasto per lo sparo cosi' da avere una piccola postazione semindipendente da attaccare al Pc o Cab.
Per il nostro scopo ho acquistato un Leonardo R3 ATMEGA32U4 ed un Encoder Rotativo, spero poca spesa massima resa.
20190406_123321.jpg
20190406_123312.jpg
20190406_123301.jpg
20190406_123252.jpg
Non hai i permessi necessari per visualizzare i file allegati in questo messaggio.


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

Avatar utente
grendizer73
Arcader
Arcader
Messaggi: 348
Iscritto il: 02/09/2017, 13:38
Reputation: 29

Re: Arduino spinner

Messaggio da grendizer73 » 06/04/2019, 13:39

sappi che se lo fai, te ne compro un paio [joint.gif]
Consolle è usato solo per definire i mobili, console (pronuncia cònsol) viene usato ovunque per definire chiaramente le macchine dedicate al gioco casalingo. Tra l'altro è sinonimo di ignoranza della materia videoludica chiamare consolle una console.

Avatar utente
bisus
Arcade Maniac
Arcade Maniac
Messaggi: 4481
Iscritto il: 03/11/2015, 14:15
Reputation: 686
Contatta:

Re: Arduino spinner

Messaggio da bisus » 06/04/2019, 13:49

Siamo nelle mani del buon vecchio @Barito , io piu' che da cavia non vado
Segnalazioni problemi Forum
Non esitate a contattarmi in privato se doveste avere problemi sul forum http://www.arcademania.eu
grazie

Avatar utente
bisus
Arcade Maniac
Arcade Maniac
Messaggi: 4481
Iscritto il: 03/11/2015, 14:15
Reputation: 686
Contatta:

Re: Arduino spinner

Messaggio da bisus » 06/04/2019, 19:59

Allora partiamo con i vari dubbi
nell'esempio di Barito qui viewtopic.php?f=68&t=386 stiamo settando un potenziometro qui invece un rotary encoder.
Se ho capito bene alla prima uscita CLK c'e' l'output A, alla seconda DT output B, alla terza SW il pulsante centrale che io non usero' perche' aggiungero' un tasto arcade. Ad esclusione sulla quarta + i 5v ed alla quinta il GND.
Ora avendo provato lo sketch la scrittura e' andata a buon fine ma sotto il pannello di controllo non vedo nessun joy.
Ipotizzando quanto sopra sia corretto volendo seguire quanto scritto da Barito potrei semplicemente usare l'ingresso analogico A2 sul primo pin, il quarto al GND ed il quinto al 5v ?
Il pc non mi vede nessun joy perche' il rotary encoder non e' correttamente collegato o dovrebbe vederlo anche senza encoder ?
Segnalazioni problemi Forum
Non esitate a contattarmi in privato se doveste avere problemi sul forum http://www.arcademania.eu
grazie

Avatar utente
Barito
Arcade Maniac
Arcade Maniac
Messaggi: 3564
Iscritto il: 08/12/2015, 19:18
Reputation: 822

Re: Arduino spinner

Messaggio da Barito » 07/04/2019, 11:51

L'esempio che devi prendere a riferimento è quello dello spinner arkanoid, non il potenziometro. Sono due hardware completamente differenti il pot e l'encoder digitale.
Detto che la libreria joystick è cambiata negli ultimi anni e che hai per le mani un modulo arduino standard, io direi comunque di ripartire da zero.
Iniziamo facendo funzionare arduino leo: fatti il classico esempio "blink" e partiamo da li ;)
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

Avatar utente
bisus
Arcade Maniac
Arcade Maniac
Messaggi: 4481
Iscritto il: 03/11/2015, 14:15
Reputation: 686
Contatta:

Re: Arduino spinner

Messaggio da bisus » 07/04/2019, 13:08

Arduino lezione uno
Ho collegato al pin 13 ed al pin gnd un led da 5volts.
Andando direttamente sul software di programmazione Arduino andiamo su File-Esempi-Basics-Blink e ci troviamo gia' precaricato il seguente codice che ci consente di far lampeggiare il led accendendosi e spegnendosi con un alternanza di un secondo. Una caricato lo sketch premiamo sul sento spunta che avvia la verifica.

Codice: Seleziona tutto

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO 
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN takes care 
  of use the correct LED pin whatever is the board used.
  If you want to know what pin the on-board LED is connected to on your Arduino model, check
  the Technical Specs of your board  at https://www.arduino.cc/en/Main/Products
  
  This example code is in the public domain.

  modified 8 May 2014
  by Scott Fitzgerald
  
  modified 2 Sep 2016
  by Arturo Guadalupi
*/


// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}
Volendo fare un altro esperimento ho provato il seguente codice che invece da' un intermittenza dove il led rimane acceso due secondi, si spegne, resta spento mezzo seondo e poi si riaccende continuando in loop

Codice: Seleziona tutto

void setup() {                
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT);     
}

void loop() {
  digitalWrite(13, HIGH);   // set the LED on
  delay(2000);              // wait
  digitalWrite(13, LOW);    // set the LED off
  delay(500);              // wait
}
Segnalazioni problemi Forum
Non esitate a contattarmi in privato se doveste avere problemi sul forum http://www.arcademania.eu
grazie

Avatar utente
Barito
Arcade Maniac
Arcade Maniac
Messaggi: 3564
Iscritto il: 08/12/2015, 19:18
Reputation: 822

Re: Arduino spinner

Messaggio da Barito » 07/04/2019, 13:29

Ok. Adesso leggi bene e fatti il primo esempio di >>questa<< pagina. Ci sono molte info su quegli encoder.
Nota: noi scrivremo uno sketch senza interrupts perché sono difficii da gestire (almeno per me) ma intanto vedi se il modulo funge e impari qualcosa che ti aiuterà a completare il progetto ;)
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

Avatar utente
bisus
Arcade Maniac
Arcade Maniac
Messaggi: 4481
Iscritto il: 03/11/2015, 14:15
Reputation: 686
Contatta:

Re: Arduino spinner

Messaggio da bisus » 07/04/2019, 18:39

Perfetto
l'encoder funziona. Nel Software Arduino andando sul tab strumenti scegliendo poi il monitor seriale a seconda di come giro la rotella ho un aumento o un decremento dell'encoder value.
Segnalazioni problemi Forum
Non esitate a contattarmi in privato se doveste avere problemi sul forum http://www.arcademania.eu
grazie

Avatar utente
grendizer73
Arcader
Arcader
Messaggi: 348
Iscritto il: 02/09/2017, 13:38
Reputation: 29

Re: Arduino spinner

Messaggio da grendizer73 » 07/04/2019, 19:38

@bisus

Bravo, bravo, non capisco una mazza di quello che scrivi, ma intuisco che fai progressi [joint.gif]

Ricordati che se funzionano me ne devi fare 2 dietro lauto compenso [on_eek.gif]
Consolle è usato solo per definire i mobili, console (pronuncia cònsol) viene usato ovunque per definire chiaramente le macchine dedicate al gioco casalingo. Tra l'altro è sinonimo di ignoranza della materia videoludica chiamare consolle una console.

Avatar utente
Barito
Arcade Maniac
Arcade Maniac
Messaggi: 3564
Iscritto il: 08/12/2015, 19:18
Reputation: 822

Re: Arduino spinner

Messaggio da Barito » 07/04/2019, 20:18

Ottimo. Ora scaricati >> l'ultima versione della libreria joystick <<, installala seguendo le istruzioni nel sito (valgono per tutte le librerie) e fatti l'esempio joystickTest (dopo aver caricato lo sketch sulla leo devi mettere a massa il pin A0 per farlo girare).
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

Avatar utente
bisus
Arcade Maniac
Arcade Maniac
Messaggi: 4481
Iscritto il: 03/11/2015, 14:15
Reputation: 686
Contatta:

Re: Arduino spinner

Messaggio da bisus » 07/04/2019, 21:28

andato ache questo ed arduino riconosciuto come gamepad senza problemi
Segnalazioni problemi Forum
Non esitate a contattarmi in privato se doveste avere problemi sul forum http://www.arcademania.eu
grazie

Avatar utente
Barito
Arcade Maniac
Arcade Maniac
Messaggi: 3564
Iscritto il: 08/12/2015, 19:18
Reputation: 822

Re: Arduino spinner

Messaggio da Barito » 08/04/2019, 7:42

Ottimo! Ora manca un esempio ed abbiamo tutti i mattoncini per creare il nostro sketch: il pulsante. A >>QUESTO LINK<< un semplice esempio da cui iniziare. Sfrutta le resistenze interne di pullup di arduino, il che evita di usare una resistenza esterna (niente di che fintanto che si tratta di un pulsante, grande comodità quando i pulsanti aumentano di numero).
L'esempio ancora non prevede debounce, ma lo metteremo dopo aver realizzato un primo prototipo funzionante.
Fatto questo non ci resta altro che mettere tutto insieme.
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

Avatar utente
Barito
Arcade Maniac
Arcade Maniac
Messaggi: 3564
Iscritto il: 08/12/2015, 19:18
Reputation: 822

Re: Arduino spinner

Messaggio da Barito » 08/04/2019, 11:05

Sai... mi sono accorto che ...

1) la libreria joystick non ti servirà: dobbiamo usare la libreria "mouse.h"
2) lo sketch "generico" per spinner/volanti ottici lo avevo già scritto anni fa! Lo avevo anche pubblicato qui da qualche parte, ma non ricordo dove. Forse qualcosa di simile nel topico della conversione del cab outrun di Marino? [ph34r.GIF.png]

Eccolo!
Questo non usa interrupts e può essere usato per controllare fino a tre spinner (o volanti ottici tipo quelli di Super Sprint di Atari [weight_lift.gif] ) con una semplice arduino Leo. E' molto "leggibile", quindi non dovresti avere difficoltà nel fare modifiche.

Codice: Seleziona tutto

/*Controller per encoder ottici arcade (volanti, spinner, trackball etc).
Lo sketch traduce movimenti dell'encoder ottico in movimenti del mouse.
Funziona solo con Arduino Micro, Leonardo, Pro Micro, DUE.
Lo sketch identifica la variazione di stato del pin A e la compara con lo stato
del Pin B (1X counting).
NOTA: gli spinner Taito necessitano di una resistenza di 10KOhm
fra pinA e massa e fra pinB e massa.
Testato su volante ottico "MIMO", spinner Taito con switch
Connessioni:
optical encoder         arduino
out A                   pin 2
out B                   pin 3
Vcc                     5V
Gnd                     Gnd

by Barito, 2016-2018
*/

#include <Mouse.h> 

bool optA_state; 

int xAxisMov = 2; 

void setup() {
pinMode (2,INPUT_PULLUP); //OptA
pinMode (3,INPUT_PULLUP); //OptB
optA_state = digitalRead(2);
Mouse.begin(); 
} 

void loop() {
if (digitalRead(2) != optA_state){
optA_state=!optA_state;
  if (optA_state == HIGH){
    if(digitalRead(3) == LOW){Mouse.move(-xAxisMov, 0, 0);} 
   else{Mouse.move(xAxisMov, 0, 0);}
  }
}
}//loop end 
Devi solo aggiungere il tasto ora, e hai il progetto finito ;)
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

Avatar utente
bisus
Arcade Maniac
Arcade Maniac
Messaggi: 4481
Iscritto il: 03/11/2015, 14:15
Reputation: 686
Contatta:

Re: Arduino spinner

Messaggio da bisus » 08/04/2019, 11:10

Grande
le due resistenza da 10KOhm sono necessarie ?
Segnalazioni problemi Forum
Non esitate a contattarmi in privato se doveste avere problemi sul forum http://www.arcademania.eu
grazie

Avatar utente
Barito
Arcade Maniac
Arcade Maniac
Messaggi: 3564
Iscritto il: 08/12/2015, 19:18
Reputation: 822

Re: Arduino spinner

Messaggio da Barito » 08/04/2019, 11:11

No: l'ho testato stamattina su un modulo identico al tuo senza hardware aggiuntivi ;)

Confermo che lo avevo pubblicato sul topico di conversione dell'Outrun di Marino

viewtopic.php?f=36&t=29540
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

Avatar utente
bisus
Arcade Maniac
Arcade Maniac
Messaggi: 4481
Iscritto il: 03/11/2015, 14:15
Reputation: 686
Contatta:

Re: Arduino spinner

Messaggio da bisus » 08/04/2019, 19:30

Ora la domanda sorge spontanea.. si possono usare due librerie all'interno dello stesso sketch ? Poi mi hai detto, ed ho verificato con i vari esperimenti che mi hai fatto fare, che nello script deve essere presente un solo void setup ed un solo loop e comincerei con il dire
#define encoderSW 4 // SW (bottone) connesso al pin D4
pinMode(encoderSW, INPUT_PULLUP);
Segnalazioni problemi Forum
Non esitate a contattarmi in privato se doveste avere problemi sul forum http://www.arcademania.eu
grazie

Avatar utente
Barito
Arcade Maniac
Arcade Maniac
Messaggi: 3564
Iscritto il: 08/12/2015, 19:18
Reputation: 822

Re: Arduino spinner

Messaggio da Barito » 08/04/2019, 21:10

Si: si possono usare più librerie nello stesso sketch. A te servono la mouse.h e la keyboard.h, entrambe librerie ufficiali.
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

Avatar utente
bisus
Arcade Maniac
Arcade Maniac
Messaggi: 4481
Iscritto il: 03/11/2015, 14:15
Reputation: 686
Contatta:

Re: Arduino spinner

Messaggio da bisus » 08/04/2019, 21:48

Stronzata ?

Codice: Seleziona tutto

#include <Keyboard.h>
void setup() { 
Keyboard.begin(); 
 pinMode(4, INPUT_PULLUP); //TastoSW
} 
void loop() { 
int tastoSW = digitalRead(4);// TastoSW - CTRL sx
  if (tastoSW == LOW) {
    Keyboard.press(128);}
else {Keyboard.release(128);} 
}
}

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

Avatar utente
Barito
Arcade Maniac
Arcade Maniac
Messaggi: 3564
Iscritto il: 08/12/2015, 19:18
Reputation: 822

Re: Arduino spinner

Messaggio da Barito » 09/04/2019, 6:25

Lo hai compilato? Ti da errori di funzionamento?
Il bello di arduino è che le schedine si possono flashare tutte le volte che si vuole senza rischiare niente ;)
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

Avatar utente
bisus
Arcade Maniac
Arcade Maniac
Messaggi: 4481
Iscritto il: 03/11/2015, 14:15
Reputation: 686
Contatta:

Re: Arduino spinner

Messaggio da bisus » 09/04/2019, 20:05

yes sir funziona
volendo integrare il tutto mi restituisce sulla riga int Tasto SW = digitalRead(4);// Tasto SW - CTRL sx expected initialazier before 'SW'

Codice: Seleziona tutto

/*Controller per encoder ottici arcade (volanti, spinner, trackball etc).
Lo sketch traduce movimenti dell'encoder ottico in movimenti del mouse.
Funziona solo con Arduino Micro, Leonardo, Pro Micro, DUE.
Lo sketch identifica la variazione di stato del pin A e la compara con lo stato
del Pin B (1X counting).
NOTA: gli spinner Taito necessitano di una resistenza di 10KOhm
fra pinA e massa e fra pinB e massa.
Testato su volante ottico "MIMO", spinner Taito con switch
Connessioni:
optical encoder         arduino
out A                   pin 2
out B                   pin 3
Vcc                     5V
Gnd                     Gnd

by Barito, 2016-2018
*/

#include <Mouse.h> 
#include <Keyboard.h>

boolean optA_state = HIGH; 

int xAxisMov = 2; 

void setup() {
pinMode (2,INPUT_PULLUP); //OptA
pinMode (3,INPUT_PULLUP); //OptB
pinMode(4, INPUT_PULLUP); //Tasto SW
optA_state = digitalRead(2);
  Keyboard.begin(); 

} 

int Tasto SW = digitalRead(4);// Tasto SW - CTRL sx
  if (TastoSW == LOW) {
    Keyboard.press(128);}
else {Keyboard.release(128);} 

Mouse.begin(); 
} 

void loop() {
if (digitalRead(2) != optA_state){
optA_state=!optA_state;
  if (optA_state == HIGH){
    if(digitalRead(3) == LOW){Mouse.move(-xAxisMov, 0, 0);} 
   else{Mouse.move(xAxisMov, 0, 0);}
     }
}
}//loop end 

}
}

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

Rispondi