Les enseignements - Plateforme Temps Réel - Atelier Hypermédia - Happy Code Farm - Processing -

Processing Wiimote+BalanceBoard (mac)

Pour commencer, aller sur le site d’Osculator et télécharger le programme. Vous allez utiliser celui-ici pour mettre en relation votre mac et la télécomande Wii (ou le Balance Board) via Bluetooth. Osculator envoie par défaut tous vos gestes à votre propre ordinateur (addresse ip 127.0.0.1) sur le port 9000. Nous capterons ces informations via OSC dans Processing.

Noter qu’en plus du programme Processing, nous avons inclus un fichier de configuration («  osculator.oscd  ») pour qu’Osculator s’auto-configure juste-comme-il-faut. Il suffit donc de lancer le programme Osculator via ce fichier, puis d’appuyer sur les boutons 1 & 2 du Wiimote (ou le bouton de synchronisation en-dessous du Balance Board) pour les synchronizer.

Si vous n’avez pas importé la bibliothèque OSC dans Processing, il faut aller sur le site d’Andreas Schlegel et télécharger OSCP5. Décompresser ce .zip, et placez-le dans le dossier « libraries » de votre dossier personnel de Sketchs Processing (dans «  Documents  » sur mac ou «  mes Documents  » sur Windows).

Une fois qu’Osculator fonctionne avec votre Wiimote, ouvrez le programme tout en bas (« Wiimote_Balance  ») dans Processing. Si tout est bien configuré, vous devriez voir des formes bouger. Vous pouvez aussi appuyer sur la touche ’V’ pour faire vibrer le Wiimote ou la touche ’L’ pour faire clignotter les LED du Wiimote.

Ensuite, pour utiliser ce code dans un autre programme que ce demo plutôt simple, il suffit de copier uniquement le fichier « Wii.pde » dans le dossier de votre Sketch et redémarrer Processing. Cette action devrait faire apparaître « Wii » dans un nouvel onglet. Après, il faut inclure ces lignes dans votre programme :


Wii wii;

void setup() {

   wii = new Wii();

}

À partir de ce moment, une nouvelle série de variables seront à votre disposition pour votre programme Processing. Voici quelques exemples :


int r = wii.balanceBoard.values[0]*255;
int v = wii.balanceBoard.values[1]*255;
int b = wii.balanceBoard.values[2]*255);

background(r, v, b);

Ou vous pouvez les utiliser directement dans la création d’une forme :


ellipse(wii.wiimote.accel.pitch*width, wii.wiimote.accel.roll*height, wii.wiimote.accel.accel*width, wii.wiimote.accel.accel*height);

Voici la liste des variables que vous trouverez également dans les commentaires du programme :


balance board

wii.balanceBoard                    *raccourci vers le premier balanceBoards[n] qui arrive
wii.balanceBoards[n]                *jusqu'à 4 wiimotes ou balanceBoards
wii.balanceBoards[n].values[n]      *il y en a 4
wii.balanceBoards[n].someone        *boolean (true/false) pour dire s'il y a quelqu'un dessus ou pas
wii.balanceBoards[n].top_left       *raccourci vers .values[0]
wii.balanceBoards[n].top_right      *raccourci vers .values[1]
wii.balanceBoards[n].bottom_right   *raccourci vers .values[2]
wii.balanceBoards[n].bottom_left    *raccourci vers .values[3]
wii.balanceBoards[n].sum            *la somme des 4 valeurs (x 100 pour avoir les Kg)

wiimote

wii.wiimote                         *raccourci vers le premier wiimotes[n] qui arrive
wii.wiimotes[n]                     *jusqu'à 4 wiimotes ou balanceBoards
wii.wiimotes[n].accel
wii.wiimotes[n].accel.pitch
wii.wiimotes[n].accel.roll
wii.wiimotes[n].accel.yaw
wii.wiimotes[n].accel.accel         *l'ampleur des trois précédentes valeurs

wii.wiimotes[n].button
wii.wiimotes[n].button.a
wii.wiimotes[n].button.b
wii.wiimotes[n].button.one
wii.wiimotes[n].button.two
wii.wiimotes[n].button.left
wii.wiimotes[n].button.right
wii.wiimotes[n].button.up
wii.wiimotes[n].button.down
wii.wiimotes[n].button.minus
wii.wiimotes[n].button.home
wii.wiimotes[n].button.plus

wii.wiimotes[n].ir
wii.wiimotes[n].ir.x
wii.wiimotes[n].ir.y
wii.wiimotes[n].ir.xys[n]             *x, y, rayon : jusqu'à 4 points
wii.wiimotes[n].ir.xys[n].x
wii.wiimotes[n].ir.xys[n].y
wii.wiimotes[n].ir.xys[n].r           *la taille

nunchuk

wii.wiimotes[n].nunchuk.accel
wii.wiimotes[n].nunchuk.accel.pitch
wii.wiimotes[n].nunchuk.accel.roll
wii.wiimotes[n].nunchuk.accel.yaw
wii.wiimotes[n].nunchuk.accel.accel         *l'ampleur des trois précédentes valeurs

wii.wiimotes[n].nunchuk.joystick
wii.wiimotes[n].nunchuk.joystick.x
wii.wiimotes[n].nunchuk.joystick.y

wii.wiimotes[n].nunchuk.button
wii.wiimotes[n].nunchuk.button.c
wii.wiimotes[n].nunchuk.button.z

classic controller

wii.wiimotes[n].classic.right
wii.wiimotes[n].classic.right.x
wii.wiimotes[n].classic.right.y

wii.wiimotes[n].classic.left
wii.wiimotes[n].classic.left.x
wii.wiimotes[n].classic.left.y

wii.wiimotes[n].classic.button
wii.wiimotes[n].classic.button.a
wii.wiimotes[n].classic.button.b
wii.wiimotes[n].classic.button.x
wii.wiimotes[n].classic.button.y
wii.wiimotes[n].classic.button.left
wii.wiimotes[n].classic.button.right
wii.wiimotes[n].classic.button.up
wii.wiimotes[n].classic.button.down
wii.wiimotes[n].classic.button.l          * cette valeur est analogique 0.0 -> 1.0
wii.wiimotes[n].classic.button.zl
wii.wiimotes[n].classic.button.r          * cette valeur est analogique 0.0 -> 1.0
wii.wiimotes[n].classic.button.zr
wii.wiimotes[n].classic.button.home
wii.wiimotes[n].classic.button.minus
wii.wiimotes[n].classic.button.plus

Si vous voulez voir/tester toutes les possibilités, demander à wii de tout déssiner :


void draw() {
 background(255);
 wii.draw();
}

Notez que les valeurs arriveront toujours entre 0.0 et 1.0. Si on veut 0-255, il suffit de les multiplier par 255. Si on veut jusqu’à la taille du Sketch, il suffit de multiplier par ’width’ ou par ’height’ (ex : wii.accel.roll * width).

Notez également que le programme se débrouille pour remplir les valeurs au fur et à mesure que celles-ci arrivent. De cette façon, vous pouvez branchez-débrancher des controlleurs en plein milieu du fonctionnement du programme.


Si on a plusieurs Wiimotes attachés, il faut indiquer lequel on veut :

// cette image bougera une image et l'agrandira suivant
float x = wii.wiimotes[3].accel.pitch * width;
float y = wii.wiimotes[3].accel.roll * width;
float largeur = wii.wiimotes[3].accel.accel * monImage.width;
float hauteur = wii.wiimotes[3].accel.accel * monImage.height;

Pour faire vibrer un Wiimote, il faut lui demander de vibrer (0.0 = éteint / 1.0 allumé) :

wii.wiimotes[n].vibrate(1.0);

Pour changer les lumières LED, on envoie la commande led(numéro_du_masquage) :


wii.wiimotes[n].led(15);

Voici quelques examples de valeurs de masquage :

0 = 0000
1 = 0001
2 = 0010
3 = 0011
4 = 0100
8 = 1000
15= 1111

Il y a aussi une commande pour allumer les LED comme un indicateur de niveau (0.0 - 1.0)

wii.wiimotes[n].level(valeur);

ESAAix - Ecole supérieure d’art d’Aix-en-Provence - http://www.ecole-art-aix.fr