Usare arduino come joystick HID

Ciao ragazzi :slight_smile:
Me ne sto uscendo con una nuova idea, che se riesco a svilupparla potrebbe essere una delle poche che porterò a termine :stuck_out_tongue:

Comunque.. Sto usando un simulatore di volo (x-plane), e avrei la possibilità di associare una miriade di pulsanti di un joystick per eseguire determinate funzioni dell'aereo.. Il problema è che il mio joystick ha solo 16 pulsanti.. E a questo punto mi è venuto in mente arduino..
Trovandomi in difficoltà ad usarlo per comandare il simulatore via UDP, l'unica cosa che mi è venuta in mente è di usare arduino come un simil joystick HID (attenzione, non tastiera, il simulatore riconosce solo i comandi di un joystick), ed associare determinate funzioni a determinati tasti dell'arduino..
Ho letto in giro che è possibile modificando il firmware di un leonardo, invece ho letto che un arduino uno si può far diventare una tastiera HID.. MA è possibile farlo riconoscere dal pc come un joystick..!?

AleCune93:
Ho letto in giro che è possibile modificando il firmware di un leonardo, invece ho letto che un arduino uno si può far diventare una tastiera HID.. MA è possibile farlo riconoscere dal pc come un joystick..!?

E' l'opposto.
Se hai una UNO dei riprogrammare il firmware del chippino 16U2, quello piccolino accanto alla porta USB che funge da convertitore seriale/USB.
Sulla Leonardo invece la USB è integrata al chip e la scheda può essere programmata per essere vista come periferica HID di serie.
Studiati nel Reference le classi Keyboard e Mouse:
http://arduino.cc/en/Reference/MouseKeyboard

Ho dato un occhiata.. Ma è solo per leonardo e due..!?

Allora.. in qualche modo sono riuscito a far passare arduino come una tastiera.. Ho scoperto che sul simulatore posso impostare funzioni a qualsiasi tasto della tastiera (inclusi ctr+tasto e shift+tasto).. Quindi diciamo che ne ho un bel pò disponibili..

Il problema è che adesso ho collegato un pulsante e uno switch ad arduino, leggo i loro stati tramite un attachInterrupt, e nell funzione metto uno switch che mi ritorna se il pin è 1 o 0, e (per prova) me lo stampa sulla seriale..
Ebbene, dopo innumerevoli tentativi, resistenze, ecc.. non riesco a rendere stabili i pin.. Quando apro il circuito a massa tutto ok, ma quando lo chiudo mi rileva 4/5 valori tra 1 e 0.. E non riesco a capire come sistemarlo..!

Ma hai fatto un "debouncing" del segnale del pulsante e dello switch ??? :roll_eyes:

QUI e QUI maggiori info ...

Guglielmo

Mai fatto in vita mia il debouncing.. :stuck_out_tongue:
Comunque, c'ho dato un occhiata.. Ma non mi sembra sia una cosa fattibile per una 20/30ina di pin.. O sbaglio..!?

O fai il debuncing "software" o lo fai "hardware" ... o ... ti tieni i rimbalzi e, ogni volta che apri e chiudi un contatto ti becchi una raffica di impusli ... decidi tu ]:smiley:

Guglielmo

P.S. : Prova a vedere su google "contact bounce" e capirai il problema ...

Purtroppo devo optare per il debouncing.. :sweat_smile:
Ho dato un occhiata ad un debouncing hardware.. Ed è peggio che farlo software.. Proverò a smanettarci un pò su e vedo che riesco a combinare..

Se fai una routine fatta bene, a cui passi come parametro il numero del pin che ti interessa leggere ... lo fai abbastanza facilmente.

Devi però tenere conto di una cosa ...
... i debounce software impiega, ovviamente, alcune decine di millisecondi che, seppur pochi, moltiplicati per parecchi ingressi ... possono diventare tanti !

Dipende da "quanto veloci" commutano i tuoi contatti e quanto tempo hai per leggere l'apertura e la chiusura ... :roll_eyes:

Guglielmo

O..ok.. Ho preso leggermente spunto dal debouncing e ho fatto un metodo un pò ortodosso, ma che comunque ho visto che funziona.. Però ho dovuto evitare l'attachInterrupt..

AleCune93:
Ho dato un occhiata.. Ma è solo per leonardo e due..!?

Ovviamente sì perché l'Atmega328 della Uno non ha la Usb integrata, quindi non puoi usare quelle lib.

AleCune93:
Allora.. in qualche modo sono riuscito a far passare arduino come una tastiera..

Quale scheda?

Ho scoperto che sul simulatore posso impostare funzioni a qualsiasi tasto della tastiera (inclusi ctr+tasto e shift+tasto).. Quindi diciamo che ne ho un bel pò disponibili..

Che simulatore?

Buongiorno a tutti.
Mi collego a questo thread perché è molto inerente a ciò di cui avrei bisogno.

Anch'io come AleCune93 mi diletto di sumulatori di volo (nel mio caso Digital Combat Simulator) e anch'io ho il problema della marea di comandi necessari al pilotaggio e ingestibili da tastiera.
La mia idea è dunque quella di collegare un po' di pulsanti e potenziometri ad Arduino e decodificarli come tasti da inviare al PC.
So che Arduino Uno, di cui Ruggerduino è un clone, non è visibile come periferica HID, ma nella mia idea è esattamente ciò che voglio: io vorrei collegare Ruggeduino in parallelo alla tastiera via un cavo Y USB (come questo), lasciando che sia "invisibile" al PC e usandolo per "iniettare" gli opportuni codici sul medesimo ingresso USB della tastiera. In pratica il PC dovrebbe leggere i codici come se venissero dalla tastiera fisica.
Non so se sono riuscito a spiegarmi.
Che ne dite? E' fattibile?
Grazie.

V-Twin:
Che ne dite? E' fattibile?

No, il cavo USB a Y serve solo per raddoppiare la corrente disponibile dalle porte USB, max 500 mA per porta, oppure per alimentare due device, dipende da come è fatto il cavo, e non per mettere due dispositivi in parallelo.

... il mio joystick ha solo 16 pulsanti ...

Eh, che tempi ... ora ci si lamenta che un joystick ha "solo" 16 pulsanti ... ai miei tempi, si era felici quando si riusciva ad avere in mano un joystick che aveva "ben" 3 pulsanti, compreso quello di sparo ... :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue:

astrobeed:
No, il cavo USB a Y serve solo per raddoppiare la corrente disponibile dalle porte USB, max 500 mA per porta, oppure per alimentare due device, dipende da come è fatto il cavo, e non per mettere due dispositivi in parallelo.

Ok.
E se fabbrico io un cavo USB a Y per mettere in parallelo Arduino col cavo tastiera?
Arduino non è HID, per cui dovrebbe rimanere invisibile al PC.
Così potrei inviare i keystrokes e il pc li vedrebbe come se arrivassero dalla tastiera.
O no?

V-Twin:
E se fabbrico io un cavo USB a Y per mettere in parallelo Arduino col cavo tastiera?
Arduino non è HID,

Non puoi mettere due device USB in parallelo sullo stesso cavo.

Forse non riesco a spiegarmi.
Arduino Uno (o Ruggeduino) non è un dispositivo HID, così mi pare almeno.
Pertanto non dovrebbe essere visto dal PC.
Sbaglio?

V-Twin:
Pertanto non dovrebbe essere visto dal PC.
Sbaglio?

Non è questione di device HID o meno, semplicemente sullo stesso cavo USB ci può stare un solo device indipendentemente dalla sua tipologia USB.

astrobeed:
Non è questione di device HID o meno, semplicemente sullo stesso cavo USB ci può stare un solo device indipendentemente dalla sua tipologia USB.

Scusami, sono molto ignorante in materia e quindi fatico a capire.
Se il 2¬į device -Arduino- √® "invisibile" al pc non dovrebbero esserci problemi a collegarlo in parallelo sullo stesso cavo della tastiera. Diverso sarebbe ovviamente se fosse un dispositivo HID, cio√® individuabile dal PC.
Il pc vede già la tastiera sulla porta usb, se ci attacco in parallelo una periferica che non risponde ai segnali usb (come credo sia il caso di Arduino Uno/Ruggeduino visto che non è hid) il pc non dovrebbe accorgersene.
Quando Arduino invia i keystroke, per il pc è come se li stesse mandando la tastiera.
Devo invece arguire che se attacco Ruggeduino in parallelo alla tastiera il pc se ne accorge?

... NON PUOI METTERE IN PARALLELO I SEGNALI ELETTRICI DELLE DUE USB !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Pi√Ļ chiaro cos√¨ ? :smiling_imp:

Guglielmo