From 9b77ec15e5beeff3f57f845be883416d2a68b84d Mon Sep 17 00:00:00 2001 From: Sébastien Dailly Date: Mon, 30 Nov 2020 22:56:26 +0100 Subject: New article on rst & Latex. Changed theme --- content/Informatique/2009-03-11-wiimote.fr.rst | 118 +++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 content/Informatique/2009-03-11-wiimote.fr.rst (limited to 'content/Informatique/2009-03-11-wiimote.fr.rst') diff --git a/content/Informatique/2009-03-11-wiimote.fr.rst b/content/Informatique/2009-03-11-wiimote.fr.rst new file mode 100644 index 0000000..2c80584 --- /dev/null +++ b/content/Informatique/2009-03-11-wiimote.fr.rst @@ -0,0 +1,118 @@ +.. -*- mode: rst -*- +.. -*- coding: utf-8 -*- + +Controller la wiimote +##################### + + +:date: 2009-03-11 +:tags: Programmation, Wiimote, Python +:slug: controling-the-wiimote-i +:lang: fr +:logo: /images/wiican.png +:summary: |abstract| + +.. default-role:: literal + + +Création d'un plugin pour wminput +--------------------------------- + +Il existe de nombreux tutorials sur comment configurer cwiid, je voud laisse +les suivre pour obtenir un système fonctionnel pour la wiimote (vous pourrez +trouver des liens à la fin de cet article). Soyez sûr que la wiimote est +reconnue avant de continuer. + +|abstract| + +.. |abstract| replace:: + Voici un code que l'on peut utiliser comme base pour la création de notre + driver. Lancé en tant que main, il utilise pygame pour afficher les sources + infrarouges captées par la wiimote, mais il peut également être utilisé + comme plugin pour wminput (même s'il ne fait rien pour l'instant). + + +Vous pouvez le télécharger ici : wm_control.py_ (Code disponible sous licence GPL 3+) + +.. _wm_control.py: {filename}/resources/ir_control_0.py + + +Le code : + +.. code-block:: python + + import wmplugin + +Cet import n'existe pas, mais est créé par wminput lorsque celui-ci est lancé. +Il fourni la connexion avec le cœur wminput. Il vous suffit de placer le script +dans le répertoire de plugin de wminput (sur ma debian il se situe dans +`/usr/lib/cwiid/plugins/`) + +.. code-block:: python + + def wmplugin_init(id, wiimote_arg): + wmplugin.set_rpt_mode(id, cwiid.RPT_IR | cwiid.RPT_BTN) + return + + def wmplugin_info(): + return [], + [("X", wmplugin.REL | wmplugin.ABS, 1024, 0, 0, 0), + ("Y", wmplugin.REL | wmplugin.ABS, 768, 0, 0, 0)], + [] + +On instancie la wiimote ici et actions le mode InfraRouge. Le nom est choisi +par wminput si nous désirons pouvoir l'utiliser comme plugin. On déclare que le +plugin retourne les coordonées X et Y dans un système de coordonées relative +(l'ensemble des paramètres sont disponibles ici : `actions list +`_) + +Si nous voulons définir de nouvons boutons, nous avons juste à les nommer dans +la première list, ils seront accessibles dans le fichier de configuration sous +le nom `plugin.[buton\_name] = ACTION` + +.. code-block:: python + + def wmplugin_exec(messages): + '''Wiimote callback managing method + Recieves a message list, each element is different, see the libcwiid docs''' + x = y = 0 + + for msg in messages: + if msg[0] == cwiid.MESG_IR: + x, y = ir_sensor.get_movement(msg) + return [], (x, y) + +Voici le cœur de notre driver. Le nom de la méthode est également imposé par +wminput, de même que le format de retour. Nous recevons en paramètres la liste +des messages reçus par la wiimote. + +Si nous avons défini des boutons, il nous faut retourner leur état ici. Il +s'agit jute d'un booléen indiquant si le bouton est préssé (`True`) ou non +(`False`). + +Cette méthode ne retourne aucun autre parametres, et cela nous pose problème +car nous avons besoin de sauvegarder l'état du curseur entre deux appels. J'ai +contourné le problème en utilisant des arguments par défaut à la fonction +`get_movement` pour pouvoir stocker l'environnement d'un appel à un autre : + +.. code-block:: python + + def get_movement(msg, _old_points=[], _old_position = [0, 0]): + return 0, 0 + +Cette méthode retourne la difference entre la précédente position du curseur et +la nouvelle : `(0, 0)` signifie que le curseur n'a pas bougé, `(-10, 0)` +représente un déplacement vers la gauche. + +Pour l'instant, le plugin ne bouge pas le curseur, et ne lie pas les résultats +envoyés par la wiimote, mais vous avez assez d'information pour créer votre +propre plugin pour controller la wiimote. Vous pouvez accéder aux méthodes de +cwiid pour activer les leds, mettre en marche les differents modes (infrarouge, +accéléromètre, vibration, …) et définir vos propres actions. + +Links : + +`Le projet cwiid `_ + +`Installer Cwiid ( Ubuntu Documentation +) `_ -- cgit v1.2.3