Controlando tu computadora con el Wiimote mediante C# Parte II

Esta es la segunda parte de la serie de Artículos de como controlar tu computadora con el Wiimote en C#. 

Esta librería fue concebida inicialmente como un artículo para el sitio Coding4Fun de Microsoft por el Desarrollado Brian Peek en marzo del 2007. La librería ha ido evolucionando desde entonces hasta convertirse en una herramienta práctica y poderosa para utilizar el mando del wii. La última versión para la fecha del presente artículo es la 1.8, contiene un soporte limitado para el accesorio WiiMotionPlus aunque como todavía es inestable, se utilizará la versión 1.7.

Para comenzar, se crea un proyecto nuevo en c#, para este artículo se creará una Aplicación de Windows Forms. El primer paso será guardar el proyecto, con el fin de establecer la carpeta de archivos del mismo.

Luego se debe bajar la librería de la Página del Proyecto. Con lo que se debería contar con el archivo WiimotLib_1.7.zip, dentro del cual se encuentra el archivo WiimoteLib.dll que se deberá extraer en el directorio donde se guardó el proyecto.

Ahora, dentro del menú contextual encima del nombre de proyecto se escoge la opción Agregar Referencia como aparece en la imagen siguiente


Seguidamente, aparecerá el dialogo Agregar Referencia, donde se hará clic en la pestaña Examinar y se buscará el archivo Wiimotelib.dll dentro de la carpeta del proyecto donde se extrajo anteriornente.




Aceptando este último dialogo, la librería de control del Wiimote ha sido añadida con éxito.

Se probará el funcionamiento de la librería entonces añadiendo el siguiente código al formulario principal de la aplicación:
using System.Windows.Forms;

using WiimoteLib;
namespace EjemploWiimote

{   
    public partial class Form1 : Form


    {


        Wiimote Control; //Esta estructura representa al mando de wii 
        public Form1(){


            Control = new Wiimote();


            try


            {//Se intenta establecer una conexión con el control de Wii


                Control.Connect();


                // Se va a añadir una función que se active cuando el


                // mando produzca un evento   
                Control.SetReportType(InputReport.Buttons, true);


                Control.WiimoteChanged += new System.EventHandler<WiimoteChangedEventArgs>(Control_WiimoteChanged);


            }


            catch (WiimoteNotFoundException e)


            {// El Control no se encuentra enlazado con la computadora


                MessageBox.Show(e.Message);


            }


            InitializeComponent();


        }
        void Control_WiimoteChanged(object sender, WiimoteChangedEventArgs e)

        {//Funcíon que se activa cuando ocurre un cambio en el estado del control de wii


            if (e.WiimoteState.ButtonState.A)


            {//Si está presionado el Botón A


                MessageBox.Show("Presionado el Botón A!");


            }


        }


    }


}


Donde primero se incluye la librería WiimoteLib a fin de utilizar la estructura Wiimote que representa al control de wii.

Con la instrucción Connect, el programa busca entre los dispositivos bluetooth que se tengan enlazados con la computadora e intenta conectar al dispositivo que corresponda con un mando de wii. En caso de no estar ningún wiimote enlazado, se envía la excepción WiimoteNotFound indicando precisamente eso, que no se puede encontrar el control.

Se crea entonces una función(Control_WiimoteChanged) para manejar el evento WiimoteChanged que se activa cada vez que ocurre un evento significativo en el mando como el presionar un botón o mover el mando.  Este evento incluye como argumento un objeto WiimoteState que incluye diferentes estructuras que contienen atributos para representar el estado del mando en ese momento. Por ejemplo, en el código anterior se observa el estado e.WiimoteState.ButtonState.A, lo que significa que se esta observando el estado del boton A dentro del estado de los botones.

Se puede variar el criterio para generar un evento utilizando la función SetReportType donde se recibe un InputReport que es la clase de reporte a mostrar como Buttons que significa solo datos de los Botones por lo que solo los cambios en los botones activarán el evento o ButtonsAccel que representa que tanto los cambios en el estado de los botones como el movimiento del mando activarán el evento.

Para conocer todas las posibilidades que ofrece la librería se tiene que experimentar un poco.

Aquí se ofrece el código de ejemplo para esta parte del artículo.

En la siguiente entrega, como enviar las señales del mando hacia el mouse y el teclado.

Controlando tu computadora con el Wiimote mediante C# Parte I


Introducción

En los siguientes post  se tratará la forma de controlar una computadora mediante el mando de la consola Wii de Nintendo, utilizando el lenguaje C# para redirigir la entrada del mando hacia clics en teclado o movimientos y clicks del ratón.

Para la creación del programa de control se utilizaron los siguientes recursos:

•    Microsoft Visual C# Express 2008, que se puede descargar desde este enlace.

•    La librería para comunicarse con el Wiimote desde C# utilizada es la librería WiimoteLib, versión 1.7 elaborada por Brian Peek para el sitio Coding4Fun de Microsoft. Para descargarla, visite la página del proyecto en este enlace.

•    Un adaptador bluetooth para conectar el Wiimote con la computadora.

•    Un control de Wii XD.

El mando de la consola Wii ha asombrado a las personas por la manera en la que permite interactuar con los videojuegos ya que cuenta con la capacidad de detectar el movimiento en el espacio y la habilidad de apuntar hacia objetos en la pantalla.

Configuración del mando

Una de las características más interesantes del mando de Wii es la capacidad de ser detectado por una gran variedad de dispositivos bluetooth, incluida la computadora personal.  El mando de Wii puede ser configurado en una gran variedad de sistemas operativos, entre ellos Windows, Linux y Mac OS. Para este artículo se utilizará solo su configuración en el ambiente Windows. Se espera ahondar en la configuración para Linux en futuros artículos.

Existen varias maneras de acoplar el mando de Wii a la PC. Generalmente varían por el tipo de controladores que traiga el adaptador bluetooth. Es importante saber que existen ciertos adaptadores bluetooth incompatibles con el Wiimote.



Como primer paso hay que identificar el tipo de adaptador, existen gran variedad de software bluetooth en el mercado. Abajo se postearán tutoriales para una variedad de los mismos.

En mi caso particular, se resolvió el asunto de manera sencilla utilizando el menú por defecto Dispositivos Bluetooth de Microsoft Windows. Se encuentra en Panel de Control. Es recomendable tratar de conectar el adaptador y probar el controlador por defecto de Windows. Si no funciona puedes seguir las Instrucciones siguientes dependiendo del programa que traiga el dispositivo:
Por ahora posteo los tutoriales en inglés, a medida que los vaya traduciendo actualizaré los link a los post adecuados.

BlueSoleil –>  BlueSoleil Tutorial

WIDCOMM –>; How to: Widcomm

Kensington-> How to: Kensington Bluetooth

Toshiba Stack->  Toshiba Stack


En este post explicaré como enlazar el dispositivo usando la opción Dispositivos Bluetooth.



Primero se accede a la opción desde la vista clásica del Panel de Control.





Desde aquí se abre el cuadro de Dispositivos Bluetooth que debe verse como:
 
Se selecciona entonces la opción Agregar… lo que nos lleva al Asistente para agregar Dispositivos Bluetooth, donde debemos marcar la opción “Mi dispositivo está configurado y listo para ser detectado”. Aquí apretamos los botones 1 y 2 del wiimote y seleccionamos la opción Siguiente con lo que aparecerá el cuadro donde debemos seleccionar el  mando de Wii, llamado Nintendo RVL-CNT-01. en caso de que no aparezca se puede seguir tratando presionando Buscar de nuevo y volviendo a presionar 1 y 2 en el Wiimote (1 y 2 en el Wiimote es la señal por defecto para sincronizar el mando, las luces del control parpadean durante este proceso).




Luego de seleccionar el mando, se le da clic en Siguiente y aparece el cuadro para seleccionar una clave de paso para el dispositivo. El Wiimote no tiene una clave de paso por lo que se escoge la opción “No usar ninguna clave de paso”.
Luego de esto, se da clic en siguiente, se espera a que se termine de instalar el controlador y se da Finalizar cuando se complete el asistente.

Con esto se termina la primera parte del tutorial. En la segunda se tratará verdaderamente el tema de la librería WiimoteLib y su utilización.