Display gráfico 128×64

Neste tutorial você aprenderá a controlar o display gráfico 128×64 pixels em seus projetos. Aqui, abordaremos o uso das principais funções do display, como a inserção de caracteres especiais e de elementos como círculos, quadrados, box de texto e, além disso, você verá também o esquema de ligação utilizando o Arduino Mega.

Display gráfico 128x64
Display gráfico 128×64

[toc]

kit robotica educacional com Arduino ESP ou Microbit

Contexto histórico

O display gráfico é largamente utilizado em celulares, painéis e interfaces IHM (interface homem máquina). Uma das grandes vantagens de sua utilização é o fato de funcionarem por pixels ao invés de caracteres definidos possibilitando a exibição de qualquer tipo de caractere, tamanho ou fonte. O display que iremos utilizar possui escrita branca, sendo composto por 128×64 pixels, ou seja, 128 pixels de comprimento e 64 pixels de largura.

display gráfico de 128x64 pixels
Figura 1 – Display gráfico de 128×64 pixels

Funcionamento do Display Gráfico 128×64

Este display possui a pinagem conforme a figura abaixo, tendo 8 portas de dados e 6 para controle, além da entrada de alimentação dos display assim como o controle de backlight (iluminação de fundo).

 

Pinagem do display gráfico 128x64
Figura 2 – Pinagem do display gráfico

A tabela abaixo representa a função de cada pino do display com maiores detalhes.

Pinagem do display gráfico 128x64 e suas respectivas funções
Tabela 1 – Pinagem do display e suas respectivas funções

Aplicações do Display Gráfico 128×64

O display gráfico pode ser utilizado em qualquer projeto que se deseja exibir uma informação ao usuário. Alguns exemplos de aplicação:

  •  IHM;
  • Osciloscópio;
  • Medidor de energia elétrica;
  • Jogos;
  • Plotagem de funções;

Na área automobilística em projetos de veículos Baja, grande parte dos painéis são construídos com este tipo de display, a fim de exibir velocidade, rotação, nível de combustível e bateria, isso é possível devido sua ampla área de trabalho em relação à outros displays comerciais e também por sua robustez.


Mãos à obra- Conexão do Display Gráfico 128×64 com o Arduino

 Componentes Necessários

Montando o Projeto

Agora chegou a hora de colocar a mão na massa, vamos​ conectar os componentes do projeto na protoboard.​ Antes disso, desligue o cabo USB de seu Arduino e posteriormente monte seu circuito conforme a figura a seguir.

Diagrama do circuito em protoboard com o display 128x64
Figura 3 – Diagrama do circuito em protoboard.

Há duas observações que devemos ficar atentos. Uma delas está relacionada com a alimentação do display, de modo que, este deve ser ser alimentado com uma tensão de 5 Vdc. Outro ponto de atenção é que ao se utilizar o backlight (iluminação de fundo) haverá um consumo maior de corrente. Portanto, dependendo do consumo dos outros componentes do seu projeto, o Arduino não suportará e por proteção irá resetar constantemente. Nesse caso, é indicado que se utilize uma fonte externa ao invés da USB do Computador.

Conectando ao computador

Para iniciar o projeto, primeiramente conecte o Arduino ao computador por meio do cabo USB. Posteriormente, abra a IDE do Arduino e comece a programar.

Programando

Agora que toda a parte de hardware da aplicação está montada, vamos ao software responsável por controlar o display e exibir textos e formas nesse. Segue abaixo o código comentado que exemplifica o funcionamento do display gráfico 128×64.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// Biblioteca utilizada no Projeto
#include "U8glib.h"
//Configuração de Pinagem, Enable, RW, RS, RESET
U8GLIB_ST7920_128X64_1X Display(8, 7, 6 , 9);
// Rotina de Configuração da Escrita no Display
void Display_config() {
Display.setFont(u8g_font_6x10);
Display.setFontRefHeightExtendedText();
Display.setDefaultForegroundColor();
Display.setFontPosTop();
}
void Tela1() {
Display.setFont(u8g_font_unifont);
Display.drawStr(45, 15, "Vida");
Display.drawStr(53, 40, "de");
Display.drawStr(35, 60, "Silicio");
}
void Tela2() {
Display.setFont(u8g_font_unifont);
Display.drawBox(0, 0, 128, 64);
Display.setColorIndex(0);
Display.drawStr(4, 35, "Vida de Silicio");
Display.drawStr(5, 35, "Vida de Silicio");
Display.drawFrame(1, 1, 126, 62);
}
void Tela3() {
Display.setFont(u8g_font_helvB08);
Display.drawStr(45, 31, "Arduino");
Display.drawStr90(105, 15, "Display");
Display.drawStr270(20, 55, "Eletronica");
}
void Tela4() {
Display.setFont(u8g_font_robot_de_niro);
Display.drawStr(0, 13, "Vida de Silicio");
Display.setFont(u8g_font_helvB08);
Display.drawStr(0, 25, "Display Grafico");
Display.setFont(u8g_font_8x13);
Display.drawBox(0, 31, 96, 13);
Display.setColorIndex(0);
Display.drawStr(0, 41, "Arduino Mega");
Display.setFont(u8g_font_ncenB10);
Display.setColorIndex(1);
Display.drawStr(0, 60, "0123456789");
}
void Tela5() {
char ASCII[2] = " ";
int dec = 32;
Display.setFont(u8g_font_robot_de_niro);
for (int linha = 10; linha < 70; linha += 10) {
for (int coluna = 2; coluna < 128; coluna += 8) {
ASCII[0] = dec;
Display.drawStr(coluna, linha, ASCII);
dec ++;
}
}
}
void Tela6() {
Display.setFont(u8g_font_8x13);
Display.drawLine(10, 2, 110, 2);
Display.drawBox(20, 10, 15, 15);
Display.drawCircle(85, 20, 15);
Display.drawEllipse(30, 50, 10, 10);
Display.drawDisc(90, 50, 10);
}
void setup() {
Serial.begin(9600);
if ( Display.getMode() == U8G_MODE_R3G3B2 )
Display.setColorIndex(20);
else if ( Display.getMode() == U8G_MODE_GRAY2BIT )
Display.setColorIndex(1);
else if ( Display.getMode() == U8G_MODE_BW )
Display.setColorIndex(1);
}
void loop() {
//Tela 1
Display.firstPage();
do {
Display_config();
Tela1();
}
while (Display.nextPage());
delay(1000);
//Tela 2
Display.firstPage();
do {
Display_config();
Tela2();
}
while (Display.nextPage());
delay(1000);
//Tela 3
Display.firstPage();
do {
Display_config();
Tela3();
}
while (Display.nextPage());
delay(1000);
//Tela 4
Display.firstPage();
do {
Display_config();
Tela4();
}
while (Display.nextPage());
delay(1000);
//Tela 5
Display.firstPage();
do {
Display_config();
Tela5();
}
while (Display.nextPage());
delay(1000);
//Tela 6
Display.firstPage();
do {
Display_config();
Tela6();
}
while (Display.nextPage());
delay(1000);
}
// Biblioteca utilizada no Projeto #include "U8glib.h" //Configuração de Pinagem, Enable, RW, RS, RESET U8GLIB_ST7920_128X64_1X Display(8, 7, 6 , 9); // Rotina de Configuração da Escrita no Display void Display_config() { Display.setFont(u8g_font_6x10); Display.setFontRefHeightExtendedText(); Display.setDefaultForegroundColor(); Display.setFontPosTop(); } void Tela1() { Display.setFont(u8g_font_unifont); Display.drawStr(45, 15, "Vida"); Display.drawStr(53, 40, "de"); Display.drawStr(35, 60, "Silicio"); } void Tela2() { Display.setFont(u8g_font_unifont); Display.drawBox(0, 0, 128, 64); Display.setColorIndex(0); Display.drawStr(4, 35, "Vida de Silicio"); Display.drawStr(5, 35, "Vida de Silicio"); Display.drawFrame(1, 1, 126, 62); } void Tela3() { Display.setFont(u8g_font_helvB08); Display.drawStr(45, 31, "Arduino"); Display.drawStr90(105, 15, "Display"); Display.drawStr270(20, 55, "Eletronica"); } void Tela4() { Display.setFont(u8g_font_robot_de_niro); Display.drawStr(0, 13, "Vida de Silicio"); Display.setFont(u8g_font_helvB08); Display.drawStr(0, 25, "Display Grafico"); Display.setFont(u8g_font_8x13); Display.drawBox(0, 31, 96, 13); Display.setColorIndex(0); Display.drawStr(0, 41, "Arduino Mega"); Display.setFont(u8g_font_ncenB10); Display.setColorIndex(1); Display.drawStr(0, 60, "0123456789"); } void Tela5() { char ASCII[2] = " "; int dec = 32; Display.setFont(u8g_font_robot_de_niro); for (int linha = 10; linha < 70; linha += 10) { for (int coluna = 2; coluna < 128; coluna += 8) { ASCII[0] = dec; Display.drawStr(coluna, linha, ASCII); dec ++; } } } void Tela6() { Display.setFont(u8g_font_8x13); Display.drawLine(10, 2, 110, 2); Display.drawBox(20, 10, 15, 15); Display.drawCircle(85, 20, 15); Display.drawEllipse(30, 50, 10, 10); Display.drawDisc(90, 50, 10); } void setup() { Serial.begin(9600); if ( Display.getMode() == U8G_MODE_R3G3B2 ) Display.setColorIndex(20); else if ( Display.getMode() == U8G_MODE_GRAY2BIT ) Display.setColorIndex(1); else if ( Display.getMode() == U8G_MODE_BW ) Display.setColorIndex(1); } void loop() { //Tela 1 Display.firstPage(); do { Display_config(); Tela1(); } while (Display.nextPage()); delay(1000); //Tela 2 Display.firstPage(); do { Display_config(); Tela2(); } while (Display.nextPage()); delay(1000); //Tela 3 Display.firstPage(); do { Display_config(); Tela3(); } while (Display.nextPage()); delay(1000); //Tela 4 Display.firstPage(); do { Display_config(); Tela4(); } while (Display.nextPage()); delay(1000); //Tela 5 Display.firstPage(); do { Display_config(); Tela5(); } while (Display.nextPage()); delay(1000); //Tela 6 Display.firstPage(); do { Display_config(); Tela6(); } while (Display.nextPage()); delay(1000); }
// Biblioteca utilizada no Projeto
#include "U8glib.h"

//Configuração de Pinagem, Enable, RW, RS, RESET
U8GLIB_ST7920_128X64_1X Display(8, 7, 6 , 9);

// Rotina de Configuração da Escrita no Display
void Display_config() {

  Display.setFont(u8g_font_6x10);
  Display.setFontRefHeightExtendedText();
  Display.setDefaultForegroundColor();
  Display.setFontPosTop();
}

void Tela1() {

  Display.setFont(u8g_font_unifont);
  Display.drawStr(45, 15, "Vida");
  Display.drawStr(53, 40, "de");
  Display.drawStr(35, 60, "Silicio");
}

void Tela2() {

  Display.setFont(u8g_font_unifont);
  Display.drawBox(0, 0, 128, 64);
  Display.setColorIndex(0);
  Display.drawStr(4, 35, "Vida de Silicio");
  Display.drawStr(5, 35, "Vida de Silicio");
  Display.drawFrame(1, 1, 126, 62);
}

void Tela3() {

  Display.setFont(u8g_font_helvB08);
  Display.drawStr(45, 31, "Arduino");
  Display.drawStr90(105, 15, "Display");
  Display.drawStr270(20, 55, "Eletronica");
}

void Tela4() {

  Display.setFont(u8g_font_robot_de_niro);
  Display.drawStr(0, 13, "Vida de Silicio");

  Display.setFont(u8g_font_helvB08);
  Display.drawStr(0, 25, "Display Grafico");

  Display.setFont(u8g_font_8x13);
  Display.drawBox(0, 31, 96, 13);
  Display.setColorIndex(0);
  Display.drawStr(0, 41, "Arduino Mega");

  Display.setFont(u8g_font_ncenB10);
  Display.setColorIndex(1);
  Display.drawStr(0, 60, "0123456789");
}

void Tela5() {

  char ASCII[2] = " ";
  int dec = 32;

  Display.setFont(u8g_font_robot_de_niro);

  for (int linha = 10; linha < 70; linha += 10) {
    for (int coluna = 2; coluna < 128; coluna += 8) {
      ASCII[0] = dec;
      Display.drawStr(coluna, linha, ASCII);
      dec ++;
    }
  }
  
}

void Tela6() {

  Display.setFont(u8g_font_8x13);

  Display.drawLine(10, 2, 110, 2);
  Display.drawBox(20, 10, 15, 15);
  Display.drawCircle(85, 20, 15);
  Display.drawEllipse(30, 50, 10, 10);
  Display.drawDisc(90, 50, 10);
}

void setup() {

  Serial.begin(9600);

  if ( Display.getMode() == U8G_MODE_R3G3B2 )
    Display.setColorIndex(20);
  else if ( Display.getMode() == U8G_MODE_GRAY2BIT )
    Display.setColorIndex(1);
  else if ( Display.getMode() == U8G_MODE_BW )
    Display.setColorIndex(1);
}

void loop() {

  //Tela 1
  Display.firstPage();
  do {
    Display_config();
    Tela1();
  }
  while (Display.nextPage());
  delay(1000);

  //Tela 2
  Display.firstPage();
  do {
    Display_config();
    Tela2();
  }
  while (Display.nextPage());
  delay(1000);

  //Tela 3
  Display.firstPage();
  do {
    Display_config();
    Tela3();
  }
  while (Display.nextPage());
  delay(1000);

  //Tela 4
  Display.firstPage();
  do {
    Display_config();
    Tela4();
  }
  while (Display.nextPage());
  delay(1000);

  //Tela 5
  Display.firstPage();
  do {
    Display_config();
    Tela5();
  }
  while (Display.nextPage());
  delay(1000);

  //Tela 6
  Display.firstPage();
  do {
    Display_config();
    Tela6();
  }
  while (Display.nextPage());
  delay(1000);

}

Colocando para funcionar

Para verificar o funcionamento do display gráfico 128×64, foi montado em bancada o circuito com Arduino Mega, como pode ser visualizado no vídeo a seguir:

Entendo a fundo

Entendendo o Software

– Incluindo as bibliotecas a serem utilizadas

Inicialmente para que a aplicação funcione de forma adequada é necessário adicionar a biblioteca que permitirá acessar as funções e comandos para a escrita no display gráfico.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include "U8glib.h"
#include "U8glib.h"
#include "U8glib.h"

Na próxima linha criamos um objeto chamado Display, responsável por acessar as instruções existentes na biblioteca U8glib.h. Note que o objeto Display(8, 7, 6, 9) envia quatro valores como parâmetro ao construtor da biblioteca, esses parâmetros dentro dos parênteses informam quais serão os pinos de comunicação entre o arduino e display. Sendo assim, cada pino tem a seguinte função (Enable, RW, RS, RESET).

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
U8GLIB_ST7920_128X64_1X Display(8, 7, 6 , 9);
U8GLIB_ST7920_128X64_1X Display(8, 7, 6 , 9);
U8GLIB_ST7920_128X64_1X Display(8, 7, 6 , 9);

– Configurando a escrita no display

Na função Display_config(), são definidos algumas características do display e a respeito das informações que seram escrita no mesmo. A primeira linha executada contém a seguinte instrução: Display.setFont(u8g_font_6x10), responsável por definir a fonte das mensagem mostradas no display com o nome da mesma dentro dos parenteses. Com a instrução Display.setFontRefHeightExtendedText() definimos a altura de referência padrão para o modelo do display utilizado, no caso o ST7920. Em seguida a instrução Display.setDefaultForegroundColor() que define a cor de fundo padrão e por último com o comando Display.setFontPosTop() é definido o tamanho de fonte máximo permitido para o display. Para mais modelos de fontes, cores de fundo, funções especiais e até mesmo como configurar outros modelos de display gráfico e tipos de comunicação consulte a arquivo .h da biblioteca U8glib.h que você encontrará uma grande variedade de informações e configurações para os mais variados displays.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
void Display_config() {
Display.setFont(u8g_font_6x10);
Display.setFontRefHeightExtendedText();
Display.setDefaultForegroundColor();
Display.setFontPosTop();
}
void Display_config() { Display.setFont(u8g_font_6x10); Display.setFontRefHeightExtendedText(); Display.setDefaultForegroundColor(); Display.setFontPosTop(); }
void Display_config() {

  Display.setFont(u8g_font_6x10);
  Display.setFontRefHeightExtendedText();
  Display.setDefaultForegroundColor();
  Display.setFontPosTop();
}

– Função Tela1 – Imprimido texto simples

Para exibir as diferentes opções de escrita no display, foram criados algumas funções para cada tela em questão. Na função Tela1(), a primeira instrução executada é Display.setFont().  Esta responsável por selecionar a fonte que será empregada na escrita. Logo abaixo, o comando Display.drawStr recebe três parâmetros: (pos. X, pos. Y, “String”) para exibir a string entre aspas no display na posição desejada. Nesta função considera-se o ponto de referência (0,0) o ponto superior esquerdo.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
void Tela1() {
Display.setFont(u8g_font_unifont);
Display.drawStr(45, 15, "Vida");
Display.drawStr(53, 40, "de");
Display.drawStr(35, 60, "Silicio");
}
void Tela1() { Display.setFont(u8g_font_unifont); Display.drawStr(45, 15, "Vida"); Display.drawStr(53, 40, "de"); Display.drawStr(35, 60, "Silicio"); }
void Tela1() {

  Display.setFont(u8g_font_unifont);
  Display.drawStr(45, 15, "Vida");
  Display.drawStr(53, 40, "de");
  Display.drawStr(35, 60, "Silicio");
}

– Função Tela2 – Imprimindo com moldura

Esta rotina tem por finalidade programar uma moldura na interface do display. A função Display.drawBox () recebe quatro parâmetros (pos. X, pos. Y, largura, altura) e tem por finalidade imprimir uma “caixa” na tela de acordo com os parâmetros. Já a função Display.setColorIndex(0), é responsável por inverter as cores dos pixels nas coordenadas da string no display. Observe ainda que a instrução Display.drawStr() foi executada duas veses, mas com um deslocamento em no eixo X. Esse artifício permite exibir mensagens na tela do display com a fonte mais grossa.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
void Tela2() {
Display.setFont(u8g_font_unifont);
Display.drawBox(0, 0, 128, 64);
Display.setColorIndex(0);
Display.drawStr(4, 35, "Vida de Silicio");
Display.drawStr(5, 35, "Vida de Silicio");
Display.drawFrame(1, 1, 126, 62);
}
void Tela2() { Display.setFont(u8g_font_unifont); Display.drawBox(0, 0, 128, 64); Display.setColorIndex(0); Display.drawStr(4, 35, "Vida de Silicio"); Display.drawStr(5, 35, "Vida de Silicio"); Display.drawFrame(1, 1, 126, 62); }
void Tela2() {

  Display.setFont(u8g_font_unifont);
  Display.drawBox(0, 0, 128, 64);
  Display.setColorIndex(0);
  Display.drawStr(4, 35, "Vida de Silicio");
  Display.drawStr(5, 35, "Vida de Silicio");
  Display.drawFrame(1, 1, 126, 62);
}

– Função Tela3 – Imprimindo com diferentes ângulos 

Esta tela é similar à tela 1. Nesse caso as informações exibidas são rotacionadas em 0, 90 e 270 graus. Ou seja, Display.drawStr() escreve a string Arduino na horizontal, Display.drawStr90() escreve a string Display com inclinação de 90º, enquanto que Display.drawStr270() provoca um giro de 270º na string Eletronica. Observe que a fonte nessa função foi alterada em relação a primeira tela com o comando Display.setFont(u8g_font_helvB08).

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
void Tela3() {
Display.setFont(u8g_font_helvB08);
Display.drawStr(45, 31, "Arduino");
Display.drawStr90(105, 15, "Display");
Display.drawStr270(20, 55, "Eletronica");
}
void Tela3() { Display.setFont(u8g_font_helvB08); Display.drawStr(45, 31, "Arduino"); Display.drawStr90(105, 15, "Display"); Display.drawStr270(20, 55, "Eletronica"); }
void Tela3() {

  Display.setFont(u8g_font_helvB08);
  Display.drawStr(45, 31, "Arduino");
  Display.drawStr90(105, 15, "Display");
  Display.drawStr270(20, 55, "Eletronica");
}

– Função Tela4 – Imprimindo textos com diferentes fundos e fontes

Nesta tela, há configuração de diferentes fontes de escrita e cor de fundo por meio das funções Display.setFont() Display.setColorIndex().

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
void Tela4() {
Display.setFont(u8g_font_robot_de_niro);
Display.drawStr(0, 13, "Vida de Silicio");
Display.setFont(u8g_font_helvB08);
Display.drawStr(0, 25, "Display Grafico");
Display.setFont(u8g_font_8x13);
Display.drawBox(0, 31, 96, 13);
Display.setColorIndex(0);
Display.drawStr(0, 41, "Arduino Mega");
Display.setFont(u8g_font_ncenB10);
Display.setColorIndex(1);
Display.drawStr(0, 60, "0123456789");
}
void Tela4() { Display.setFont(u8g_font_robot_de_niro); Display.drawStr(0, 13, "Vida de Silicio"); Display.setFont(u8g_font_helvB08); Display.drawStr(0, 25, "Display Grafico"); Display.setFont(u8g_font_8x13); Display.drawBox(0, 31, 96, 13); Display.setColorIndex(0); Display.drawStr(0, 41, "Arduino Mega"); Display.setFont(u8g_font_ncenB10); Display.setColorIndex(1); Display.drawStr(0, 60, "0123456789"); }
void Tela4() {

  Display.setFont(u8g_font_robot_de_niro);
  Display.drawStr(0, 13, "Vida de Silicio");

  Display.setFont(u8g_font_helvB08);
  Display.drawStr(0, 25, "Display Grafico");

  Display.setFont(u8g_font_8x13);
  Display.drawBox(0, 31, 96, 13);
  Display.setColorIndex(0);
  Display.drawStr(0, 41, "Arduino Mega");

  Display.setFont(u8g_font_ncenB10);
  Display.setColorIndex(1);
  Display.drawStr(0, 60, "0123456789");
}

– Função Tela5 – Imprimindo caracteres especiais

Nessa tela foram apresentados alguns caracteres da tabela ASCII. Caso você não tenha uma tabela como essa pode acessar uma nesse LINK, usada como base para fazer o tutorial. No vídeo apresentando, os caracateres especiais exibidos correpondem aos numeros em decimal de 32 a 127. Observe que nao função Tela5, é instanciado a variável ASCII (do tipo char) que recebe os valores (do tipo int), e exibe o seu caractere correspondente por meio da intrução Display.drawStr(coluna, linha, ASCII). Os dois for presentes na função são utilizados para imprimir os caracteres ao longo de toda a área do display, sendo que o primeiro for é responsáel por pular linhas ao passo que na linhas corresponde não há mais espaço para exibir mais caracteres. Já o segundo for, ou for interno, é responsável por definir a posição de cada caractere ao longo dos 128 pixels disponíveis do display. A variável dec so pode ser incrementada até o valor 127, que é o valor decimal correspondente ao último caractere especial da tabela ASCII, por isso a variável foi incrementada dentro do segundo for, que por coincidência também tem limite de 127, definido pelo numero máximo de  pixels do display.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
void Tela5() {
char ASCII[2] = " ";
int dec = 32;
Display.setFont(u8g_font_robot_de_niro);
for (int linha = 10; linha < 70; linha += 10) {
for (int coluna = 2; coluna < 128; coluna += 8) {
ASCII[0] = dec;
Display.drawStr(coluna, linha, ASCII);
dec ++;
}
}
}
void Tela5() { char ASCII[2] = " "; int dec = 32; Display.setFont(u8g_font_robot_de_niro); for (int linha = 10; linha < 70; linha += 10) { for (int coluna = 2; coluna < 128; coluna += 8) { ASCII[0] = dec; Display.drawStr(coluna, linha, ASCII); dec ++; } } }
void Tela5() {

  char ASCII[2] = " ";
  int dec = 32;

  Display.setFont(u8g_font_robot_de_niro);

  for (int linha = 10; linha < 70; linha += 10) {
    for (int coluna = 2; coluna < 128; coluna += 8) {
      ASCII[0] = dec;
      Display.drawStr(coluna, linha, ASCII);
      dec ++;
    }
  }
  
}

– Função Tela6 – Imprimindo formas geométricas

Na função Tela6(), são exibidos diferentes formas geométricas, todas as funções tem em comum os seguites parâmetros (pos. X, pos. Y). Com a mescla dessas figuras geométricas é possível fazer vários formatos e artes diferentes para serem exibidos no display. As seguir listamos oque cada instrução para desenhar as figuras no display recebe de parâmetros:

  • Display.drawLine(pos. X , pos. Y, comprimento em X, pos. final Y);
  • Display.drawBox(pos. X, pos. Y, comprimento da base, comprimento da altura);
  • Display.drawCircle(pos. X, pos. Y, raio do círculo);
  • Display.drawEllipse(pos. X, pos. Y, raio em X, raio em Y);
  • Display.drawDisc(pos. X, pos. Y, raio do disco).
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
void Tela6() {
Display.setFont(u8g_font_8x13);
Display.drawLine(10, 2, 110, 2);
Display.drawBox(20, 10, 15, 15);
Display.drawCircle(85, 20, 15);
Display.drawEllipse(30, 50, 10, 10);
Display.drawDisc(90, 50, 10);
}
void Tela6() { Display.setFont(u8g_font_8x13); Display.drawLine(10, 2, 110, 2); Display.drawBox(20, 10, 15, 15); Display.drawCircle(85, 20, 15); Display.drawEllipse(30, 50, 10, 10); Display.drawDisc(90, 50, 10); }
void Tela6() {

  Display.setFont(u8g_font_8x13);

  Display.drawLine(10, 2, 110, 2);
  Display.drawBox(20, 10, 15, 15);
  Display.drawCircle(85, 20, 15);
  Display.drawEllipse(30, 50, 10, 10);
  Display.drawDisc(90, 50, 10);
}

– Estabelecendo as configurações iniciais

Na função void setup(), foram realizados algumas configurações de exibião do display. Possibilitando definir a intensidade, a cor, e o pixel ativado. A função Display.getMode() seleciona o modo de operação do display. Por exemplo, o comando U8G_MODE_R3G3B2, define o padrão RGB.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
void setup() {
if ( Display.getMode() == U8G_MODE_R3G3B2 )
Display.setColorIndex(20);
else if ( Display.getMode() == U8G_MODE_GRAY2BIT )
Display.setColorIndex(1);
else if ( Display.getMode() == U8G_MODE_BW )
Display.setColorIndex(1);
}
void setup() { if ( Display.getMode() == U8G_MODE_R3G3B2 ) Display.setColorIndex(20); else if ( Display.getMode() == U8G_MODE_GRAY2BIT ) Display.setColorIndex(1); else if ( Display.getMode() == U8G_MODE_BW ) Display.setColorIndex(1); }
void setup() {

  if ( Display.getMode() == U8G_MODE_R3G3B2 )
    Display.setColorIndex(20);
  else if ( Display.getMode() == U8G_MODE_GRAY2BIT )
    Display.setColorIndex(1);
  else if ( Display.getMode() == U8G_MODE_BW )
    Display.setColorIndex(1);
}

– Mudando as telas

Na função void loop() é realizada a mudanas das telas, na primeira linha é executada a instrução Display.firstPage(), que tem por finalidade iniciar a comunicação do display com o Arduino e habilitar a exibião de informações na tela do mesmo. Em seguida a função Display_config() já explicada anteriormente é executada, seguida da chamada da função Tela1(). A cada nova função de exibição de tela o comando Display.nextPage() também é executado para evitar sobreposição e lixo de caracteres das telas anteriores. Observe que o tempo de exibição de cada tela é de 1 segundo, sendo possível por meio da função delay() que possui como parâmetro o tempo em milisegundos da mudança da troca de telas.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Display.firstPage();
do {
Display_config();
Tela1();
}
Display.firstPage(); do { Display_config(); Tela1(); }
  Display.firstPage();
  do {
    Display_config();
    Tela1();
  }

Desafio

Para aprimorar suas habilidade com o displays, propomos a você desenvolver um relógio analógico/digital. Uma dica, é utilizar o módulo RTC DS 3231. Agora é com você!

Fechamento

Neste tutorial, demonstramos como você pode utilizar o display gráfico em seus projetos, esperamos que você continue nos acompanhando e sinta-se à vontade para deixar suas sugestões dúvidas nos comentários abaixo.

Privacy Preference Center