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.

0 comentarios:

Publicar un comentario