//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
}
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
pinopop escribió:que es el IR?
pinopop escribió:cual es la parte en la que se mueve el cursor con los sensores?
pinopop escribió:es estable el mando?
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 !
// #include <sdcard.h>
/**********************************************************************************
*
* 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);
}
*/
#---------------------------------------------------------------------------------
# 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?
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 respectivamentelibsdcard.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// #include <sdcard.h>
añade /* antes del void y */ al final para comentar la función entera/**********************************************************************************
*
* 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 ...#---------------------------------------------------------------------------------
# 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?
wiidmode escribió:c:/projects/wii/pruebair/source/PruebaIR.c:12:31: error: ../gfx/cursor.h: No such file or directory
wiidmode escribió:c:/projects/wii/pruebair/source/PruebaIR.c:13:32: error: ../fonts/font5.h: No such file or directory
wiidmode escribió: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)
wiidmode escribió:Muchas gracias.
Rigle escribió:te faltan esos archivos...
...los tienes que convertir tú.
Rigle escribió:de eso se encargará él (de explicarnos como xD)
const int nombre_high=
const int nombre_width=
const u16 nombre_img[]
wiidmode escribió:c:/projects/wii/pruebair/source/PruebaIR.c: In function 'main':
c:/projects/wii/pruebair/source/PruebaIR.c:75: error: too few arguments to function 'GRRLIB_Print'
c:/projects/wii/pruebair/source/PruebaIR.c:85: error: too few arguments to function 'GRRLIB_Print'
c:/projects/wii/pruebair/source/PruebaIR.c:96: error: too few arguments to function 'GRRLIB_Print'
make[1]: *** [PruebaIR.o] Error 1
"make": *** [build] Error 2
¿que raro no? No he tocado los parámetros de la función GRRLIB_Print del ejemplo ...
pinopop escribió:quisiera añadir k al pasar el cursor ensima de una imagen (boton) y al presionar A sobre la imagen se valla al homebrew channel ¿como lo hago?
muchas grax
spirax escribió:no se a que te refieres exactamente
la función te devuelve la posición real a la que apunta el wiimote.
no tienes que hacer cálculos de ningún tipo, salvo con el angulo y no en este caso lo hago para pasarselo a la GRRLIB
si lo que quieres es mover algo desde la posicion anterior a la actual lo tienes que mover tú
la funcion solo te dice donde esta actualmente el wiimote, por eso no entiendo a que te refieres con suavizar el movimiento.
sorry
un saludo
Spirax
pinopop escribió:aver tengo este codigo
(wiimote->btns_h & WPAD_BUTTON_A ) && ( wiimote > xpos 200 & < 386 && wiimote > ypos 200 & < 267 )
y me da error en lo siguiente
c:/devkitPro/proyectos/Wiimote/source/template.c:83: error: expected identifier before '(' token
cual es mi error
PD no tengo muchos conocimientos de C apenas estoy empezando
pinopop escribió:mira este es el codigo completo
if ((wiimote->btns_h & WPAD_BUTTON_A ) && ( wiimote > xpos 200 & < 386 && wiimote > ypos 200 & < 267 ) ){
GRRLIB_FillScreen(0x0000);
GRRLIB_Print (280,200,font5_char_width,font5_char_high,"saliendo....",font5);
GRRLIB_Render ();
exit(0);
}
lo que trato de hacer es k al pasar el puntero sobre una imagen, (ya la dibuje anteriormente) se produsca el codigo anterior, la imagen la dibije en x 200 e y 200 y la imagen tiene 186 x 67
en k me falla?
Ademas si alguien me puede explicar las funciones de la grrlib y como se aplica se lo agradeceria
grasias por la ayuda
pinopop escribió:mira este es el codigo completo
if ((wiimote->btns_h & WPAD_BUTTON_A ) && ( wiimote > xpos 200 & < 386 && wiimote > ypos 200 & < 267 ) ){
GRRLIB_FillScreen(0x0000);
GRRLIB_Print (280,200,font5_char_width,font5_char_high,"saliendo....",font5);
GRRLIB_Render ();
exit(0);
}
lo que trato de hacer es k al pasar el puntero sobre una imagen, (ya la dibuje anteriormente) se produsca el codigo anterior, la imagen la dibije en x 200 e y 200 y la imagen tiene 186 x 67
en k me falla?
Ademas si alguien me puede explicar las funciones de la grrlib y como se aplica se lo agradeceria
grasias por la ayuda
if(((xpos > 200) & (xpos < 386)) && ((ypos > 200) & (ypos < 267))) {
}
if (wiimote->btns_h & WPAD_BUTTON_A ){
}
//includes varios
#include <stdlib.h>
#include <ogcsys.h>
#include <zlib.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;
int vibracion=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
GRRLIB_Line (200 , 200, 386,200, 0xffff); //pintamos la linea superior del boton en blanco
GRRLIB_Line (200 , 267, 386,267, 0xffff); //pintamos la linea inferior del boton en blanco
GRRLIB_Line (200 , 200, 200,267, 0xffff); //pintamos la linea izquierda del boton en blanco
GRRLIB_Line (386 , 200, 386,267, 0xffff); //pintamos la linea derecha del boton en blanco
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
if(((xpos > 200) & (xpos < 386)) && ((ypos > 200) & (ypos < 267))) {
GRRLIB_Line (200 , 200, 386,200, 0xff0f);
GRRLIB_Line (200 , 267, 386,267, 0xff0f);
GRRLIB_Line (200 , 200, 200,267, 0xff0f);
GRRLIB_Line (386 , 200, 386,267, 0xff0f);
if (vibracion==0){
WPAD_Rumble(0,1);
usleep(60000);
vibracion=1;
WPAD_Rumble(0,0);
}
if (wiimote->btns_h & WPAD_BUTTON_A ){
GRRLIB_Print (220,220,font5_char_width,font5_char_high,"apretando boton",font5);
}
}else vibracion=0;
// 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
}