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:
// Imagem da tela
static byte tela [LCD_DX][LCD_DY/8];

// Altera um ponto da tela
void LcdSetPixel (int x, int y, int valor)
{
  int by = y >> 3;
  y = y & 7;
  if (valor)
    tela [x][by] |= 1 << y;
  else
    tela [x][by] &= ~(1 << y);
  LcdWrite( LCD_CMD, 0x40 + by);  
  LcdWrite( LCD_CMD, 0x80 + x);
  LcdWrite(LCD_DAT, tela[x][by]);
}

// Informa valor de ponto da tela
int LcdGetPixel (int x, int y)
{
  int by = y >> 3;
  y = y & 7;
  return tela[x][by] & (1 << y);
}
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: