Usando TFT no Arduino
"Sonho de muitos técnicos, visualizar imagens com esses monitores, usando o Arduino, pode ser bastante simples!"
As telinhas TFT caíram no gosto de muita gente. Inicialmente restritas para pessoas com alto conhecimento em programação, até mesmo novatos na área podem podem usá-las depois de estudar um pouco e ver exemplos de códigos.
Eu fui um desses que estava querendo fazer isso. Tinha comprado uma e estava querendo ligar, e quando enfim tive tempo, a decepção: Nada funcionava.
Fui buscar no google e sequer encontrei um Datasheet, mas descobri um site que revelou o caminho das pedras, ou seja, como ligar o LCD no Arduino.
O código usado é um exemplo já disponível na pasta TFT da IDE do Arduino, com algumas modificações que achei certo fazer.
Copie e cole este código na ide do Arduino. Modifique a linha logo = TFTscreen.loadImage("coloque aqui o nome da imagem.bmp");colocando o nome certo da imagem.
//========================================================================
// include the necessary libraries
#include <SPI.h>
#include <SD.h>
#include <TFT.h> // Arduino LCD library
// pin definition for the Uno
#define sd_cs 4
#define lcd_cs 10
#define dc 9
#define rst 8
// pin definition for the Leonardo
//#define sd_cs 8
//#define lcd_cs 7
//#define dc 0
//#define rst 1
TFT TFTscreen = TFT(lcd_cs, dc, rst);
// this variable represents the image to be drawn on screen
PImage logo;
//==========================================================================
void setup() {
// initialize the GLCD and show a message
// asking the user to open the serial line
TFTscreen.begin();
TFTscreen.background(255, 255, 255);
TFTscreen.stroke(0, 0, 255);
TFTscreen.println();
TFTscreen.println("Visualizador ");//Escreva aqui os textos que desejar
delay (1000);//Tempo que a mensagem fica na tela
TFTscreen.stroke(0, 0, 0);
TFTscreen.println("Abra o serial monitor");// é necessário abri-lo para carregar a imagem e ver se tá tudo ok
delay(2000);
TFTscreen.println("Para ver");
delay(1000);
// initialize the serial port: it will be used to
// print some diagnostic info
Serial.begin(9600);
while (!Serial) {
// wait for serial line to be ready
}
// clear the GLCD screen before starting
TFTscreen.background(255, 255, 255);
// try to access the SD card. If that fails (e.g.
// no card present), the setup process will stop.
Serial.print("Localizando cartao SD");//Tenta detectar o cartão
if (!SD.begin(sd_cs)) {
Serial.println("Falha!!!");// se não achar cartão, dá erro
return;
}
Serial.println("Sucesso!");//se estiver tudo blz, ok!
// initialize and clear the GLCD screen
TFTscreen.begin();
TFTscreen.background(255, 255, 255);
// now that the SD card can be access, try to load the
// image file.
logo = TFTscreen.loadImage("kaioh.bmp");// IMPORTANTE: AQUI VC DEVE BOTAR O NOME DA IMAGEM QUE VC QUER VER.
if (!logo.isValid()) {
Serial.println("Erro: imagem nao encontrada");// Se não houver imagens ou o formato for incorreto
}
}
//========================================================================
void loop() {
// don't do anything if the image wasn't loaded correctly.
if (logo.isValid() == false) {
return;
}
Serial.println("Vetorizando");// a imagem está sendo carregada
// get a random location where to draw the image.
// To avoid the image to be draw outside the screen,
// take into account the image size.
int x = random(TFTscreen.width() - logo.width());
int y = random(TFTscreen.height() - logo.height());
// draw the image to the screen
TFTscreen.image(logo, x, y);
// wait a little bit before drawing again
delay(6500);// tempo que a imagem aparece
}
Algumas considerações precisam ser feitas:
*A imagem a ser carregada deverá obrigatoriamente estar no formato bitmap(.bmp) a 24 bits.
*A imagem tem que medir 128x160 pixels.
*Neste código é possível exibir uma imagem apenas. Se houverem outras imagens no mesmo cartão poderão ocorrer conflitos e nada vai aparecer.
Eis o resultado:
A imagem original e nas medidas corretas:
Além do tamanho, a posição precisa estar certa. Para ocupar toda a tela, a imagem precisa ser girada ou cortada no mesmo formato da tela. Note também que algumas cores foram trocadas, eu ainda não sei o porquê....
Para fazer as ligações, siga o esquema abaixo:
Não achei o Display para venda aqui em Porto Alegre/RS, portanto comprei no Mercado Livre.
O resistor pode eventualmente ser substituído por um potenciômetro, sem problemas, o que possibilita ajustar o brilho da tela. Um circuito igualmente simples e mais adequado é sugerido na figura abaixo:
Os valores das resistências não são críticos. O potenciômetro pode ser qualquer um com valores entre 10 e 100k, isso não alterará o funcionamento do circuito. O resistor limitador de corrente para o led pode ter valores até 1k. A fonte de tensão do circuito é a saída de +5V do Arduino.
Este circuito/Código é válido apenas para o TFT HY-1.8 SPI. Em outros modelos, eventuais alterações no código e nas ligações deverão ser feitas.
Eu fui um desses que estava querendo fazer isso. Tinha comprado uma e estava querendo ligar, e quando enfim tive tempo, a decepção: Nada funcionava.
Fui buscar no google e sequer encontrei um Datasheet, mas descobri um site que revelou o caminho das pedras, ou seja, como ligar o LCD no Arduino.
O código usado é um exemplo já disponível na pasta TFT da IDE do Arduino, com algumas modificações que achei certo fazer.
Copie e cole este código na ide do Arduino. Modifique a linha logo = TFTscreen.loadImage("coloque aqui o nome da imagem.bmp");colocando o nome certo da imagem.
//========================================================================
// include the necessary libraries
#include <SPI.h>
#include <SD.h>
#include <TFT.h> // Arduino LCD library
// pin definition for the Uno
#define sd_cs 4
#define lcd_cs 10
#define dc 9
#define rst 8
// pin definition for the Leonardo
//#define sd_cs 8
//#define lcd_cs 7
//#define dc 0
//#define rst 1
TFT TFTscreen = TFT(lcd_cs, dc, rst);
// this variable represents the image to be drawn on screen
PImage logo;
//==========================================================================
void setup() {
// initialize the GLCD and show a message
// asking the user to open the serial line
TFTscreen.begin();
TFTscreen.background(255, 255, 255);
TFTscreen.stroke(0, 0, 255);
TFTscreen.println();
TFTscreen.println("Visualizador ");//Escreva aqui os textos que desejar
delay (1000);//Tempo que a mensagem fica na tela
TFTscreen.stroke(0, 0, 0);
TFTscreen.println("Abra o serial monitor");// é necessário abri-lo para carregar a imagem e ver se tá tudo ok
delay(2000);
TFTscreen.println("Para ver");
delay(1000);
// initialize the serial port: it will be used to
// print some diagnostic info
Serial.begin(9600);
while (!Serial) {
// wait for serial line to be ready
}
// clear the GLCD screen before starting
TFTscreen.background(255, 255, 255);
// try to access the SD card. If that fails (e.g.
// no card present), the setup process will stop.
Serial.print("Localizando cartao SD");//Tenta detectar o cartão
if (!SD.begin(sd_cs)) {
Serial.println("Falha!!!");// se não achar cartão, dá erro
return;
}
Serial.println("Sucesso!");//se estiver tudo blz, ok!
// initialize and clear the GLCD screen
TFTscreen.begin();
TFTscreen.background(255, 255, 255);
// now that the SD card can be access, try to load the
// image file.
logo = TFTscreen.loadImage("kaioh.bmp");// IMPORTANTE: AQUI VC DEVE BOTAR O NOME DA IMAGEM QUE VC QUER VER.
if (!logo.isValid()) {
Serial.println("Erro: imagem nao encontrada");// Se não houver imagens ou o formato for incorreto
}
}
//========================================================================
void loop() {
// don't do anything if the image wasn't loaded correctly.
if (logo.isValid() == false) {
return;
}
Serial.println("Vetorizando");// a imagem está sendo carregada
// get a random location where to draw the image.
// To avoid the image to be draw outside the screen,
// take into account the image size.
int x = random(TFTscreen.width() - logo.width());
int y = random(TFTscreen.height() - logo.height());
// draw the image to the screen
TFTscreen.image(logo, x, y);
// wait a little bit before drawing again
delay(6500);// tempo que a imagem aparece
}
Algumas considerações precisam ser feitas:
*A imagem a ser carregada deverá obrigatoriamente estar no formato bitmap(.bmp) a 24 bits.
*A imagem tem que medir 128x160 pixels.
*Neste código é possível exibir uma imagem apenas. Se houverem outras imagens no mesmo cartão poderão ocorrer conflitos e nada vai aparecer.
Eis o resultado:
Além do tamanho, a posição precisa estar certa. Para ocupar toda a tela, a imagem precisa ser girada ou cortada no mesmo formato da tela. Note também que algumas cores foram trocadas, eu ainda não sei o porquê....
Para fazer as ligações, siga o esquema abaixo:
Não achei o Display para venda aqui em Porto Alegre/RS, portanto comprei no Mercado Livre.
O resistor pode eventualmente ser substituído por um potenciômetro, sem problemas, o que possibilita ajustar o brilho da tela. Um circuito igualmente simples e mais adequado é sugerido na figura abaixo:
Os valores das resistências não são críticos. O potenciômetro pode ser qualquer um com valores entre 10 e 100k, isso não alterará o funcionamento do circuito. O resistor limitador de corrente para o led pode ter valores até 1k. A fonte de tensão do circuito é a saída de +5V do Arduino.
Este circuito/Código é válido apenas para o TFT HY-1.8 SPI. Em outros modelos, eventuais alterações no código e nas ligações deverão ser feitas.
Comentários
Postar um comentário
Comentários são livres! Mas seja respeitoso.