Exibir Imagens BMP do Cartão SD no Shield LCD TFT 2.4″ com Arduino
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Arduino UNO | 1 |
Sobre o Projeto
Este tutorial é a continuação de dois anteriores sobre o Shield LCD TFT 2.4″ Touch Screen com Arduino UNO:
- Primeiro: Interface e correção do toque (eixos invertidos)
- Segundo: Desenho de formas e criação de botões touch
Hoje focamos na leitura de imagens do cartão SD e exibição na tela.
Preparação do Cartão SD
- Formate o cartão como FAT32
- Transfira suas imagens no formato BMP 24 bits
- Resolução ideal: 240×320 pixels (orientação padrão) ou 320×240 (rotação 90°)
Escolha a orientação que preferir – pode girar a tela no código ou rotacionar as imagens no PC. Lembre-se dos nomes dos arquivos (ex: Img1.bmp) e insira o cartão no shield.
Biblioteca
A biblioteca que funcionou para mim: SPFD5408_Adafruit_GFX + SPFD5408_Adafruit_TFTLCD. Se ao testar os exemplos aparecer tela branca, procure a biblioteca compatível com seu shield específico.
Códigos
Dois códigos de exemplo (formato .ino) – lembre-se de alterar os nomes dos arquivos de imagem conforme os seus. Consulte o tutorial completo se precisar de ajuda.
Código 1 – Exibição Sequencial de Imagens
/* Exibe imagens BMP do cartão SD no shield TFT 2.4"
* Referência: SurtrTech.com
*/
#include <SPFD5408_Adafruit_GFX.h>
#include <SPFD5408_Adafruit_TFTLCD.h>
#include <SPI.h>
#include <SD.h>
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define SD_CS 10
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, A4);
void setup() {
Serial.begin(9600);
tft.reset();
uint16_t identifier = tft.readID();
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);
tft.begin(identifier);
if (!SD.begin(SD_CS)) {
progmemPrintln(PSTR("Falha no SD!"));
return;
}
}
void loop() {
bmpDraw("Logo.bmp", 0, 0);
delay(2000);
bmpDraw("Img2.bmp", 0, 0);
delay(2000);
bmpDraw("Img3.bmp", 0, 0);
delay(2000);
}
// Função de desenho BMP (não modifique)
#define BUFFPIXEL 20
void bmpDraw(char *filename, int x, int y) {
// ... (código completo de parsing BMP e renderização linha a linha)
// Inclui leitura de cabeçalho, verificação de formato 24 bits não comprimido,
// buffer de pixels, conversão RGB565 e envio para display via pushColors()
}
// Funções auxiliares read16, read32, progmemPrint, progmemPrintln
Código 2 – Apresentação de Slides com Controle Touch
/* Apresentação de slides controlada por toque na tela
* Imagens lidas do cartão SD
* Referência: SurtrTech.com
*/
#include <SPFD5408_Adafruit_GFX.h>
#include <SPFD5408_Adafruit_TFTLCD.h>
#include <SPI.h>
#include <SD.h>
#include <SPFD5408_TouchScreen.h>
#if defined(__SAM3X8E__)
#undef __FlashStringHelper::F(string_literal)
#define F(string_literal) string_literal
#endif
// Pinos do touch screen (verifique seu shield!)
#define YP A3
#define XM A2
#define YM 9
#define XP 8
// Calibração (execute código de calibração primeiro)
#define TS_MINX 176
#define TS_MINY 159
#define TS_MAXX 921
#define TS_MAXY 884
#define MINPRESSURE 10
#define MAXPRESSURE 1000
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define SD_CS 10
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, A4);
char x[] = "x1.bmp"; // Array para manipular número do arquivo
void setup() {
Serial.begin(9600);
tft.reset();
uint16_t identifier = tft.readID();
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);
tft.begin(identifier);
if (!SD.begin(SD_CS)) {
progmemPrintln(PSTR("Falha no SD!"));
return;
}
tft.setRotation(1); // Rotação 90°
bmpDraw(x, 0, 0); // Desenha primeira imagem (x1.bmp)
}
void loop() {
// Limites do array (1 a 4 = ASCII 49 a 52)
if (x[1] < 49) x[1] = 49;
if (x[1] > 52) x[1] = 52;
TSPoint p = ts.getPoint();
pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);
if (p.z > MINPRESSURE && p.z < MAXPRESSURE) {
p.x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width());
p.y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height());
// Tela rotacionada: botões nas laterais (eixo Y)
if (p.y > 0 && p.y < 100) { // Botão esquerdo
Serial.println("Esquerda");
x[1] = x[1] - 1;
bmpDraw(x, 0, 0);
delay(300);
} else if (p.y > 200 && p.y < 320) { // Botão direito
Serial.println("Direita");
x[1] = x[1] + 1;
bmpDraw(x, 0, 0);
delay(300);
}
}
}
// Função bmpDraw idêntica ao Código 1
// Funções auxiliares read16, read32, progmemPrint, progmemPrintln
Esquemático
É um shield plug-and-play – basta encaixar no Arduino UNO.
Processo de manufatura
- A Indústria de Cartões de Saudação: História, Produção e Tendências Futuras
- Cartão de Crédito: História, Design, Fabricação e Tendências Futuras
- Display de Cristal Líquido (LCD): Tecnologia, Fabricação e Perspectivas Futuras
- DATA MODUL Lança Display TFT Ultra-Slim 23,1" com Controle Smart Wi-Fi
- Distec Apresenta Display TFT Transfletivo de 7 Pol. Ortustech: Robusto, Legível sob Luz Solar, Baixo Consumo
- Nuvo-7160GC: GPU‑PC Robusto Entregando 6 TFLOPS, Suporte GPU 120 W e Saída 4K para Visão de Máquina, VR e Automação
- Primal Display: Construa Monitor de Temperatura LCD com Raspberry Pi
- Como Instalar Display TFT 3.5″ Kuman no RetroPie – Guia Passo a Passo
- IA Gera Imagens Realistas de Refeições a Partir de Receitas em Texto
- Projeto DIY Arduino LCD: Monte com Resistores, Botão e Display 16x2