Étape 3: Faire fonctionner les boutons
À ce stade, j’ai eu le portable monté, Tetris chargé et il irait dans sa boucle de démo à chaque minute ou deux. Mais je voulais des boutons ! Désolé pour le manque de photos, j’ai été jusqu'à environ 2 heures pour aller à ce point...
Temps de mettre mon Arduino pour travailler. Le chemin de bouton à gameboy ressemble à ceci :
- Le bouton est enfoncé, fermeture du circuit de terre à l’une des broches d’entrée numériques (j’ai utilisé les pull-ups internes afin que les broches lire normalement haute, jusqu'à ce que le bouton est enfoncé).
- Arduino lit entrées chaque quelques msec, détecte la pression de bouton.
- Arduino debounces la poussée de bouton.
- Arduino envoie le signal sur son émulateur de port série intégré pour chaque pression de touche. (Ce que vous voyez dans le moniteur de serial Arduino.)
- App de Python indique le port série, mappe les données brutes à la clé correcte d’être poussé.
- Python app utilise « xte » pour émuler un keypress, alimentant à l’application actuelle. Note : Ceci est spécifique à Linux, le code devra être totalement différent pour Windows.
- Émulateur de Gameboy voit le keypress et voila(ish) !
Ne peut pas recommander Arduino assez pour ce genre de chose. J’ai eu un voyant clignotant en 1 min, puis serial communication vers le haut en 5 mn. Heureusement, j’ai eu un code Python qui traînent pour lire le port série, alors que le principal problème que j’ai eu à résoudre faisait l’entrée dans l’émulateur.
Pour cela j’ai utilisé xte, qui est une application qui peut nourrir des événements d’entrée directement sur le serveur de la fenêtre. J’étais inquiet au début, parce que l’émulateur ne semble pas ramasser les presses ; ajoutant un délai entre le bas et des événements aidé, mais il était encore un peu insensible.
Je pense que le problème était que je n’avais l’Arduino émettent touche Bas événements, ce qui signifie que l’application Python devait simuler des paires d’événements de haut/bas. Puis l’émulateur doit avez fait ses propres debouncing. Aurait été mieux carte touche down et up directement aux mêmes événements via xte et laisser l’émulateur à le manipuler.
J’ai partagé le code sur Github.