Placar Eletrônico com Display OLED, Arduino e Buzzer!

Imagem de apresentação do post sobre placar eletrônico
Font Size

Olá, caro(a) leitor(a)! Hoje vamos explorar um projeto muito divertido que envolve algumas funcionalidades de um display OLED, como a exibição de caracteres, imagens e animações. Trata-se de um placar eletrônico que contabiliza os pontos de dois jogadores e determina o vencedor, assim que ele alcance uma pontuação pré-definida. Além disso quando a partida chegar ao fim, o placar irá exibir uma animação e tocar uma música para o vencedor.

Pronto(a) para começar ?

     Imagem 1 – Foto do circuito

 

Imagem 2 – Esquemático do Circuito

 

Materiais Utilizados:

 

Agora vamos por partes…

Display OLED 128×64:

Para exibir os pontos, utilizamos um dos displays disponíveis aqui na loja, trata-se de uma pequena tela OLED de 128 por 64 pixels baseada no sistema de comunicação I2C, que permite a interação com o controlador utilizando apenas 2 pinos! O Serial Clock (SCL) e o Serial Data (SDA). Portanto iremos conectar esses pinos da seguinte forma:

Imagem 3 – Conexões do Display

 

As portas A4 e A5, por padrão, são responsáveis pela comunicação I2C no Arduino Nano, portanto, não é necessário declará-las no código. Porém, lembre-se que as portas específicas para SCL e SDA podem variar conforme o microcontrolador, então sempre verifique na internet se estiver usando outro modelo.

Mas como formar os números e desenhos no display ?

Com a ajuda das bibliotecas Adafruit GFX e Adafruit SSD1306, disponíveis no Arduino IDE, é possível exibir textos e formas geométricas pré-definidas, como retângulos, círculos e retas, de maneira simples. Também podemos exibir imagens usando bitmaps, que são matrizes descrevendo cada um dos pixels. Neste projeto, utilizamos a exibição de texto para mostrar as pontuações, e a de imagens, para apresentar uma animação simples.

 

Imagem 4 – Conexões do Buzzer

 

Conecte o lado positivo do Buzzer Passivo (marcado com um símbolo de +) à porta D4 do Arduino e o outro lado ao GND. As ligações são simples.. Inserir um resistor ou potenciômetro pode reduzir o volume e ajudar a preservar o Buzzer, mas, no nosso caso, isso não é necessário.

Botões

Os botões irão servir para acrescentar pontos às equipes, e também para reiniciar o jogo quando ele chegar ao fim. Conforme o Esquemático do Circuito (Imagem 3), você deve ligar cada um dos botões a uma porta digital do Arduino e ao GND. O botão conectado ao pino D8 corresponde ao Player 1, número à esquerda no placar, já o outro botão, ligado ao pino D7, corresponde ao Player 2. Ao fim do jogo, após o término da música, basta pressionar qualquer um dos botões para zerar as pontuações e reiniciar tudo!

Declaramos as portas D7 e D8 como Input Pull-up, opção que verifica se há conexão entre a porta e o GND. Portanto, quando alguém pressiona o botão, a conexão é estabelecida e o pino retorna um sinal digital LOW. Ao declarar o pino dessa forma, habilitamos o Resistor Pull-up interno do Arduino; portanto, não é necessário adicionar resistores diretamente aos botões (apesar de termos utilizado na nossa montagem).

Quando o sistema detectar que algum dos botões foi pressionado, ele acrescentará 1 ponto no placar, para o jogador correspondente.

Já conectou tudo ?

Agora utilize o Arduino IDE para fazer o upload do seguinte código no Arduino.


#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

//Define a pontuação necessária para uma das equipes vencer
int valorpravencer = 3;

// Inicia placar
int placarplayer1 = 0;
int placarplayer2 = 0;

//Definindo e iniciando o Display OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

//Definindo o Buzzer
int buzzerPin = 4; // Pino digital conectado ao buzzer
bool musicatocou = false;

//Função para tocar nota definida
void tocarNota(int frequencia, int duracao) {
  tone(buzzerPin, frequencia); // Toca a nota com a frequência especificada
  delay(duracao);              // Duração da nota
}

//BITMAPS
// '0'
const unsigned char epd_bitmap_0 [] PROGMEM = {
    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, 
    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, 
    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, 
    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, 
    0x00, 0x0f, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x01, 0x86, 0x0d, 0xc0, 0x00, 0x00, 0x00, 
    0x00, 0x0f, 0xe3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x81, 0x87, 0x1d, 0xc0, 0x00, 0x00, 0x00, 
    0x00, 0x0f, 0xf3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x81, 0x8f, 0x1c, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x0e, 0x73, 0x8f, 0x9c, 0x31, 0xe1, 0xb8, 0x01, 0xc1, 0xcf, 0x19, 0xcd, 0xe1, 0xf0, 0x00, 
    0x00, 0x0e, 0x73, 0x9f, 0xcc, 0x73, 0xf1, 0xf8, 0x01, 0xc1, 0xcf, 0x99, 0xcf, 0xf3, 0xf0, 0x00, 
    0x00, 0x0e, 0x73, 0x81, 0xce, 0x77, 0x39, 0xe0, 0x03, 0x80, 0xcd, 0xb9, 0xce, 0x73, 0x80, 0x00, 
    0x00, 0x0f, 0xe3, 0x83, 0xce, 0x67, 0x39, 0xc0, 0x03, 0x00, 0xdd, 0xb9, 0xce, 0x33, 0xc0, 0x00, 
    0x00, 0x0f, 0xc3, 0x9f, 0xc6, 0xe7, 0xf9, 0xc0, 0x07, 0x00, 0xf9, 0xb1, 0xce, 0x31, 0xf0, 0x00, 
    0x00, 0x0e, 0x03, 0xb8, 0xc7, 0xe7, 0x01, 0xc0, 0x0c, 0x00, 0xf9, 0xf1, 0xce, 0x30, 0x78, 0x00, 
    0x00, 0x0e, 0x03, 0xb9, 0xc3, 0xc7, 0x01, 0xc0, 0x18, 0x00, 0x78, 0xf1, 0xce, 0x30, 0x38, 0x00, 
    0x00, 0x0e, 0x03, 0xbf, 0xc3, 0xc3, 0xf9, 0xc0, 0x3f, 0xc0, 0x78, 0xf1, 0xce, 0x33, 0xf8, 0x00, 
    0x00, 0x0e, 0x03, 0x9e, 0xc3, 0x81, 0xf9, 0xc0, 0x3f, 0xc0, 0x70, 0xe1, 0xce, 0x33, 0xf0, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x0e, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 
    0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
    0x00, 0x00, 0x80, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 
    0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 
    0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x64, 0x00, 0x10, 0x00, 
    0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 0x3f, 0xe0, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 
    0x00, 0x88, 0x00, 0x20, 0x00, 0x00, 0x3f, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 
    0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x61, 0x03, 0xc0, 0x86, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xff, 0xff, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 
    0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x80, 0xff, 0xfe, 0x01, 0x80, 0x00, 0x10, 0x00, 0x11, 0x00, 
    0x00, 0x44, 0x00, 0x00, 0x00, 0x01, 0x07, 0xfc, 0x3f, 0xe1, 0x80, 0x00, 0x00, 0x02, 0x00, 0x00, 
    0x00, 0x20, 0x04, 0x02, 0x00, 0x01, 0x1c, 0x00, 0x00, 0x38, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x30, 0x00, 0x00, 0x0c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x30, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x10, 0x00, 0x20, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x20, 0x10, 0x08, 0x0c, 0xf0, 0x00, 0x00, 0x08, 0x30, 0x00, 
    0x00, 0x00, 0x20, 0x40, 0x40, 0x1b, 0x20, 0x38, 0x1c, 0x04, 0x90, 0x00, 0x00, 0x08, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x40, 0x00, 0x1b, 0x20, 0x38, 0x1c, 0x04, 0x90, 0x00, 0x10, 0x00, 0x00, 0x00, 
    0x00, 0x20, 0x00, 0x00, 0x06, 0x1b, 0x20, 0x00, 0x00, 0x04, 0x90, 0x40, 0x10, 0x00, 0x00, 0x00, 
    0x00, 0x20, 0x00, 0x00, 0x0f, 0x1b, 0x20, 0x00, 0x00, 0x04, 0x90, 0xf0, 0x20, 0x00, 0x00, 0x00, 
    0x00, 0x40, 0x00, 0x00, 0x3b, 0x1b, 0x61, 0x00, 0x00, 0x84, 0x91, 0x9c, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x80, 0x00, 0x00, 0x7f, 0xb9, 0x21, 0xc0, 0x01, 0x84, 0x9d, 0x7c, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x20, 0xf8, 0x1f, 0x05, 0xbf, 0xf6, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x7f, 0xef, 0xa0, 0x3f, 0xfe, 0x05, 0xb7, 0xde, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0xf6, 0x3f, 0xb0, 0x07, 0xf0, 0x0d, 0xec, 0x7f, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0xbc, 0x1c, 0x98, 0x00, 0x00, 0x19, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0xe8, 0x3c, 0x8e, 0x00, 0x00, 0x73, 0x3c, 0x37, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x78, 0x67, 0xc3, 0xe0, 0x07, 0xc3, 0xc6, 0x1e, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0xe0, 0xff, 0xff, 0x07, 0x82, 0x38, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x0e, 0xc0, 0x7c, 0x03, 0xc0, 0x3e, 0x02, 0x60, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x6f, 0xc0, 0x03, 0xf6, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x69, 0xff, 0xff, 0x92, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00
};
// '1'
const unsigned char epd_bitmap_1 [] PROGMEM = {
    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, 
    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, 
    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, 
    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, 
    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, 
    0x00, 0x0f, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x01, 0x86, 0x0d, 0xc0, 0x00, 0x00, 0x00, 
    0x00, 0x0f, 0xe3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x81, 0x87, 0x1d, 0xc0, 0x00, 0x00, 0x00, 
    0x00, 0x0f, 0xf3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x81, 0x8f, 0x1c, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x0e, 0x73, 0x8f, 0x9c, 0x31, 0xe1, 0xb8, 0x01, 0xc1, 0xcf, 0x19, 0xcd, 0xe1, 0xf0, 0x00, 
    0x00, 0x0e, 0x73, 0x9f, 0xcc, 0x73, 0xf1, 0xf8, 0x01, 0xc1, 0xcf, 0x99, 0xcf, 0xf3, 0xf0, 0x00, 
    0x00, 0x0e, 0x73, 0x81, 0xce, 0x77, 0x39, 0xe0, 0x03, 0x80, 0xcd, 0xb9, 0xce, 0x73, 0x80, 0x00, 
    0x00, 0x0f, 0xe3, 0x83, 0xce, 0x67, 0x39, 0xc0, 0x03, 0x00, 0xdd, 0xb9, 0xce, 0x33, 0xc0, 0x00, 
    0x00, 0x0f, 0xc3, 0x9f, 0xc6, 0xe7, 0xf9, 0xc0, 0x07, 0x00, 0xf9, 0xb1, 0xce, 0x31, 0xf0, 0x00, 
    0x00, 0x0e, 0x03, 0xb8, 0xc7, 0xe7, 0x01, 0xc0, 0x0c, 0x00, 0xf9, 0xf1, 0xce, 0x30, 0x78, 0x00, 
    0x00, 0x0e, 0x03, 0xb9, 0xc3, 0xc7, 0x01, 0xc0, 0x18, 0x00, 0x78, 0xf1, 0xce, 0x30, 0x38, 0x00, 
    0x00, 0x0e, 0x03, 0xbf, 0xc3, 0xc3, 0xf9, 0xc0, 0x3f, 0xc0, 0x78, 0xf1, 0xce, 0x33, 0xf8, 0x00, 
    0x00, 0x0e, 0x03, 0x9e, 0xc3, 0x81, 0xf9, 0xc0, 0x3f, 0xc0, 0x70, 0xe1, 0xce, 0x33, 0xf0, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x0e, 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, 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, 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, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x03, 0xc0, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xff, 0xff, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0xff, 0xfe, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0xfc, 0x3f, 0xe1, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1c, 0x00, 0x00, 0x38, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x30, 0x00, 0x00, 0x0c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x30, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x20, 0x10, 0x08, 0x0c, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x20, 0x38, 0x1c, 0x04, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x20, 0x38, 0x1c, 0x04, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x06, 0x1b, 0x20, 0x00, 0x00, 0x04, 0x90, 0x40, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x0f, 0x1b, 0x20, 0x00, 0x00, 0x04, 0x90, 0xf0, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x3b, 0x1b, 0x61, 0x00, 0x00, 0x84, 0x91, 0x9c, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x7f, 0xb9, 0x21, 0xc0, 0x01, 0x84, 0x9d, 0x7c, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x20, 0xf8, 0x1f, 0x05, 0xbf, 0xf6, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x7f, 0xef, 0xa0, 0x3f, 0xfe, 0x05, 0xb7, 0xde, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0xf6, 0x3f, 0xb0, 0x07, 0xf0, 0x0d, 0xec, 0x7f, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0xbc, 0x1c, 0x98, 0x00, 0x00, 0x19, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0xe8, 0x3c, 0x8e, 0x00, 0x00, 0x73, 0x3c, 0x37, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x78, 0x67, 0xc3, 0xe0, 0x07, 0xc3, 0xc6, 0x1e, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0xe0, 0xff, 0xff, 0x07, 0x82, 0x38, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x0e, 0xc0, 0x7c, 0x03, 0xc0, 0x3e, 0x02, 0x60, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x6f, 0xc0, 0x03, 0xf6, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x69, 0xff, 0xff, 0x92, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00
};
// '2'
const unsigned char epd_bitmap_2 [] PROGMEM = {
    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, 
    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, 
    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, 
    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, 
    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, 
    0x00, 0x0f, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x86, 0x0d, 0xc0, 0x00, 0x00, 0x00, 
    0x00, 0x0f, 0xe3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0x01, 0x87, 0x1d, 0xc0, 0x00, 0x00, 0x00, 
    0x00, 0x0f, 0xf3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x01, 0x8f, 0x1c, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x0e, 0x73, 0x8f, 0x9c, 0x31, 0xe1, 0xb8, 0x3f, 0x01, 0xcf, 0x19, 0xcd, 0xe1, 0xf0, 0x00, 
    0x00, 0x0e, 0x73, 0x9f, 0xcc, 0x73, 0xf1, 0xf8, 0x17, 0x01, 0xcf, 0x99, 0xcf, 0xf3, 0xf0, 0x00, 
    0x00, 0x0e, 0x73, 0x81, 0xce, 0x77, 0x39, 0xe0, 0x07, 0x00, 0xcd, 0xb9, 0xce, 0x73, 0x80, 0x00, 
    0x00, 0x0f, 0xe3, 0x83, 0xce, 0x67, 0x39, 0xc0, 0x07, 0x00, 0xdd, 0xb9, 0xce, 0x33, 0xc0, 0x00, 
    0x00, 0x0f, 0xc3, 0x9f, 0xc6, 0xe7, 0xf9, 0xc0, 0x07, 0x00, 0xf9, 0xb1, 0xce, 0x31, 0xf0, 0x00, 
    0x00, 0x0e, 0x03, 0xb8, 0xc7, 0xe7, 0x01, 0xc0, 0x07, 0x00, 0xf9, 0xf1, 0xce, 0x30, 0x78, 0x00, 
    0x00, 0x0e, 0x03, 0xb9, 0xc3, 0xc7, 0x01, 0xc0, 0x07, 0x00, 0x78, 0xf1, 0xce, 0x30, 0x38, 0x00, 
    0x00, 0x0e, 0x03, 0xbf, 0xc3, 0xc3, 0xf9, 0xc0, 0x07, 0x00, 0x78, 0xf1, 0xce, 0x33, 0xf8, 0x00, 
    0x00, 0x0e, 0x03, 0x9e, 0xc3, 0x81, 0xf9, 0xc0, 0x07, 0x00, 0x70, 0xe1, 0xce, 0x33, 0xf0, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x0e, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 
    0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
    0x00, 0x00, 0x80, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 
    0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 
    0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x64, 0x00, 0x10, 0x00, 
    0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 0x3f, 0xe0, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 
    0x00, 0x88, 0x00, 0x20, 0x00, 0x00, 0x3f, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 
    0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x61, 0x03, 0xc0, 0x86, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xff, 0xff, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 
    0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x80, 0xff, 0xfe, 0x01, 0x80, 0x00, 0x10, 0x00, 0x11, 0x00, 
    0x00, 0x44, 0x00, 0x00, 0x00, 0x01, 0x07, 0xfc, 0x3f, 0xe1, 0x80, 0x00, 0x00, 0x02, 0x00, 0x00, 
    0x00, 0x20, 0x04, 0x02, 0x00, 0x01, 0x1c, 0x00, 0x00, 0x38, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x30, 0x00, 0x00, 0x0c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x30, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x10, 0x00, 0x20, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x20, 0x10, 0x08, 0x0c, 0xf0, 0x00, 0x00, 0x08, 0x30, 0x00, 
    0x00, 0x00, 0x20, 0x40, 0x40, 0x1b, 0x20, 0x38, 0x1c, 0x04, 0x90, 0x00, 0x00, 0x08, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x40, 0x00, 0x1b, 0x20, 0x38, 0x1c, 0x04, 0x90, 0x00, 0x10, 0x00, 0x00, 0x00, 
    0x00, 0x20, 0x00, 0x00, 0x06, 0x1b, 0x20, 0x00, 0x00, 0x04, 0x90, 0x40, 0x10, 0x00, 0x00, 0x00, 
    0x00, 0x20, 0x00, 0x00, 0x0f, 0x1b, 0x20, 0x00, 0x00, 0x04, 0x90, 0xf0, 0x20, 0x00, 0x00, 0x00, 
    0x00, 0x40, 0x00, 0x00, 0x3b, 0x1b, 0x61, 0x00, 0x00, 0x84, 0x91, 0x9c, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x80, 0x00, 0x00, 0x7f, 0xb9, 0x21, 0xc0, 0x01, 0x84, 0x9d, 0x7c, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x20, 0xf8, 0x1f, 0x05, 0xbf, 0xf6, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x7f, 0xef, 0xa0, 0x3f, 0xfe, 0x05, 0xb7, 0xde, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0xf6, 0x3f, 0xb0, 0x07, 0xf0, 0x0d, 0xec, 0x7f, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0xbc, 0x1c, 0x98, 0x00, 0x00, 0x19, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0xe8, 0x3c, 0x8e, 0x00, 0x00, 0x73, 0x3c, 0x37, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x78, 0x67, 0xc3, 0xe0, 0x07, 0xc3, 0xc6, 0x1e, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0xe0, 0xff, 0xff, 0x07, 0x82, 0x38, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x0e, 0xc0, 0x7c, 0x03, 0xc0, 0x3e, 0x02, 0x60, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x6f, 0xc0, 0x03, 0xf6, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x69, 0xff, 0xff, 0x92, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00
};
// '3'
const unsigned char epd_bitmap_3 [] PROGMEM = {
    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, 
    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, 
    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, 
    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, 
    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, 
    0x00, 0x0f, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x86, 0x0d, 0xc0, 0x00, 0x00, 0x00, 
    0x00, 0x0f, 0xe3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0x01, 0x87, 0x1d, 0xc0, 0x00, 0x00, 0x00, 
    0x00, 0x0f, 0xf3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x01, 0x8f, 0x1c, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x0e, 0x73, 0x8f, 0x9c, 0x31, 0xe1, 0xb8, 0x3f, 0x01, 0xcf, 0x19, 0xcd, 0xe1, 0xf0, 0x00, 
    0x00, 0x0e, 0x73, 0x9f, 0xcc, 0x73, 0xf1, 0xf8, 0x17, 0x01, 0xcf, 0x99, 0xcf, 0xf3, 0xf0, 0x00, 
    0x00, 0x0e, 0x73, 0x81, 0xce, 0x77, 0x39, 0xe0, 0x07, 0x00, 0xcd, 0xb9, 0xce, 0x73, 0x80, 0x00, 
    0x00, 0x0f, 0xe3, 0x83, 0xce, 0x67, 0x39, 0xc0, 0x07, 0x00, 0xdd, 0xb9, 0xce, 0x33, 0xc0, 0x00, 
    0x00, 0x0f, 0xc3, 0x9f, 0xc6, 0xe7, 0xf9, 0xc0, 0x07, 0x00, 0xf9, 0xb1, 0xce, 0x31, 0xf0, 0x00, 
    0x00, 0x0e, 0x03, 0xb8, 0xc7, 0xe7, 0x01, 0xc0, 0x07, 0x00, 0xf9, 0xf1, 0xce, 0x30, 0x78, 0x00, 
    0x00, 0x0e, 0x03, 0xb9, 0xc3, 0xc7, 0x01, 0xc0, 0x07, 0x00, 0x78, 0xf1, 0xce, 0x30, 0x38, 0x00, 
    0x00, 0x0e, 0x03, 0xbf, 0xc3, 0xc3, 0xf9, 0xc0, 0x07, 0x00, 0x78, 0xf1, 0xce, 0x33, 0xf8, 0x00, 
    0x00, 0x0e, 0x03, 0x9e, 0xc3, 0x81, 0xf9, 0xc0, 0x07, 0x00, 0x70, 0xe1, 0xce, 0x33, 0xf0, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x0e, 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, 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, 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, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x03, 0xc0, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xff, 0xff, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0xff, 0xfe, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0xfc, 0x3f, 0xe1, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1c, 0x00, 0x00, 0x38, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x30, 0x00, 0x00, 0x0c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x30, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x20, 0x10, 0x08, 0x0c, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x20, 0x38, 0x1c, 0x04, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x20, 0x38, 0x1c, 0x04, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x06, 0x1b, 0x20, 0x00, 0x00, 0x04, 0x90, 0x40, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x0f, 0x1b, 0x20, 0x00, 0x00, 0x04, 0x90, 0xf0, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x3b, 0x1b, 0x61, 0x00, 0x00, 0x84, 0x91, 0x9c, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x7f, 0xb9, 0x21, 0xc0, 0x01, 0x84, 0x9d, 0x7c, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x20, 0xf8, 0x1f, 0x05, 0xbf, 0xf6, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x7f, 0xef, 0xa0, 0x3f, 0xfe, 0x05, 0xb7, 0xde, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0xf6, 0x3f, 0xb0, 0x07, 0xf0, 0x0d, 0xec, 0x7f, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0xbc, 0x1c, 0x98, 0x00, 0x00, 0x19, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0xe8, 0x3c, 0x8e, 0x00, 0x00, 0x73, 0x3c, 0x37, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x78, 0x67, 0xc3, 0xe0, 0x07, 0xc3, 0xc6, 0x1e, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0xe0, 0xff, 0xff, 0x07, 0x82, 0x38, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x0e, 0xc0, 0x7c, 0x03, 0xc0, 0x3e, 0x02, 0x60, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x6f, 0xc0, 0x03, 0xf6, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x69, 0xff, 0xff, 0x92, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00
};

//Lista dos bitmaps para facilitar sua exibição
const int epd_bitmap_allArray_LEN = 4;
const unsigned char* epd_bitmap_allArray[4] = {
    epd_bitmap_0,
    epd_bitmap_1,
    epd_bitmap_2,
    epd_bitmap_3
};
// Função para mostrar as imagens
void drawBitmap(int index) {
  display.clearDisplay(); // Limpa o buffer do display
  display.drawBitmap(0, 0, epd_bitmap_allArray[index], SCREEN_WIDTH, SCREEN_HEIGHT, WHITE); // Desenha o bitmap
  display.display(); // Atualiza a tela
}

// Define os pinos dos botões
int botaoplayer2 = 7;   // Botão para incrementar o placar do jogador 2
int botaoplayer1 = 8; // Botão para incrementar o placar do jogador 1

// Função para mostrar o placar
void showTextAnimation() {
  display.clearDisplay();
  display.setTextSize(7); // Ajuste o tamanho da fonte conforme necessário
  display.setTextColor(SSD1306_WHITE); // Cor do texto

  String texto = String(placarplayer1) + "x" + String(placarplayer2);
 
  // Ajuste da posição vertical para centralizar corretamente
  int y = 10; // POSIÇÃO DO EIXO EM Y
  int x = 0; //POSIÇÃO DO EIXO EM X
  
  display.clearDisplay();
  display.setCursor(x, y); // Mantém a posição vertical fixa
  display.println(texto);
  display.display();  
  delay(200); // Ajuste o atraso para controlar a velocidade da animação
}

// Variáveis para controlar o estado do jogo
bool jogoAtivo = true;  // Indica se o jogo está ativo ou não
bool player2Venceu = false;
bool player1Venceu = false;

// Função para reiniciar o jogo
void reiniciarJogo() {
  placarplayer1 = 0;
  placarplayer2 = 0;
  player2Venceu = false;
  player1Venceu = false;
  musicatocou = false;
  jogoAtivo = true;

}

void setup() {
  // Inicia a comunicação serial
  Serial.begin(9600);
  
  // Inicia o display com a alimentação correta.
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {  // Endereço I2C 0x3C
    Serial.println(F("SSD1306 allocation failed"));
    for (;;); // Não continua se falhar a alocação
  }
  display.clearDisplay(); // Limpa o buffer do display

  // Configura os pinos dos botões como entradas
  pinMode(botaoplayer2, INPUT_PULLUP);
  pinMode(botaoplayer1, INPUT_PULLUP);
}

void loop() {
  if (jogoAtivo) {
    // Verifica se o botão 2 foi pressionado
    if (digitalRead(botaoplayer2) == LOW) {
      delay(200);  // Debounce simples
      if (placarplayer1 < valorpravencer) {
        placarplayer1++;  // Incrementa o placar do player 1
      }
    }

    // Verifica se o botão 1 foi pressionado
    if (digitalRead(botaoplayer1) == LOW) {
      delay(200);  // Debounce simples
      if (placarplayer2 < valorpravencer) {
        placarplayer2++;  // Incrementa o placar do player 2
      }
    }

    // Verifica se algum dos players chegou ao valor para vencer
    if (placarplayer1 == valorpravencer) {
      player2Venceu = true;
      player1Venceu = false;
      jogoAtivo = false;
      musicatocou = true;
    }

    if (placarplayer2 == valorpravencer) {
      player1Venceu = true;
      player2Venceu = false;
      jogoAtivo = false;
      musicatocou = true;
    }

  } else {
    // Se o jogo não está ativo mostra a animação do vencedor
    if (player2Venceu) {
      if(musicatocou == true){
        drawBitmap(3);
        tocarNota(196, 150);
        tocarNota(262, 150);
        drawBitmap(2);
        tocarNota(330, 150);
        tocarNota(392, 150);
        drawBitmap(3);
        tocarNota(524, 150);
        tocarNota(659, 150);
        drawBitmap(2);
        tocarNota(784, 450);
        drawBitmap(3);
        tocarNota(659, 450);
        drawBitmap(2);
        tocarNota(208, 150);
        tocarNota(262, 150);
        drawBitmap(3); 
        tocarNota(311, 150); 
        tocarNota(416, 150);
        drawBitmap(2); 
        tocarNota(524, 150);
        tocarNota(622, 150);
        drawBitmap(3);
        tocarNota(830, 450);
        drawBitmap(2);
        tocarNota(622, 450);
        drawBitmap(3);
        tocarNota(233, 150);
        tocarNota(294, 150);
        drawBitmap(2);
        tocarNota(349, 150);
        tocarNota(466, 150);
        drawBitmap(3);
        tocarNota(587, 150);
        tocarNota(698, 150);
        drawBitmap(2);
        tocarNota(932, 450);
        drawBitmap(3);
        tocarNota(932, 150);
        tocarNota(932, 150);
        drawBitmap(2);
        tocarNota(932, 150);
        drawBitmap(3);
        tocarNota(1046, 900);
        noTone(buzzerPin);
        musicatocou = false;
      }
      else {
        drawBitmap(3);
        delay(300);
        drawBitmap(2);
        delay(300);
      }


    }

    if (player1Venceu) { 
  if(musicatocou == true){
    drawBitmap(1);
    tocarNota(196, 150);
    tocarNota(262, 150);
    drawBitmap(0);
    tocarNota(330, 150);
    tocarNota(392, 150);
    drawBitmap(1);
    tocarNota(524, 150);
    tocarNota(659, 150);
    drawBitmap(0);
    tocarNota(784, 450);
    drawBitmap(1);
    tocarNota(659, 450);
    drawBitmap(0);
    tocarNota(208, 150);
    tocarNota(262, 150);
    drawBitmap(1); 
    tocarNota(311, 150); 
    tocarNota(416, 150);
    drawBitmap(0); 
    tocarNota(524, 150);
    tocarNota(622, 150);
    drawBitmap(1);
    tocarNota(830, 450);
    drawBitmap(0);
    tocarNota(622, 450);
    drawBitmap(1);
    tocarNota(233, 150);
    tocarNota(294, 150);
    drawBitmap(0);
    tocarNota(349, 150);
    tocarNota(466, 150);
    drawBitmap(1);
    tocarNota(587, 150);
    tocarNota(698, 150);
    drawBitmap(0);
    tocarNota(932, 450);
    drawBitmap(1);
    tocarNota(932, 150);
    tocarNota(932, 150);
    drawBitmap(0);
    tocarNota(932, 150);
    drawBitmap(1);
    tocarNota(1046, 900);
    noTone(buzzerPin);
    musicatocou = false;
  }
  else {
    drawBitmap(1);
    delay(300);
    drawBitmap(0);
    delay(300);
  }
}

    // Verificar se qualquer botão foi pressionado para reiniciar o jogo
    if (digitalRead(botaoplayer2) == LOW || digitalRead(botaoplayer1) == LOW) {
      delay(200);  // Debounce simples
      reiniciarJogo();  // Reinicia o jogo
    }
  }
  
  showTextAnimation();
  
  // Imprime o placar no monitor serial a cada loop
  Serial.print("Player 1");
  Serial.print(placarplayer1);
  Serial.print(" | Player 2: ");
  Serial.println(placarplayer2);

  delay(500);  // Espera de meio segundo antes de repetir o loop
}

 

Após o upload do código, o sistema já estará funcionando da forma planejada, assim como no vídeo abaixo. Logo em sequência iremos detalhar um pouco do funcionamento e especificações, pra que você possa entender melhor e alterar parâmetros livremente.

 

Configuração do jogo

Você pode personalizar várias características do funcionamento do placar, e algumas delas são:

Número de pontos até a vitória

Logo no início do código, a variável ‘valorpravencer’ define a pontuação que um dos times deve alcançar para finalizar o jogo. Por padrão, ela está definida como 3.

Animação

Você também pode modificar a animação de vitória, inserindo as suas próprias imagens. No site Image2cpp  você pode inserir imagens e obter seus bitmaps, além disso, controlar um pouco de como sua imagem será representada, como no campo “Brightness”, responsável por decidir o limiar de binarização. Realize esse ajuste até a imagem ficar o mais visível possível.

 

 

Imagem 5 – Alterando o Limiar

 

Após  inserir e tratar suas imagens, você pode gerar o bitmap no final da página, copiar tudo e colar no código, fazendo as devidas alterações.

Atenção!

a imagem precisa estar no formato do display para ocupar o tamanho correto na tela, use editores de imagem para deixar as suas com o formato 128×64 pixels.

 

Música tocada

Com o Buzzer Passivo e a função ‘tocarNota();’, você pode modificar a música da forma que preferir, pois basta alterar os dois parâmetros da função, o primeiro é a frequência desejada, em Hertz, e o segundo, trata da duração da nota. Nós intercalamos as notas com as imagens da animação para que elas sejam exibidas simultaneamente.


	

Posts relacionados

Utilizando Sensor de Pulsos com Arduino

por Danilo Nogueira
5 anos ago

Aprenda a utilizar o módulo GPS com Arduino

por autocore
7 anos ago

Como modificar servos motores: Duas Super Modificações

por Davi Colares
4 anos ago
Sair da versão mobile