Recién desempacado y recién conectado :-D
lunes, 28 de octubre de 2013
sábado, 26 de octubre de 2013
Wii Classic Controller
Hace rato que debí postear este mensaje (la fecha del programa fuente indica 9 de junio del 2013) así que voy a aprovechar mientras se actualiza Pidora.
Echar a andar un control Wii Nunchuck en la Raspberry Pi no tiene ningún chiste, tal como dice Resident Bull. Echar a andar un Control Clásico Wii tampoco debe tener mucho chiste :-P. De eso trata este post.
Materiales:
- 1 Raspberry Pi (y todo que lleva alrededor, por supuesto)
- 1 Control Clásico Wii
- 1 Adaptador WiiChuck
- 4 cables jumper F-F
Conexiones:
De la Raspberry Pi al Adaptador WiiChuck:
- Pin 1 a "+".
- Pin 6 a "-".
- Pin 3 a "d".
- Pin 5 a "c".
Al igual que el Wii Nunchuck, el Control Clásico envía un paquete de datos I2C de 48 bits. Pero el formato es totalmente diferente:
Bit | ||||||||
Byte | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | RX<4:3> | LX<5:0> | ||||||
1 | RX<2:1> | LY<5:0> | ||||||
2 | RX<0> | LT<4:3> | RY<4:0> | |||||
3 | LT<2:0> | RT<4:0> | ||||||
4 | BDR | BDD | BLT | B- | BH | B+ | BRT | 1 |
5 | BZL | BB | BY | BA | BX | BZR | BDL | BDU |
Allí caben: los joysticks analógicos izquierdo (LX,LY) y derecho (RX,RY); dos disparadores LT, LR; el D-Pad: arriba, abajo, izquierda, derecha; y un titipuchal de botones: A, B, X, Y, ZL, ZR, +, -, HOME, LT y LR (sí, los disparadores también tienen botones).
Decodificar semejante estructura de datos requiere de unas de las tres virtudes del programador: lazziness. En lugar de andar aplicando máscaras y corrimientos cada vez que tienes que utilizar un dato, lo mejor es dejar que el compilador de encargue de todo eso:
struct wii_classic { unsigned lx:6; unsigned rx43:2; unsigned ly:6; unsigned rx21:2; unsigned ry:5; unsigned lt43:2; unsigned rx0:1; unsigned rt:5; unsigned lt20:3; unsigned padding:1; unsigned brt:1; unsigned bplus:1; unsigned bhome:1; unsigned bminus:1; unsigned blt:1; unsigned bdd:1; unsigned bdr:1; unsigned bdu:1; unsigned bdl:1; unsigned bzr:1; unsigned bx:1; unsigned ba:1; unsigned by:1; unsigned bb:1; unsigned bzl:1; };
En http://xml.cie.unam.mx/~hdcg/pub/wiiclassic.c se puede bajar un pequeño programa de prueba (basado en el de Ressident Bull. La salida del programa se verá más o menos como lo siguiente:
./wiiclassic 0x00 0x00 0xa4 0x20 0x01 0x01 33/30:15/16: 2/ 3; du dd dl dr a b x y lt zl zr rt minus home plus
Las primeros tres pares de números son los valores LX/LY:RX/RY:LT/LR. En seguida los valores del D-Pad: arriba (du), abajo (dd), izquierda (dl), derecha (dr). Y para terminar todos los botones. Cuando presiones un botón, se escribirá con MAYÚSCULAS.
Me quedan otros posts pendientes con la Pi y con el Arduino, pero por lo pronto es todo. ¡Felices códigos!