Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Crie Animações e Jogos Envolventes em LCD com Arduino UNO

Componentes e Materiais

ComponenteQuantidade
Arduino UNO1
LCD Alfanumérico 16x21

Aplicativos

Sobre o Projeto

Este tutorial ensina os fundamentos de animação em displays LCD 16x2 com Arduino, extensível a outras dimensões. Aborda fiação, escrita básica, texto rolante, caracteres personalizados, animação de seta e um jogo simples estilo arcade.

Fiação do LCD

Conforme diagrama Fritzing. Conexões principais:

Teste inicial: Alimente; se a linha inferior acender, o LCD funciona. Ajuste o contraste se necessário.

Explicação do Código Básico

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // rs, e, d4, d5, d6, d7

void setup() {
  lcd.begin(16, 2);        // 16 colunas, 2 linhas
  lcd.setCursor(0, 1);     // coluna 0, linha 1 (segunda linha)
  lcd.print("Working");
}
void loop() {}

Texto Rolante (Scrolling)

O texto desliza da direita para a esquerda, simulando painéis de publicidade.

void setup() { lcd.begin(16,2); }
void loop() {
  int n = 15;
  char message[] = "scrolling text!";
  char *ptr = message;
  while (n != -14) {
    lcd.clear();
    lcd.setCursor(n, 1);
    if (n < 0) ptr++;
    lcd.print(ptr);
    n--;
    delay(250);
  }
}

O ponteiro ptr avança para manter o texto visível quando parte sai pela esquerda. Ajuste delay para velocidade.

Caracteres Personalizados

Permite criar ícones (ex.: dinossauro) definindo uma matriz 5x8 pixels.

byte dino[] = {
  B01110, B01110, B01100, B01111,
  B11101, B01010, B01010, B01010
};

void setup() {
  lcd.createChar(0, dino);   // registra char 0
  lcd.begin(16,2);
  lcd.setCursor(0,1);
  lcd.write(byte(0));        // exibe char personalizado
}

Ferramenta online para criar caracteres: LCD Character Creator.

Animação: Seta Disparada

Três caracteres personalizados (ponta, corpo, cauda) formam uma seta que atravessa a tela.

byte arrowhead[] = { B00001, B00011, B00111, B01111, B00111, B00011, B00001, B00000 };
byte arrowbody[] = { B00000, B00000, B00000, B11111, B11111, B00000, B00000, B00000 };
byte arrowtail[] = { B00011, B00111, B11111, B11111, B11111, B00111, B00011, B00000 };

void setup() {
  lcd.createChar(0, arrowhead);
  lcd.createChar(1, arrowbody);
  lcd.createChar(2, arrowtail);
  lcd.begin(16,2);
}
void loop() {
  int n = 15;
  while (n != -1) {
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.write(byte(0));
    lcd.write(byte(1));
    lcd.write(byte(2));
    n--;
    delay(50);
  }
}

Pode haver um rastro visual da cauda – é normal devido à persistência do LCD.

Jogo LCD: Desvie das Setas

Objetivo: O herói (boneco) fica na linha 1 (índice 1). Setas vêm da direita. Pressione botão (pino 2, interrupção) para pular à linha 0 e evitar colisão. Pontuação incrementa a cada loop.

byte man[] = { B01110, B01110, B00100, B01110, B10101, B00100, B01010, B10001 };
int level = 1; // 0 = linha superior, 1 = linha inferior
int score = 0;

void setup() {
  lcd.createChar(0, arrowhead);
  lcd.createChar(1, arrowbody);
  lcd.createChar(2, arrowtail);
  lcd.createChar(3, man);
  lcd.begin(16,2);
  attachInterrupt(0, buttonin, CHANGE); // pino 2
  randomSeed(analogRead(A0));
}

void loop() {
  int n = 15;
  int rnd = random(15,25);
  while (n != -1) {
    lcd.clear();
    delay(10);
    drawman();
    lcd.setCursor(n, 1);
    if (n == 1 && level == 1) { stopgame(); continue; }
    lcd.write(byte(0)); lcd.write(byte(1)); lcd.write(byte(2));
    lcd.setCursor(10,0); lcd.print(score);
    delay(100 - rnd);
    n--;
    score++; if (level == 0) score--;
  }
}

void drawman() { lcd.setCursor(1, level); lcd.write(byte(3)); }

void buttonin() { level = (digitalRead(2) == LOW) ? 0 : 1; }

void stopgame() {
  lcd.clear();
  lcd.setCursor(0,0); lcd.print("Game over");
  lcd.setCursor(10,0); lcd.print(score);
  level = 1; score = 0; n = 15;
  delay(3000);
}

Conceitos chave: interrupções (resposta imediata ao botão) e números aleatórios verdadeiros (ruído analógico no pino A0 flutuante).

Código Completo

Dois sketches fornecidos: animação e jogo. Ambos incluem definições de caracteres e lógica de loop.

Esquemático

Crie Animações e Jogos Envolventes em LCD com Arduino UNO

Processo de manufatura

  1. Sensores Arduino: Tipos, Aplicações e Projetos do Mundo Real
  2. Console Portátil DIY com Clone Arduboy – Arduino Micro + OLED SPI
  3. Construa um Voltímetro Inteligente com Arduino e Smartphone – Projeto DIY Fácil
  4. Registrador de Temperatura e Umidade com Arduino, DHT11 e Ethernet Shield
  5. Python 3 para Arduino UNO: Controle de Comandos Fácil e Demo com LED
  6. Autômatos Celulares em Tempo Real no Arduino com Display OLED 128x64
  7. Construa um Rádio FM Compacto com Arduino Nano e RDA5807M
  8. Construa uma Estação Meteorológica Arduino Confiável com Sensores DHT
  9. Construa um Jogo Arcade Clássico com Arduino, LCD, Buzzer e Joystick
  10. MKR1000 com DHT22: Monitoramento de Temperatura e Umidade em Tempo Real no Azure