Control de usuario
Patrocinadores
Estadísticas
Miembros:
334.591
Online:
972
Hilos:
1.380.512
Mensajes:
24.879.226
Stats

Índice de foros Wii Scene

[Ejemplo explicado]Usar el IR con el wiimote[Semi-tutorial]

Foro dedicado al software casero y los diferentes hacks no relacionados con backups

Moderadores: jamonazo2000, comepiedras

spirax
Avatar de usuario
MegaAdicto!!!
 
Mensajes: 610
Registrado: 07 May 2003

[Ejemplo explicado]Usar el IR con el wiimote[Semi-tutorial]

Mensajepor spirax 12 Jun 2008 19:03

siguiendo con el curso que empezo Rigle ;)

hoy os voy a poner un ejemplo de como acceder al ir y mover un cursor por la pantalla

vamos a usar la libreria GRRLIB.h y la wpad.h
libreria GRRLIB
font5.h de la libreria GRRLIB
un cursor.h creado con el conversor de png a .h de la libreria GRRLIB XD

os pego el código aquí comentadito con todo el detalle que se me ha ocurrido podía hacer falta, si hay dudas ya sabéis, podéis preguntar, pero no esperéis respuestas muy desarrolladas que yo también estoy empezando [sonrisa]

Código: Seleccionar todo
//includes varios
#include <stdlib.h>
#include <ogcsys.h>

//include para el wiimote
#include <wiiuse/wpad.h>

//include del grrlib
#include "GRRLIB.h"

//algunos graficos y fonts
#include "../gfx/cursor.h"
#include "../fonts/font5.h"


//inicializamos el buffer del grrlib
extern u16 *GRRLIB_buffer;

//int main(int argc, char **argv) {
int main() {
   
   //asignacion e inicio de variables
   u32 tipo;
   int ypos =0;
   int xpos =0;
   float angulo =0;

   //asignacion de los diferentes datos del mando a wiimote
   WPADData *wiimote;

   //asignamos memoria para el buffer
   GRRLIB_buffer=(u16 *)malloc(640*480*2);
   
   //inicializamos el video y el grrlib_video
   VIDEO_Init();
   GRRLIB_InitVideo ();
   
   //inicializamos los mandos y selecionamos el formato de los datos del mando 0
   WPAD_Init();
   WPAD_SetDataFormat(0, WPAD_FMT_BTNS_ACC_IR);

   //inicializamos el grrlib
   GRRLIB_Start();
   
   //rellenamos toda la pantalla de color azul en el buffer
   //la borramos xD
   GRRLIB_FillScreen(0x00f0);      
   
   //pasamos el buffer a la pantalla
   GRRLIB_Render();
   
   //esperamos el sincronismo
   VIDEO_WaitVSync();
   
   
   while(1) { //bucle principal
      GRRLIB_FillScreen(0x00f0);   //borramos el buffer    

            
      WPAD_ScanPads(); //miramos los valores de los wiimotes
            
      if(WPAD_Probe(0, &tipo) == WPAD_ERR_NONE) { // si el wiimote 0 no tiene errores seguimos
         wiimote = WPAD_Data(0); //asignamos los datos del wiimote 0
                  
         if(wiimote->ir.valid) //comprobamos que el puntero es valido
         {
         ypos = wiimote->ir.y; //asignamos la posicion y
         xpos = wiimote->ir.x; //asignamos la posicion x
         angulo = wiimote->ir.angle / 180 * 3.1415; //calculamos el angulo / 180 * PI
         
         // pintamos en la posicionx, posicion y del ancho del cursor, del alto del cursor, el cursor , el angulo de inclinacion y el alpha
         GRRLIB_DrawImg( xpos, ypos, cursor_width, cursor_high,cursor_img, angulo,1 );
         }
         else { //si el puntero no es valido muestra apunta a la pantalla xD
         GRRLIB_Print (230,300,font5_char_width,font5_char_high,"apunta a la pantalla",font5);
         
         }
                  
         //salir del programa si se pulsa el boton Home
         if(wiimote->btns_h & WPAD_BUTTON_HOME)
            {
            GRRLIB_FillScreen(0x0000);   //borramos el buffer ahora en negro ;)

            //imprime el mensaje al buffer
            GRRLIB_Print (280,200,font5_char_width,font5_char_high,"saliendo",font5);
            
            //saca el buffer por pantalla
            GRRLIB_Render ();
            
            //sale al HBC
            exit(0);
            }
         
      }
      else { //si el wiimote tiene errores puede ser que no este sincronizado, muestra mensaje
         GRRLIB_Print (65,300,font5_char_width,font5_char_high,"puede que el mando este apagado o no esta sincronizado",font5);
         }
      GRRLIB_Render (); //sacca el buffer a pantalla
      VIDEO_WaitVSync(); //espera al sincronismo de refresco
   }
   
   
   return 0; //si llegara hasta aqui saldria devolviendo 0, cosa que dudo xD
}


lo dicho no vale pegar y copiar en otros programas, al menos estudiarlo y modificarlo a vuestro gusto, pero no me seáis tan garrulos de copiar y pegar y no dar créditos del creador original ¬_¬

lo dicho los creditos de mi ejemplo
a los creadores de las librerias GRRLIB, wiiuse, libogc
a los creadores del devkitpro
a wanin , marcan y demás personajillos que no conozco y deberían de estar aquí [+risas]

un saludo
PD:
El codigo anterior es en su totalidad de mi puño y letra, habiendo estudiado los ejemplos que venian con el devkitpro. [bad]
si no sois capaces de compilarlo, lo decis por aqui y vemos que ocurre y si no proximamente os adjunto todos los files necesarios, pero si realmente estais intentando aprender deverias tener los minimos recursos para conseguir lo que hace falta [ginyo]

Edito para añadiros un fichero adjunto en el cual esta, la fuente5 ligeramente modificada para que salga en blanco sobre cualquier fondo y el cursor que he usado yo.
no seais muy criticos con el cursor, jajaja, al rotarlo se nota mucho el pixelado, pero vamos como dije es un ejemplo... no vale copiar y pegar
la fuente si, ya que no es mia, pertenece a las fuentes del GRRLIB.c pero lo modifique a blanca en vez de negra y el fondo se pinta transparente ....
La original es Negra con fondo blanco....

Wiimote.rar
font5.h y cursor.h
(5.23 KB) 68 veces
Ultima edición por spirax el 13 Jun 2008 09:35, editado 1 vez

Ealdor
Avatar de usuario
MegaAdicto!!!
 
Colaborador wiki
 
Mensajes: 623
Registrado: 02 May 2008

Mensajepor Ealdor 12 Jun 2008 19:11

Muy buena iniciativa esta que habeis tenido de ir poniendo codigos con distintas funciones (imprimir texto, mover el wiimote, ...), sirve mucho para gente que esta empezando. En mi opinion lo mejor sin duda es aprender a base de sources y ver y estudiar muchos ejemplos.

Saludos.
Imagen
Imagen
Imagen

"Me construyo amigos. Son juguetes. Mis amigos son juguetes. Los hago yo. Es un hobby. Soy diseñador genético."

pho
Avatar de usuario
MayThe Sun BeWithYou
 
Mensajes: 1234
Registrado: 08 Oct 2006
Ubicación: Castellon

Mensajepor pho 12 Jun 2008 19:13

Hace falta hacer esto
//asignacion de los diferentes datos del mando a wiimote
WPADData *wiimote;
y despues esto otra vez?
wiimote = WPAD_Data(0); //asignamos los datos del wiimote 0



Que quiere decir exactamente que el puntero es valido?
if(wiimote->ir.valid) //comprobamos que el puntero es valido
Imagen Imagen
[18:51:04]<coyote> argh! un virus winsucker!!!
[18:51:06] *** Conficker has been kicked (mkfs.ext3 /dev/sda1 -- GNU/Linux rules [rox])

spirax
Avatar de usuario
MegaAdicto!!!
 
Mensajes: 610
Registrado: 07 May 2003

Re:

Mensajepor spirax 12 Jun 2008 19:27

pho escribió:Hace falta hacer esto
//asignacion de los diferentes datos del mando a wiimote
WPADData *wiimote;
y despues esto otra vez?
wiimote = WPAD_Data(0); //asignamos los datos del wiimote 0



Que quiere decir exactamente que el puntero es valido?
if(wiimote->ir.valid) //comprobamos que el puntero es valido


La primera
//asignacion de los diferentes datos del mando a wiimote
WPADData *wiimote;
es para decirle algo asi como el formato de lo datos que tendra la variable wiimote

en la segunda
wiimote = WPAD_Data(0); //asignamos los datos del wiimote 0

ya le asignamos los valores de los datos que devuelve el pad 0
para luego leerlos de uno en uno ....

Que quiere decir exactamente que el puntero es valido?

que esta dentro de la pantalla y lo podemos dibujar, si no es valido tenemos que pasar o hace otra cosa, yo en el ejemplo muestro un mensaje que dice que apuntes a la pantalla :)

Un saludo

pinopop
Avatar de usuario
Adicto
 
Mensajes: 483
Registrado: 27 Feb 2008
Ubicación: wtf

Mensajepor pinopop 13 Jun 2008 04:17

que es el IR?
no entendi mucho el codigo..... cual es la parte en la que se mueve el cursor con los sensores?
es estable el mando?
son todas mis dudas

spirax
Avatar de usuario
MegaAdicto!!!
 
Mensajes: 610
Registrado: 07 May 2003

Re:

Mensajepor spirax 13 Jun 2008 06:37

pinopop escribió:que es el IR?

IR viene del ingles InfraRed pero las iniciales coinciden con Español InfraRojos


pinopop escribió:cual es la parte en la que se mueve el cursor con los sensores?

ypos = wiimote->ir.y; //asignamos la posicion y
xpos = wiimote->ir.x; //asignamos la posicion x
angulo = wiimote->ir.angle / 180 * 3.1415; //calculamos el angulo / 180 * PI

aqui lo que hacemos es asignarle a las variables que usamos para pintar el cursor, las posiciones a las que apunta el wiimote.
por lo que al pintar el cursor de nuevo este se encuentra donde esta apuntado el mando.

pinopop escribió:es estable el mando?

la estabilidad depende de tu pulso [carcajad] si se te mueve mucho el cursor temblará [+risas] [+risas]

Un saludo
Spirax

wiidmode
Avatar de usuario
Adicto
 
Mensajes: 164
Registrado: 05 Jun 2008

Mensajepor wiidmode 13 Jun 2008 08:41

Hola,

Perdón por la pregunta de novato, intento compilarlo y me da esto:

:/projects/wii/pruebair/source/GRRLIB.c:23:20: warning: sdcard.h: No such file or directory

He estado mirando en wiibrew y googleando pero no se como conseguir la sdcard.h
El ejemplo HellowHold me funciona perfectamente.
He bajado GRRLIB y que copiado el contenido en el proyecto del devkitPro donde intento compilar tu ejemplo.

Gracias !

spirax
Avatar de usuario
MegaAdicto!!!
 
Mensajes: 610
Registrado: 07 May 2003

Re:

Mensajepor spirax 13 Jun 2008 09:06

wiidmode escribió:Hola,

Perdón por la pregunta de novato, intento compilarlo y me da esto:

:/projects/wii/pruebair/source/GRRLIB.c:23:20: warning: sdcard.h: No such file or directory

He estado mirando en wiibrew y googleando pero no se como conseguir la sdcard.h
El ejemplo HellowHold me funciona perfectamente.
He bajado GRRLIB y que copiado el contenido en el proyecto del devkitPro donde intento compilar tu ejemplo.

Gracias !


Esa es la libreria de acceso a la sd que utiliza el grrlib, El las primeras lineas de tu GRRLIB.c veras el include con es libreria, la usa para una funcion oculta para hacer una captura de la pantalla y guardarlo en la tarjeta que esta al final del .c , puedes hacer dos cosas.

1.- en el adjunto esta la sdcard.h y el libsdcard.a que tengo yo.
copialos a c:\devkitpro\libogc\include y c:\devkitpro\libogc\lib\wii respectivamente
libsdcard.rar
(27.9 KB) 41 veces

pero ten en cuenta que esta librería que adjunto es de mi devkitpro de windows, si usas linux no se si vale, que alguien lo confirme, please

2.- podrias comentar las lineas del GRRLIB.c ya que no vas a usar la captura de momento....
añade // delante del include de la sdcard.h
Código: Seleccionar todo
// #include <sdcard.h>


añade /* antes del void y */ al final para comentar la función entera
Código: Seleccionar todo
/**********************************************************************************
*
* The "hidden" ScreenShoter Routine is here ;)
*
***********************************************************************************/

/*
void GRRLIB_ScrShot(char* file){
    SDCARD_Init();
    sd_file *handle;
    handle = SDCARD_OpenFile(file, "w");
    SDCARD_WriteFile(handle, (u16*)GRRLIB_buffer, 640*480*2);
    SDCARD_CloseFile(handle);
}
*/     




*************

En el Makefile que yo uso para compilar lo enlazo a estas librerias ...
Código: Seleccionar todo
#---------------------------------------------------------------------------------
# any extra libraries we wish to link with the project
#---------------------------------------------------------------------------------
LIBS   :=   -lwiiuse -lbte -logc -lm



PD. ahora me has echo pensar, esta librería no viene con el libogc ¿de donde la saque yo y cuando?

Rigle
Avatar de usuario
大グレン団
 
Mensajes: 5767
Registrado: 10 Nov 2007
Ubicación: Kamina City

Mensajepor Rigle 13 Jun 2008 09:57

gracias por este tuto!

ya podré seguir aprendiendo XD

EDIT:
PD. ahora me has echo pensar, esta librería no viene con el libogc ¿de donde la saque yo y cuando?



En el devkit 1.47 con el ppc r15 sí viene [sonrisa]
Sobremesa: Intel Quad 2 Core Q8200 2,33 Ghz || Nvidia GeForce 9800 GT || 4 GB RAM || 320 HDD
Netbook: AMD Athlon L110 1,2 Ghz @1,43 Ghz OC || ATI Xpress 1270 128 Mbs || 2 GB RAM || 250 GB HDD
Portatil: ASUS K52J: I5-520 || ATI 5470 @1GB || 4GB RAM || 500GB HDD
Consolas: Gameboy Pocket (x3), Gameboy Advance, Gameboy Advance SP, Gameboy Micro, Nintendo Ds, Nintendo Ds Lite (x2), Nintendo DSi, Nintendo Gamecube, Wii, PSP Slim 2004

Rigle ©2004-2012

wiidmode
Avatar de usuario
Adicto
 
Mensajes: 164
Registrado: 05 Jun 2008

Re: Re:

Mensajepor wiidmode 13 Jun 2008 11:30

spirax escribió:
wiidmode escribió:Hola,

Perdón por la pregunta de novato, intento compilarlo y me da esto:

:/projects/wii/pruebair/source/GRRLIB.c:23:20: warning: sdcard.h: No such file or directory

He estado mirando en wiibrew y googleando pero no se como conseguir la sdcard.h
El ejemplo HellowHold me funciona perfectamente.
He bajado GRRLIB y que copiado el contenido en el proyecto del devkitPro donde intento compilar tu ejemplo.

Gracias !


Esa es la libreria de acceso a la sd que utiliza el grrlib, El las primeras lineas de tu GRRLIB.c veras el include con es libreria, la usa para una funcion oculta para hacer una captura de la pantalla y guardarlo en la tarjeta que esta al final del .c , puedes hacer dos cosas.

1.- en el adjunto esta la sdcard.h y el libsdcard.a que tengo yo.
copialos a c:\devkitpro\libogc\include y c:\devkitpro\libogc\lib\wii respectivamente
libsdcard.rar

pero ten en cuenta que esta librería que adjunto es de mi devkitpro de windows, si usas linux no se si vale, que alguien lo confirme, please

2.- podrias comentar las lineas del GRRLIB.c ya que no vas a usar la captura de momento....
añade // delante del include de la sdcard.h
Código: Seleccionar todo
// #include <sdcard.h>


añade /* antes del void y */ al final para comentar la función entera
Código: Seleccionar todo
/**********************************************************************************
*
* The "hidden" ScreenShoter Routine is here ;)
*
***********************************************************************************/

/*
void GRRLIB_ScrShot(char* file){
    SDCARD_Init();
    sd_file *handle;
    handle = SDCARD_OpenFile(file, "w");
    SDCARD_WriteFile(handle, (u16*)GRRLIB_buffer, 640*480*2);
    SDCARD_CloseFile(handle);
}
*/     




*************

En el Makefile que yo uso para compilar lo enlazo a estas librerias ...
Código: Seleccionar todo
#---------------------------------------------------------------------------------
# any extra libraries we wish to link with the project
#---------------------------------------------------------------------------------
LIBS   :=   -lwiiuse -lbte -logc -lm



PD. ahora me has echo pensar, esta librería no viene con el libogc ¿de donde la saque yo y cuando?


Gracias ... tema solucionado ... pero ahora aparece esto:

c:/projects/wii/pruebair/source/PruebaIR.c:12:31: error: ../gfx/cursor.h: No such file or directory
c:/projects/wii/pruebair/source/PruebaIR.c:13:32: error: ../fonts/font5.h: No such file or directory
c:/projects/wii/pruebair/source/PruebaIR.c: In function 'main':
c:/projects/wii/pruebair/source/PruebaIR.c:72: error: 'cursor_width' undeclared (first use in this function)

¿ Me faltan más librerías ?

Muchas gracias.

Siguiente

Volver a Scene

¿Quién está conectado?

Usuarios navegando por este foro: No hay usuarios registrados visitando el foro y 0 invitados