Go Down

Topic: Dubbi di progammazione per riesumare un vecchio joystick analogico con gameport (Read 380 times) previous topic - next topic

Barachiel

Ciao a tutti, premetto che sono un nabbo che si sta avvicinando da poco al mondo degli arduino; come da titolo, mosso da nostalgia, mi sto orchestrando di riportare in vita un vecchissimo joystick analogico con presa "gameport", che per chi non lo sapesse, è una specie di presa scart a 15 piedini, per chiunque fosse interessato a saperne di più, wikipedia è abbastanza fornita di dettagli in merito. Allego un immagine esplicativa simile al "reperto storico" che ho, trovata online

ho già affrontato e risolto un paio di problemi, per quanto riguarda l'hardware, tra l'altro problemi nominati e mai risolti sul forum internazionale su questo post, nel caso qualcuno ne fosse interessato, me lo faccia noto nei commenti e ne parlerò. Comunque, non volendo pagare 20 pagnotte, per un adattatore analogico-digitale che potevo realizzare da me, mi sono messo all'opera, ho testato che ogni cosa del joystick funzionasse a dovere con un mega e ho ordinato un pro micro da usare come emulatore di joystick/mouse e traduttore analogico-digitale.
Ho rapidamente abbandonato l'idea di usare la libreria joystick, presente su github, non essendo stato capace né di comprenderla, a causa della mia poca esperienza, né di trovare un tutorial decente su internet, quindi l'ho abbandonata appena ho trovato la più semplice e pre-installata libreria mouse. Ho trovato rapidamente degli esempi con un ottimo commento e con poca fatica ho scritto il mio programma implementando altri comandi, proprio sulla base di uno di questi esempi.
Il problema è che mi sono rimasti dei dubbi, non ho ancora la scheda a disposizione per chiarirmi con un trial and error, ma voglio comunque andare avanti con il lavoro e scrivere un codice totalmente funzionante nell'attesa del componente.
Il tutorial sul sito parla del comando Mouse.begin() come se fosse necessario per iniziare l'emulazione, ma molti esempi e tutorial ne sono sprovvisti partendo direttamente con i comandi come Mouse.move(), ma quindi non è obbligatoriamente necessario usare Mousebegin  e Mouseend ? Secondo dubbio: esistono dei comandi per premere tasto sinistro, destro e centrale del mouse, ma se imito un mouse non dovrei essere capace di aggiungere anche i comandi di eventuali tasti aggiuntivi sul mouse ? E se ciò non fosse possibile, posso implementare il comando Keyboard.press() in parallelo a quelli del mouse come mostrato su un esempio del sito?

Mi scuso per essere stato troppo prolisso nel post, nel caso che a qualcuno dia fastidio :D
Io oso fare tutto ciò che può essere degno di un uomo, chi osa di più non lo è.

gpb01

Il tutorial sul sito parla del comando Mouse.begin() come se fosse necessario per iniziare l'emulazione, ma molti esempi e tutorial ne sono sprovvisti partendo direttamente con i comandi come Mouse.move(), ma quindi non è obbligatoriamente necessario usare Mousebegin  e Mouseend ?
Un esame della libreria Mouse fornisce la risposta ...

Code: [Select]
void Mouse_::begin(void)
{
}

void Mouse_::end(void)
{
}

... direi che, almeno attualmente, le due chiamate sono del tutto inutili, ma probabilmente previste per sviluppi futuri.

Guglielmo

Search is Your friend ... or I am Your enemy !

gpb01

Secondo dubbio: esistono dei comandi per premere tasto sinistro, destro e centrale del mouse, ma se imito un mouse non dovrei essere capace di aggiungere anche i comandi di eventuali tasti aggiuntivi sul mouse ?
Quei tre pulsanti sono così definiti:

Code: [Select]
#define MOUSE_LEFT 1
#define MOUSE_RIGHT 2
#define MOUSE_MIDDLE 4
#define MOUSE_ALL (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE)

... e queste definizioni vengono così usate:

Code: [Select]
void Mouse_::buttons(uint8_t b)
{
if (b != _buttons)
{
_buttons = b;
move(0,0,0);
}
}

void Mouse_::press(uint8_t b)
{
buttons(_buttons | b);
}

void Mouse_::release(uint8_t b)
{
buttons(_buttons & ~b);
}

... quindi, definire altri codici nelle #define è sicuramente possibile (... e la prima domanda è ... quali?), ma poi c'è comunque da verificare che vengano correttamente interpretati/eseguiti.

Da provare ... :)

E se ciò non fosse possibile, posso implementare il comando Keyboard.press() in parallelo a quelli del mouse come mostrato su un esempio del sito?
Quello puoi sempre farlo, devi includere ed utilizzare la libreria Keyboard.

Guglielmo
Search is Your friend ... or I am Your enemy !

Barachiel

ti ringrazio mi hai chiarito ogni dubbio e anche rapidamente ! beh credo che per semplicità collegherò l'ultimo tasto rimasto alla tastiera, purtroppo come avrai notato non sono molto ferrato :smiley-sweat: non ancora almeno !
Io oso fare tutto ciò che può essere degno di un uomo, chi osa di più non lo è.

SukkoPera

Se può essere utile:

https://github.com/SukkoPera/AnalogJoystickForArduino
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

Go Up