diff options
-rw-r--r-- | content/Informatique/wiimote.rst | 12 | ||||
-rw-r--r-- | content/Informatique/wiimote_fr.rst | 115 | ||||
-rw-r--r-- | content/images/wiican.png | bin | 0 -> 4327 bytes |
3 files changed, 122 insertions, 5 deletions
diff --git a/content/Informatique/wiimote.rst b/content/Informatique/wiimote.rst index 019d9f2..eb6641d 100644 --- a/content/Informatique/wiimote.rst +++ b/content/Informatique/wiimote.rst @@ -7,6 +7,8 @@ Controling the wiimote (I) :date: 2009-03-11 :tags: Programmation, Wiimote, Python +:slug: controling-the-wiimote-i +:lang: en Creating the plugin for wminput @@ -27,7 +29,7 @@ You can get it here : About the code : -:: +.. code-block:: python import wmplugin @@ -35,7 +37,7 @@ This import does not exist, but is created by wminput when executed. It provide the connexion with the wminput core. Just put ( or link ) the script in the wminput plugin path ( on my debian this is the /usr/lib/cwiid/plugins/ ) -:: +.. code-block:: python def wmplugin_init(id, wiimote_arg): wmplugin.set_rpt_mode(id, cwiid.RPT_IR | cwiid.RPT_BTN) @@ -56,7 +58,7 @@ you can get the signification of all the parameters here : `actions list If we want to define new butons, we just have to name them in the first list, the'll be accessible in the configuration file as plugin.[buton\_name] = ACTION -:: +.. code-block:: python def wmplugin_exec(messages): '''Wiimote callback managing method @@ -81,7 +83,7 @@ way for passing throught is to use global variables. But it is unelegant and can cause problems if we want to use our code in imports. So we'ill use a list as default parameter and let python save it as you can see here : -:: +.. code-block:: python >>> def meth(a=[]): ... a.append(1) @@ -97,7 +99,7 @@ as default parameter and let python save it as you can see here : So the ir\_sensor.get\_movement method is defined with each parameter we want to save as an optional list -:: +.. code-block:: python def get_movement(msg, _old_points=[], _old_position = [0, 0]): return 0, 0 diff --git a/content/Informatique/wiimote_fr.rst b/content/Informatique/wiimote_fr.rst new file mode 100644 index 0000000..ca6ca65 --- /dev/null +++ b/content/Informatique/wiimote_fr.rst @@ -0,0 +1,115 @@ +.. -*- mode: rst -*- +.. -*- coding: utf-8 -*- + +Controller la wiimote +##################### + + +:date: 2009-03-11 +:tags: Programmation, Wiimote, Python +:slug: controling-the-wiimote-i +:lang: fr +:logo: static/images/wiican.png +:summary: |abstract| + + +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 <http://www.chimrod.com/downloads/wiimote/ir_control_0.py>`_ +(Code disponible sous licence GPL 3+) + +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 +<http://abstrakraft.org/cwiid/browser/trunk/wminput/action_enum.txt>`_) + +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 <http://abstrakraft.org/cwiid/>`_ + +`Installer Cwiid ( Ubuntu Documentation +) <https://help.ubuntu.com/community/CWiiD>`_ diff --git a/content/images/wiican.png b/content/images/wiican.png Binary files differnew file mode 100644 index 0000000..266f83a --- /dev/null +++ b/content/images/wiican.png |