Dubbi di progammazione per riesumare un vecchio joystick analogico con gameport

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 :smiley:

Barachiel:
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 ...

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

Barachiel:
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:

#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:

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 ... :slight_smile:

Barachiel:
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

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 :sweat_smile: non ancora almeno !

Se può essere utile: