terça-feira, janeiro 31, 2012

Display Gráfico Nokia 5110 - Parte 6

Para encerrarmos o uso do display Nolia 5110 com o Arduino, vamos ver um pequeno exemplo de como manter uma imagem da tela na memória do Arduino, construindo uma versão altamente simplificada do jogo Breakout.


O circuito é o mesmo das partes anteriores, acrescidos de dois botões ligados entre as porta digitais 10 e 11 e terra. Os pullups internos do ATmega são usados para a entrada ser lida como "1" quando os botões estiverem soltos.

Na parte que nos interessa, temos uma matriz de 84x6 bytes que armazena a imagem da tela. Para não complicar muito, o jogo foi todo feito usando duas rotinas, LcdSetPixel  e LcdGetPixel:
  1. // Imagem da tela  
  2. static byte tela [LCD_DX][LCD_DY/8];  
  3.   
  4. // Altera um ponto da tela  
  5. void LcdSetPixel (int x, int y, int valor)  
  6. {  
  7.   int by = y >> 3;  
  8.   y = y & 7;  
  9.   if (valor)  
  10.     tela [x][by] |= 1 << y;  
  11.   else  
  12.     tela [x][by] &= ~(1 << y);  
  13.   LcdWrite( LCD_CMD, 0x40 + by);    
  14.   LcdWrite( LCD_CMD, 0x80 + x);  
  15.   LcdWrite(LCD_DAT, tela[x][by]);  
  16. }  
  17.   
  18. // Informa valor de ponto da tela  
  19. int LcdGetPixel (int x, int y)  
  20. {  
  21.   int by = y >> 3;  
  22.   y = y & 7;  
  23.   return tela[x][by] & (1 << y);  
  24. }  
Não vou entrar aqui no detalhe da lógica do jogo em si, o código completo está nos arquivos do blog, no arquivo breakout.zip.

O vídeo abaixo mostra o jogo em uso:



Nenhum comentário: