Autor Tema: ayuda con mi proyecto en una glcd con PIC167877  (Leído 2075 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Rick

  • PIC10
  • *
  • Mensajes: 2
ayuda con mi proyecto en una glcd con PIC167877
« en: 07 de Enero de 2021, 13:57:56 »
buenas tardes o noches, necesito una ayuda con mi proyecto porfavor:

estoy haciendo un juego estilo "flappy bird" utilizando CCS Copiler y simulacion en proteus, necesito una guia de como dibujar los obstaculos y que vengan hacia el personaje, que use timer pueda contar el puntaje y un boton de pausa

el codigo que hice hasta ahora es este, me base en un problema del foro, muchas gracias por su atencion

Código: [Seleccionar]
#include <16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#include <HDM64GS12.c>
#include <graphics.c>
#use standard_io(a)


void main () {
signed long x;
signed long y;
signed long d;
x=8;
y=57;
d=6;


glcd_init(ON);         
glcd_circle(8,y,5,0,1);
glcd_line(127,40,127,63,1);



while (1){
if(y<=57 & input_state(PIN_A4)==0) 
{
  glcd_circle(8,y,5,0,1);       
  glcd_circle(8,y+1,5,0,0);     
  glcd_line(127,40-1,127,63-1,1);
  y--;                                 

}
if(y<57 && input_state(PIN_A4)==1)
{
  glcd_circle(8,y,5,0,1);         
  glcd_circle(8,y-1,5,0,0);       
  y++;                             
}

}
}

 

https://ibb.co/nmJbZ2D

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:ayuda con mi proyecto en una glcd con PIC167877
« Respuesta #1 en: 08 de Enero de 2021, 09:59:04 »
La solucion mas practica, seria...

Tener espacio en memoria para almacenar todos los pixels + algunos mas de altura, editar en memoria, crear tus funciones para creacion de obstaculos, en el cual podes definir abertura y altura del obstaculo.

De ahi en adelante es guardar la posicion del pajaro, entonces... por cada movimiento:
- Borras el pajaro
- Rotas todo el array
- Dibujas el pajaro (En este punto comprobas que el lugar donde estas dibujando NO este ocupado por algun otro 1 del obstaculo. De ser asi tenes las condiciones de colision
- Envias todo seguido al LCD

No creo que te sirva ninguna funcion pre-armada, todo lo demas queda en vos, y con ese micro.... mmm.. buscaria algo mas rapido o que pueda hacer DMA asi liberar al micro del envio de datos.

En resumen: Tenes que borrar todo y volver a dibujar.
« Última modificación: 08 de Enero de 2021, 10:01:36 por KILLERJC »

Desconectado Rick

  • PIC10
  • *
  • Mensajes: 2
Re:ayuda con mi proyecto en una glcd con PIC167877
« Respuesta #2 en: 08 de Enero de 2021, 10:56:50 »
La solucion mas practica, seria...

Tener espacio en memoria para almacenar todos los pixels + algunos mas de altura, editar en memoria, crear tus funciones para creacion de obstaculos, en el cual podes definir abertura y altura del obstaculo.

De ahi en adelante es guardar la posicion del pajaro, entonces... por cada movimiento:
- Borras el pajaro
- Rotas todo el array
- Dibujas el pajaro (En este punto comprobas que el lugar donde estas dibujando NO este ocupado por algun otro 1 del obstaculo. De ser asi tenes las condiciones de colision
- Envias todo seguido al LCD

No creo que te sirva ninguna funcion pre-armada, todo lo demas queda en vos, y con ese micro.... mmm.. buscaria algo mas rapido o que pueda hacer DMA asi liberar al micro del envio de datos.

En resumen: Tenes que borrar todo y volver a dibujar.


ya logre que el pajaro(o circulo) se pueda mover junto a los obstaculos, lo que aun no me queda claro es como hacer la colicion con los obstáculos y que el programa me vaya mas rápido, avance en esto pero todavia me falta:
Código: [Seleccionar]
#include <16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(crystal=4000000)
#include <HDM64GS12.c>
#include <graphics.c>
#use standard_io(a)

const int8 imagen[64][16] ={
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
 0x30 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
 0x0C , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
 0x03 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x06,
 0x00 , 0xC0 , 0x00 , 0x04 , 0x30 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x18,
 0x00 , 0x30 , 0x00 , 0x26 , 0xA8 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x60,
 0x00 , 0x0C , 0x01 , 0xA6 , 0x68 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x80,
 0x00 , 0x03 , 0x01 , 0x65 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x06 , 0x00,
 0x00 , 0x00 , 0xCC , 0x50 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x18 , 0x00,
 0x00 , 0x00 , 0x30 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xE0 , 0x00,
 0x00 , 0x00 , 0xAE , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x00 , 0x00,
 0x00 , 0x00 , 0x2B , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0C , 0x00 , 0x00,
 0x00 , 0x02 , 0xE0 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x30 , 0x00 , 0x00,
 0x00 , 0x05 , 0x20 , 0x30 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xC0 , 0x00 , 0x00,
 0x00 , 0x04 , 0x00 , 0x0C , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x07 , 0x00 , 0x00 , 0x00,
 0x00 , 0x0B , 0x00 , 0x03 , 0xFB , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x18 , 0x00 , 0x00 , 0x00,
 0x00 , 0x1A , 0x00 , 0x03 , 0xFB , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0xFF , 0x00 , 0x00 , 0x00,
 0x00 , 0x08 , 0x00 , 0x0F , 0x30 , 0x3F , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0D , 0x81 , 0x00 , 0x00 , 0x00,
 0x00 , 0x38 , 0x00 , 0x3C , 0x0C , 0x0F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x36 , 0x01 , 0x00 , 0x00 , 0x00,
 0x00 , 0x10 , 0x00 , 0x70 , 0x03 , 0x03 , 0xE0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x58 , 0x01 , 0x00 , 0x00 , 0x00,
 0x00 , 0x88 , 0x00 , 0xE0 , 0x00 , 0xE1 , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0xE0 , 0x0D , 0x00 , 0x00 , 0x00,
 0x00 , 0x40 , 0x01 , 0xC0 , 0x00 , 0x18 , 0xF8 , 0x00 , 0x00 , 0x00 , 0x03 , 0x80 , 0x33 , 0x00 , 0x00 , 0x00,
 0x00 , 0x40 , 0x03 , 0x80 , 0x00 , 0x06 , 0x7C , 0x00 , 0x00 , 0x00 , 0x0C , 0x80 , 0x21 , 0x00 , 0x00 , 0x00,
 0x00 , 0xC0 , 0x03 , 0x00 , 0x00 , 0x01 , 0xBE , 0x00 , 0x00 , 0x00 , 0x31 , 0x80 , 0x21 , 0x00 , 0x00 , 0x00,
 0x00 , 0x00 , 0x07 , 0x00 , 0x00 , 0x00 , 0x7E , 0x00 , 0x00 , 0x00 , 0xC1 , 0x00 , 0x20 , 0x00 , 0x00 , 0x00,
 0x01 , 0xC0 , 0x0F , 0x00 , 0x00 , 0x00 , 0x1F , 0x00 , 0x00 , 0x07 , 0xE1 , 0x00 , 0x20 , 0x00 , 0x00 , 0x00,
 0x03 , 0x03 , 0xEE , 0x00 , 0x00 , 0x00 , 0x1F , 0x00 , 0x00 , 0x7C , 0x0F , 0xE0 , 0x20 , 0x00 , 0x00 , 0x00,
 0x00 , 0x40 , 0x06 , 0x00 , 0x00 , 0x00 , 0x1F , 0x80 , 0x01 , 0xE0 , 0x00 , 0x20 , 0x20 , 0x00 , 0x00 , 0x00,
 0x03 , 0xC0 , 0x01 , 0x00 , 0x00 , 0x00 , 0x0F , 0xE0 , 0x03 , 0x80 , 0x00 , 0x20 , 0x20 , 0x00 , 0x00 , 0x00,
 0x01 , 0x80 , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x08 , 0x06 , 0x00 , 0xF0 , 0x20 , 0x20 , 0x00 , 0x00 , 0x00,
 0x00 , 0x80 , 0x00 , 0x40 , 0x00 , 0x00 , 0x0F , 0x86 , 0x18 , 0x00 , 0x8E , 0x20 , 0x3E , 0x00 , 0x00 , 0x00,
 0x03 , 0x00 , 0x10 , 0x20 , 0x00 , 0x00 , 0x0F , 0x81 , 0xE8 , 0x00 , 0x07 , 0x20 , 0x02 , 0x00 , 0x00 , 0x00,
 0x00 , 0x00 , 0x18 , 0x10 , 0x00 , 0x03 , 0xFF , 0x83 , 0x70 , 0x00 , 0x84 , 0xA0 , 0x02 , 0xFF , 0xC0 , 0x00,
 0x01 , 0x80 , 0x1C , 0x00 , 0x00 , 0x02 , 0x00 , 0x8F , 0xFF , 0x00 , 0x44 , 0x60 , 0x3E , 0x00 , 0x38 , 0x00,
 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
 0x00 , 0x00 , 0x1E , 0x03 , 0xD0 , 0x01 , 0x00 , 0xC4 , 0x01 , 0x80 , 0x18 , 0x00 , 0x20 , 0x38 , 0x04 , 0x00,
 0x02 , 0x40 , 0x0E , 0x00 , 0x20 , 0x01 , 0x03 , 0x84 , 0x01 , 0x60 , 0x06 , 0x00 , 0x40 , 0x44 , 0x02 , 0x00,
 0x03 , 0x80 , 0x0F , 0x00 , 0x40 , 0x01 , 0x1C , 0x84 , 0x01 , 0x18 , 0x01 , 0x00 , 0x40 , 0x44 , 0x02 , 0x00,
 0x00 , 0xC0 , 0x0F , 0x00 , 0x00 , 0x01 , 0x60 , 0x84 , 0x01 , 0x06 , 0x00 , 0xC0 , 0x20 , 0x84 , 0x02 , 0x00,
 0x00 , 0xC0 , 0x07 , 0x80 , 0x00 , 0x01 , 0x80 , 0x84 , 0x01 , 0x01 , 0x80 , 0x20 , 0x3F , 0x04 , 0x02 , 0x00,
 0x00 , 0x20 , 0x03 , 0xC0 , 0x10 , 0x07 , 0x00 , 0x84 , 0x01 , 0x00 , 0x70 , 0x10 , 0x20 , 0x08 , 0x02 , 0x00,
 0x01 , 0x40 , 0x06 , 0x00 , 0x04 , 0x1F , 0x00 , 0x84 , 0x01 , 0x00 , 0x0C , 0x08 , 0x20 , 0x10 , 0x02 , 0x00,
 0x00 , 0x90 , 0x00 , 0x08 , 0x00 , 0x7F , 0x00 , 0x84 , 0x01 , 0xC0 , 0x03 , 0x08 , 0x20 , 0xE0 , 0x02 , 0x00,
 0x00 , 0xC0 , 0x04 , 0x1C , 0x03 , 0xFF , 0x00 , 0x84 , 0x01 , 0x20 , 0x00 , 0xC4 , 0x23 , 0x00 , 0x02 , 0x00,
 0x00 , 0x68 , 0x02 , 0x1F , 0x0C , 0xFF , 0x00 , 0x84 , 0x01 , 0x08 , 0x00 , 0x34 , 0x38 , 0x1C , 0x02 , 0x00,
 0x00 , 0x70 , 0x01 , 0x3F , 0xB0 , 0x7F , 0x00 , 0x84 , 0x01 , 0x06 , 0x00 , 0x0C , 0x20 , 0x24 , 0x02 , 0x00,
 0x00 , 0x10 , 0x00 , 0x0F , 0xE0 , 0x7F , 0x00 , 0x84 , 0x01 , 0x01 , 0x00 , 0x07 , 0x40 , 0x44 , 0x02 , 0x00,
 0x00 , 0x28 , 0x00 , 0x07 , 0xF8 , 0x3F , 0x00 , 0x84 , 0x01 , 0x00 , 0x00 , 0x04 , 0xC0 , 0x44 , 0x02 , 0x00,
 0x00 , 0x03 , 0x00 , 0x0C , 0xF8 , 0x11 , 0x00 , 0x44 , 0x01 , 0xC0 , 0x80 , 0x08 , 0xB0 , 0x44 , 0x02 , 0x00,
 0x00 , 0x05 , 0x00 , 0x70 , 0x00 , 0x10 , 0x00 , 0x6C , 0x01 , 0x31 , 0x00 , 0x18 , 0x8C , 0x78 , 0x02 , 0x00,
 0x00 , 0x02 , 0x81 , 0x80 , 0x02 , 0x10 , 0x80 , 0x00 , 0x01 , 0x04 , 0x00 , 0x10 , 0x83 , 0x00 , 0x02 , 0x00,
 0x00 , 0x04 , 0x46 , 0x00 , 0x00 , 0x00 , 0x80 , 0x00 , 0x01 , 0x00 , 0x00 , 0x20 , 0x80 , 0xC4 , 0x02 , 0x00,
 0x00 , 0x01 , 0x58 , 0x00 , 0x00 , 0x48 , 0x40 , 0x04 , 0x01 , 0x00 , 0x00 , 0x80 , 0x40 , 0x3C , 0x02 , 0x00,
 0x00 , 0x00 , 0x68 , 0x00 , 0x00 , 0x18 , 0x30 , 0x2B , 0xFF , 0x80 , 0x07 , 0xFF , 0xF0 , 0x7F , 0xFF , 0x00,
 0x00 , 0x03 , 0xE6 , 0x00 , 0x00 , 0x00 , 0x0F , 0xC0 , 0x00 , 0x7F , 0xF0 , 0x00 , 0x07 , 0x83 , 0x00 , 0x00,
 0x00 , 0x0C , 0x15 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xC0 , 0x00,
 0x00 , 0x30 , 0x0D , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x30 , 0x00,
 0x00 , 0xC0 , 0x02 , 0x6A , 0x40 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0C , 0x00,
 0x03 , 0x00 , 0x00 , 0x32 , 0xC8 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x00,
 0x0C , 0x00 , 0x00 , 0x1A , 0xC8 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xC0,
 0x10 , 0x00 , 0x00 , 0x01 , 0x68 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x20,
 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
};
 byte i;
#INT_TIMER0
void timer0_isr(void)
{
   clear_interrupt(INT_TIMER0);
   set_timer0(61);
   i++;
   if(i > 9)
   {
      i = 0;
      output_toggle(PIN_B6);
   }
}
 void glcd_imagen()
{
   char i,j;
   signed char k;
   for( i = 0 ; i < 64 ; i ++ )
   {
      for( j = 0 ; j < 16 ; j ++)
      {   
         for(k=7;k>-1;k--)
         {     
            if( bit_test(imagen[i][j] ,7-k ))
               glcd_pixel( j*8+k,i, ON );
               
         }
      }
   }
}
 
void main () {
signed long x;
signed long y;
signed long d;
signed long d2;
signed long pause;
x=8;
y=57;
d=127;
d2=127;
pause = 1;

glcd_init(ON);     
glcd_imagen();
delay_ms(250);
glcd_fillScreen(0);


while(pause){

while (input_state(PIN_A5)==1){
if(d<=127)
{
glcd_line(d,40,d,63,0);
glcd_line(d-4,40,d-5,63,1);
d--;
}
if(d2<=127)
{
glcd_line(d2,20,d2,1,0);
glcd_line(d2-4,20,d2-5,1,1);
d2--;
}

if(y<=57 & input_state(PIN_A4)==0) 
{
  glcd_circle(x,y,5,0,1);       
  glcd_circle(x,y+1,5,0,0);     
  y--;                                 

}
if(y<57 && input_state(PIN_A4)==1)
{
  glcd_circle(x,y,5,0,1);         
  glcd_circle(x,y-1,5,0,0);       
  y++; 
}
}
}

}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:ayuda con mi proyecto en una glcd con PIC167877
« Respuesta #3 en: 08 de Enero de 2021, 11:49:20 »
Citar
ya logre que el pajaro(o circulo) se pueda mover junto a los obstaculos, lo que aun no me queda claro es como hacer la colicion con los obstáculos y que el programa me vaya mas rápido, avance en esto pero todavia me falta:

Creo que no entediste en parte lo que quise explicarte.

1-
Crear una funcion para dibujar el pajaro, esta funcione devuelve un booleano.
Esta funcion solo va a modificar el array de 128x64 bits, es decir de 16 x 8 bytes
Cuando intente modificar algun bit, y estos esten en 1, entonces significa que estan ocupados con obstaculos, por lo tanto vas a devolver un 1 en tu funcion del dibujo del pajarito, para indicar que hubo una colision.

2-
Que vaya mas rapido es un problema, solo podes hacer de varias formas..
- Mejorando las librerias (Creando tu funcion), para que puedas escribir todo continuo, y no bit a bit, sino enviar bytes y bytes. Donde seteas la direccion y tiras todos esos bytes del array al LCD, no hace falta rellenarlo con 0, ya que el array los va a sobreescribir.
- Tener mas velocidad en el micro. Lamentablemente hay ciertos tiempos a respetar, y estos los limitan el micro y el LCD. Pero si el micro es el que se queda detras entonces buscar otro micro.
- Descargar el micro del proceso de actualizar el LCD, usando DMA o alguno otro por el estilo (o si tiene un controlador de LCD mejor), de esa forma, mientras vos haces alguna que otra cosa, el DMA se encarga de actualizar, esto podría llevar a que uses 2 arrays para aprovecharlo al máximo.



 

anything