Come utilizzare un Joystick con Arduino UNO come periferica?

Salve a tutti, essendo un appassionato di videogames di simulazione mi sono comprato un volante da gioco(Logitech Driving Force GT) ma una cosa che mi dispiace è che non abbia il cambio ad H come il Logitech G27.
Ho pensato quindi di usare arduino per farmene uno utilizzando il joytick e con xpadder assegnargli diversi tasti della tastiera a seconda della posizione.
Lascio 2 video di riferimento:
Come risulterebbe il cambio : DIY H-Shifter PC - USB - YouTube
Come andrebbero assegnati i tasti alle varie posizioni: - YouTube

Il mio problema è che non ho la minima idea di come fare ammesso che si possa fare, ho iniziato da poco a programmare su arduino e quasi solo sulla domotica. Ricordo che uso Arduino UNO e non posso usare nessun'altra scheda.

Puoi utilizzare UnoJoy, ma dovrai riprogrammare l'ATmega16U2:

In quel modo la Uno potrà apparire come un Joystick USB al PC. Sarebbe decisamente più semplice usare una Leonardo o una (Pro) Micro, che hanno USB nativo, e con l'IDE 1.6.6, uscito ieri, che supporta il PluggableHID, sarebbe davvero un gioco da ragazzi.

Che joystick pensi di usare come input?

Come input volevo usare il modulo di arduino http://image.dhgate.com/albu_367908856_00-1.0x0/keyes-fr4-ky-023-joystick-breakout-module.jpg (non so se ne esistono altri diversi)

di UnoJoy ne ho sentito parlare, una volta riprogrammato l'ATImega16u2 mi basterebbe caricarci uno sketch qualsiasi che lo faccia funzionare o devo usare la sua libreria e un codice diverso?

Se ti basta un coso così piccolo, può sicuramente andare.

Uno sketch qualsiasi? Direi di no... L'ATmega16U2 riprogrammato scambia comandi con lo sketch che carichi sul 328, per cui dovrai scrivere uno sketch che legge il tuo joystick e invia i comandi giusti all'U2, ma questo si fa semplicemente usando la "libreria" di UnoJoy.

Se hai voglia, la mia libreria per i joystick analogici potrebbe semplificarti un po' la vita: GitHub - SukkoPera/AnalogJoystickForArduino: Remember those joysticks, often analog, that plugged into the "game port" on your soundcard? Wanna use them with Arduino?

Occhio comunque che con UnoJoy devi fare questo:

  • Scrivi lo sketch
  • Carichi lo sketch sul 328
  • Metti in DFU mode l'U2
  • Carichi il firmware UnoJoy sull'U2
  • Stacchi e riattacchi Arduino, ora apparirà come un joystick!
  • Funziona come deve? Bene!
  • Non funziona?
  • Metti in DFU mode l'U2
  • Carichi il firmware USB-Serial sull'U2
  • Stacchi e riattacchi Arduino, ora apparirà di nuovo come Arduino!
  • Correggi lo sketch
  • Torna all'inizio...

Con una Pro Micro da 4€ ti semplifichi assai la vita...

Grazie tante dei consigli :smiley: :smiley: , magari ci farò un pensierino con la pro micro, intanto vedo se riesco a farlo con UNO.

Ma funziona anche con arduino UNO compatibile?

Solo se usa un ATmega16U2 (o 8U2) come convertitore USB-Seriale.

quindi non funziona neanche se è un ATmega328? E se volessi potrei cambiarlo senza comprare un'altra scheda arduino?

Il 328 non gestisce direttamente l'USB. Quello che "parla" col PC quando ci colleghi Arduino è un altro chip. Sulla Uno dovrebbe essere un ATmega16U2, che è in realtà un microcontrollore più che degno, ma che su tali schede è normalmente programmato con un firmware che lo "declassa" a convertitore USB-Seriale.

Proprio perché è un microcontrollore più che degno, è un componente che ha un suo costo, per cui è spesso la prima cosa che viene sostituita sui cloni, dove il risparmio è imperativo. Al suo posto si usano altri chip, tipo il CH340G o l'FT232L (se ben ricordo), che sono più economici ma fanno comunque degnamente il lavoro di conversione USB-Seriale, sebbene non siano riprogrammabili.

UnoJoy funziona cambiando il firmware del 16U2 con uno che non lo fa più funzionare da USB-Seriale, ma da joystick. Se la tua scheda non ha tale chip, non puoi usare UnoJoy. Guarda cosa c'è montato, solitamente è un chip piccolo nelle vicinanze del connettore USB.

Se non va bene, le schede alternative, sempre Arduino, te le ho suggerite sopra.

aspetta...avevo confuso il 328 con l'u2 pensando fossero la stessa cosa invece no :cold_sweat: :cold_sweat: :cold_sweat:

comunque è un 16u2, ora mi resta da capire come porgrammarlo. Se voglio posso anche usare il sample che trovo nel pacchetto di unojoy con 2 analogici attaccati?

Se dico U2, non dico 328... :frowning:

Programmarlo è semplice, scarica il pacchetto di UnoJoy e troverai degli script appositi. È un po' caotico, ma alla fine le cose da fare sono poche.

Mai provato quel sample, immagino di sì, ma probabilmente ti basta moooolto meno.

Ok, quando trovo un po' di tempo libero provo a fare il tutto(....maledetti prof che mettono interrogazioni a caso)

danielrama30:
Salve a tutti,

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Col Genuino Micro è tutto molto più semplice
--> https://www.arduino.cc/en/Main/ArduinoBoardMicro
E' già predisposto per simulare Tastiera e Mouse, per il Joystick devi solo caricare una libreria senza riprogrammare chip o altro.
--> https://www.arduino.cc/en/Tutorial/JoystickMouseControl