3 projetos incríveis com o Display Touch Arduino Shield

3 projetos incríveis com o Display Touch Arduino Shield

Tenha em um mesmo produto um display gráfico com resolução de 320×240 e uma tela touch para os seus projetos Arduino, com o Display Touch Arduino Shield de 2,4″:

Display TFT 2.4¨ Touchscreen

Esse display tft de 2,4¨ tem resolução de 320×240 pixels, com um esquema de cores de 18 bits que permite a exibição de até 262.000 tonalidades diferentes, tela touch resistiva e um slot para cartão microSD, tudo isso controlado pelo driver ILI9325 (datasheet). Seu formato de shield permite que você acesse todas as funções do display apenas encaixando a placa no Arduino.

Para uso dos programas aqui apresentados com outras versões do controlador, como o S6D0154, ST7781 e ILI9335, siga as instruções no final deste post. Para o controlador ILI9341, altere as linhas correspondentes que estão indicadas nos programas.

Pinagem e conexão ao Arduino

Para utilizar o Display Touch Arduino com um Arduino Uno, simplesmente encaixe o display na placa. Um detalhe importante é que você deve utilizar algum material isolante para que o conector USB do Arduino não entre em contato com componentes e/ou trilhas da placa, causando algum curto-circuito.

Arduino Uno Shield TFT TouchscreenA tabela abaixo mostra os pinos utilizados pelo shield na conexão com um Arduino Uno. Esse TFT Shield com controlador ILI9341 e os programas aqui apresentados funcionam normalmente com o Arduino Mega.

Pinagem display TFT

Programas e bibliotecas

Para utilizar o Display Touch Arduino Shield com os três exemplos à seguir, vamos precisar das bibliotecas:

  • Adafruit_GFX
  • Adafruit_TFTLCD
  • Touchscreen

As bibliotecas estão disponíveis neste link. Faça o download, descompacte o arquivo e coloque as bibliotecas dentro da pasta LIBRARIES da IDE do seu Arduino. Reinicie a IDE para que as bibliotecas sejam corretamente carregadas.

Programa 1 – Gráficos e texto

Nesse primeiro exemplo, vamos  mostrar algumas funções de gráficos e texto que podemos gerar com esse display tft. Você pode alterar as cores do texto, tamanho de fonte, cor, etc e criar praticamente qualquer tipo de desenho.

Display TFT - Texto e Gráficos

O programa consiste em demonstrar as funções de texto, com alteração de tamanho, posicionamento e cor, e também as funções de desenho, como retângulos, triângulos, retângulos preenchidos e círculos.

//Programa: Teste Display Touch Arduino - Texto e Graficos
//Autor: FILIPEFLOP

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library

//Definicao de cores
#define BLACK           0x0000
#define BLUE            0x001F
#define RED             0xF800
#define GREEN           0x07E0
#define CYAN            0x07FF
#define MAGENTA         0xF81F
#define YELLOW          0xFFE0
#define WHITE           0xFFFF

//CS, CD, WR, RD, RESET
Adafruit_TFTLCD tft(A3, A2, A1, A0, A4);

void setup(void) 
{
  Serial.begin(9600);
  Serial.println("Teste de LCD 8 Bits");
  tft.reset();
  delay(500);
  //tft.begin(0x9341) //Use esta linha para o controlador 9341
  tft.begin(0x9325);
}

void loop()
{
  //tft.setRotation(3); //Use esta linha para o controlador 9341
  tft.setRotation(1);
  teste_texto(RED); 
  delay(2000);
  tft.setRotation(0);
  teste_linhas(CYAN);
  delay(500);
  teste_retangulo_cheio(YELLOW, MAGENTA);
  delay(500);
  tft.fillScreen(BLACK);
  teste_circulos(10, MAGENTA);
  delay(500);
  teste_triangulos();
  delay(500);
  teste_retangulos();
  delay(500);
}
 
void teste_texto(uint16_t color)
{
  tft.fillScreen(BLACK);
  tft.setTextColor(WHITE);
  tft.setTextSize(3);
  tft.setCursor(0, 20);
  tft.println("FILIPEFLOP");
  tft.setTextColor(GREEN);
  tft.setCursor(0, 50);
  tft.println("Arduino");
  tft.setTextColor(BLUE);
  tft.setCursor(0, 80);
  tft.println("Raspberry");
  tft.setTextColor(YELLOW);
  tft.setCursor(0, 110);
  tft.println("Embarcados");
  tft.setTextColor(CYAN);
  tft.setTextSize(5);
  tft.setCursor(0, 150);
  tft.println("1234567890");
  delay(2000);
}
 
void teste_linhas(uint16_t color)
{
  tft.fillScreen(BLACK);
  for (uint16_t x = 0; x < tft.width(); x += 6)
  {
    tft.drawLine(0, 0, x, tft.height() - 1, color);
  }
  for (uint16_t y = 0; y < tft.height(); y += 6)
  {
    tft.drawLine(0, 0, tft.width() - 1, y, color);
  }
}
 
void teste_retangulo_cheio(uint16_t color1, uint16_t color2)
{
  tft.fillScreen(BLACK);
  for (uint16_t x = tft.width() - 1; x > 6; x -= 6)
  {
    tft.fillRect(tft.width() / 2 - x / 2, tft.height() / 2 - x / 2 , x, x, color1);
    tft.drawRect(tft.width() / 2 - x / 2, tft.height() / 2 - x / 2 , x, x, color2);
  }
}
 
void teste_circulos(uint8_t radius, uint16_t color)
{
  for (uint16_t x = radius; x < tft.width(); x += radius * 2)
  {
    for (uint16_t y = radius; y < tft.height(); y += radius * 2) {
      tft.fillCircle(x, y, radius, color);
    }
  }
  for (uint16_t x = 0; x < tft.width() + radius; x += radius * 2)
  {
    for (uint16_t y = 0; y < tft.height() + radius; y += radius * 2)
    {
      tft.drawCircle(x, y, radius, WHITE);
    }
  }
}
 
void teste_triangulos()
{
  tft.fillScreen(BLACK);
  for (uint16_t i = 0; i < tft.width() / 2; i += 5)
  {
    tft.drawTriangle(tft.width() / 2, tft.height() / 2 - i,
                     tft.width() / 2 - i, tft.height() / 2 + i,
                     tft.width() / 2 + i, tft.height() / 2 + i, tft.Color565(0, 0, i));
  }
}
 
void teste_retangulos()
{
  tft.fillScreen(BLACK);
  for (uint16_t x = tft.width(); x > 20 ; x -= 6)
  {
    tft.fillRoundRect(tft.width() / 2 - x / 2, tft.height() / 2 - x / 2 , x, x, x / 8,  tft.Color565(0, x, 0));
  }
}

Programa 2 – Utilizando o Touch Screen

Agora vamos utilizar o touch screen, simulando botões na tela para acionamento de portas. Você pode utilizar este programa como base para acionar as portas do Arduino ou efetuar a leitura de algum sensor. Carregue o programa no Arduino e você terá uma tela como essa, onde utilizamos as funções do touch screen nos botões do lado direito:

Display TFT - Touch

//Programa : Teste Display Touch Arduino - Touchscreen
//Autor : FILIPEFLOP
 
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library
#include <TouchScreen.h>
 
#define YP A1 // Y+ is on Analog1 (use A3 para o 9341)
#define XM A2 // X- is on Analog2 (use A2 para o 9341)
#define YM 7 // Y- is on Digital7 (use 9 para o 9341)
#define XP 6 // X+ is on Digital6 (use 8 para o 9341)
 
#define TS_MINX 170 // Use 150 para o 9341
#define TS_MINY 165 // Use 120 para o 9341
#define TS_MAXX 920
#define TS_MAXY 940
 
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 100);

//Definicao de cores
#define BLACK           0x0000
#define BLUE            0x001F
#define RED             0xF800
#define GREEN           0x07E0
#define CYAN            0x07FF
#define MAGENTA         0xF81F
#define YELLOW          0xFFE0
#define WHITE           0xFFFF
 
//PP_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
Adafruit_TFTLCD tft(A3, A2, A1, A0, A4);
 
// Armazena o estado dos botões
bool valor_botao1 = 0;
bool valor_botao2 = 0;
bool valor_botao3 = 0;
bool valor_botao4 = 0;
 
#define MINPRESSURE 10
#define MAXPRESSURE 1000
 
void setup(void) 
{
  Serial.begin(9600);
  Serial.println("TFT Test");
  //identifier == 0x9325;
  tft.reset();
  delay(500);
  //uint16_t identifier = tft.readID(0x0);
  //Serial.print("Driver encontrado: ");
  //Serial.println(identifier, HEX);
 
 //tft.begin(0x9341); //Use esta linha para o controlador 9341
 tft.begin(0x9325);
  //tft.initDisplay();
  tft.fillScreen(BLACK);
  tft.setRotation(1);
 
  // Inicio - Texto e botoes
  tft.drawRoundRect(5, 15, 312, 50, 5, WHITE);
  tft.drawRoundRect(255, 15, 62, 50, 5, WHITE);
  tft.setTextColor(YELLOW);
  tft.setTextSize(3);
  tft.setCursor(15, 30);
  tft.println("Led Amarelo");
 
  tft.drawRoundRect(5, 70, 312, 50, 5, WHITE);
  tft.drawRoundRect(255, 70, 62, 50, 5, WHITE);
  tft.setTextColor(GREEN);
  tft.setTextSize(3);
  tft.setCursor(15, 85);
  tft.println("Led Verde");
 
  tft.drawRoundRect(5, 125, 312, 50, 5, WHITE);
  tft.drawRoundRect(255, 125, 62, 50, 5, WHITE);
  tft.setTextColor(BLUE);
  tft.setTextSize(3);
  tft.setCursor(15, 140);
  tft.println("Led Azul");
 
  tft.drawRoundRect(5, 180, 312, 50, 5, WHITE);
  tft.drawRoundRect(255, 180, 62, 50, 5, WHITE);
  tft.setTextColor(RED);
  tft.setTextSize(3);
  tft.setCursor(15, 195);
  tft.println("Led Vermelho");
 
  //Preenchimento OFF
  tft.setTextColor(WHITE);
  tft.setCursor(260, 30);
  tft.println("OFF");
  tft.setCursor(260, 85);
  tft.println("OFF");
  tft.setCursor(260, 140);
  tft.println("OFF");
  tft.setCursor(260, 195);
  tft.println("OFF");
}
 
void loop()
{
  TSPoint p = ts.getPoint();
  pinMode(XM, OUTPUT);
  digitalWrite(XM, LOW);
  pinMode(YP, OUTPUT);
  digitalWrite(YP, HIGH);
  pinMode(YM, OUTPUT);
  digitalWrite(YM, LOW);
  pinMode(XP, OUTPUT);
  digitalWrite(XP, HIGH);
 
  if (p.z > MINPRESSURE && p.z < MAXPRESSURE)
  {
    p.x = tft.width() - (map(p.x, TS_MINX, TS_MAXX, tft.width(), 0));
    p.y = tft.height() - (map(p.y, TS_MINY, TS_MAXY, tft.height(), 0));
    if (p.y > 200)
    {
      Serial.print("py: ");
      Serial.print(p.y);
      Serial.print(" px: ");
      Serial.print(p.x);
 
      //Testa botao amarelo
      if (p.x > 235 & p.x < 295)
      {
        if (valor_botao1 == 0)
        {
          tft.fillRoundRect(256, 16, 60, 48, 5, YELLOW);
          mostra_on(269, 30);
          valor_botao1 = !valor_botao1;
        }
        else
        {
          tft.fillRoundRect(256, 16, 60, 48, 5, BLACK);
          mostra_off(260, 30);
          valor_botao1 = !valor_botao1;
        }
      }
 
      //Testa botao verde
      if (p.x > 160 & p.x < 198)
      {
        if (valor_botao2 == 0)
        {
          tft.fillRoundRect(256, 71, 60, 48, 5, GREEN);
          mostra_on(269, 85);
          valor_botao2 = !valor_botao2;
        }
        else
        {
          tft.fillRoundRect(256, 71, 60, 48, 5,  BLACK);
          mostra_off(260, 85);
          valor_botao2 = !valor_botao2;
 
        }
      }
 
      //Testa botao azul
      if (p.x > 65 & p.x < 126)
      {
        if (valor_botao3 == 0)
        {
          tft.fillRoundRect(256, 126, 60, 48, 5, BLUE);
          mostra_on(269, 140);
          valor_botao3 = !valor_botao3;
        }
        else
        {
          tft.fillRoundRect(256, 126, 60, 48, 5,  BLACK);
          mostra_off(260, 140);
          valor_botao3 = !valor_botao3;
        }
      }
 
      //Testa botao vermelho
      if (p.x > 0 & p.x < 58)
      {
        if (valor_botao4 == 0)
        {
          tft.fillRoundRect(256, 181, 60, 48, 5, RED);
          mostra_on(269,195);
          valor_botao4 = !valor_botao4;
        }
        else
        {
          tft.fillRoundRect(256, 181, 60, 48, 5,  BLACK);
          mostra_off(260,195);
          valor_botao4 = !valor_botao4;
        }
      }
    }
  }
}
 
void mostra_on(int x, int y)
{
  tft.setTextColor(BLACK);
  tft.setCursor(x, y);
  tft.println("ON");
  delay(100);
}
 
void mostra_off(int x, int y)
{
  tft.setTextColor(WHITE);
  tft.setCursor(x, y);
  tft.println("OFF");
  delay(100);
}

Programa 3 – Mostrando imagens

Por último, vamos utilizar um programa para mostrar no display imagens armazenadas no cartão microSD. Os arquivos de imagem devem estar no formato bmp, com o tamanho de 320×240.

A cada 10 segundos a imagem é trocada, transformando o Display Touch Arduino em um pequeno porta retratos digital. Ao utilizar o programa abaixo, lembre-se de renomear as imagens no cartão para imagem1.bmp e  imagem2.bmp, ou altere o nome dos arquivos de imagem diretamente no programa.

// Programa: Teste Display Touch Arduino - Imagem
// Alteracoes e adaptacoes: FILIPEFLOP

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library
#include <SD.h>
#include <SPI.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();
  delay(500);
  uint16_t identifier = tft.readID();
  identifier == 0x9325;
  tft.begin(identifier);
  Serial.print(F("Initializing SD card..."));
  if (!SD.begin(SD_CS)) {
    Serial.println(F("failed!"));
    return;
  }
  Serial.println(F("OK!"));
}

void loop()
{
  bmpDraw("imagem1.bmp", 0, 0);
  delay(5000);
  bmpDraw("imagem2.bmp", 0, 0);
  delay(5000);
}

#define BUFFPIXEL 20

void bmpDraw(char *filename, int x, int y) 
{
  File     bmpFile;
  int      bmpWidth, bmpHeight;   // W+H in pixels
  uint8_t  bmpDepth;              // Bit depth (currently must be 24)
  uint32_t bmpImageoffset;        // Start of image data in file
  uint32_t rowSize;               // Not always = bmpWidth; may have padding
  uint8_t  sdbuffer[3 * BUFFPIXEL]; // pixel in buffer (R+G+B per pixel)
  uint16_t lcdbuffer[BUFFPIXEL];  // pixel out buffer (16-bit per pixel)
  uint8_t  buffidx = sizeof(sdbuffer); // Current position in sdbuffer
  boolean  goodBmp = false;       // Set to true on valid header parse
  boolean  flip    = true;        // BMP is stored bottom-to-top
  int      w, h, row, col;
  uint8_t  r, g, b;
  uint32_t pos = 0, startTime = millis();
  uint8_t  lcdidx = 0;
  boolean  first = true;

  if ((x >= tft.width()) || (y >= tft.height())) return;

  Serial.println();
  Serial.print(F("Loading image '"));
  Serial.print(filename);
  Serial.println('\'');
  // Open requested file on SD card
  if ((bmpFile = SD.open(filename)) == NULL) {
    Serial.println(F("File not found"));
    return;
  }
  // Parse BMP header
  if (read16(bmpFile) == 0x4D42) { // BMP signature
    Serial.println(F("File size: ")); Serial.println(read32(bmpFile));
    (void)read32(bmpFile); // Read & ignore creator bytes
    bmpImageoffset = read32(bmpFile); // Start of image data
    Serial.print(F("Image Offset: ")); Serial.println(bmpImageoffset, DEC);
    // Read DIB header
    Serial.print(F("Header size: ")); Serial.println(read32(bmpFile));
    bmpWidth  = read32(bmpFile);
    bmpHeight = read32(bmpFile);
    if (read16(bmpFile) == 1) { // # planes -- must be '1'
      bmpDepth = read16(bmpFile); // bits per pixel
      Serial.print(F("Bit Depth: ")); Serial.println(bmpDepth);
      if ((bmpDepth == 24) && (read32(bmpFile) == 0)) { // 0 = uncompressed
        goodBmp = true; // Supported BMP format -- proceed!
        Serial.print(F("Image size: "));
        Serial.print(bmpWidth);
        Serial.print('x');
        Serial.println(bmpHeight);
        // BMP rows are padded (if needed) to 4-byte boundary
        rowSize = (bmpWidth * 3 + 3) & ~3;
        // If bmpHeight is negative, image is in top-down order.
        // This is not canon but has been observed in the wild.
        if (bmpHeight < 0) {
          bmpHeight = -bmpHeight;
          flip      = false;
        }
        // Crop area to be loaded
        w = bmpWidth;
        h = bmpHeight;
        if ((x + w - 1) >= tft.width())  w = tft.width()  - x;
        if ((y + h - 1) >= tft.height()) h = tft.height() - y;
        // Set TFT address window to clipped image bounds
        tft.setAddrWindow(x, y, x + w - 1, y + h - 1);

        for (row = 0; row < h; row++) {
          if (flip) // Bitmap is stored bottom-to-top order (normal BMP)
            pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize;
          else     // Bitmap is stored top-to-bottom
            pos = bmpImageoffset + row * rowSize;
          if (bmpFile.position() != pos) { // Need seek?
            bmpFile.seek(pos);
            buffidx = sizeof(sdbuffer); // Force buffer reload
          }

          for (col = 0; col < w; col++) { // For each column...
            // Time to read more pixel data?
            if (buffidx >= sizeof(sdbuffer)) { // Indeed
              // Push LCD buffer to the display first
              if (lcdidx > 0) {
                tft.pushColors(lcdbuffer, lcdidx, first);
                lcdidx = 0;
                first  = false;
              }
              bmpFile.read(sdbuffer, sizeof(sdbuffer));
              buffidx = 0; // Set index to beginning
            }
            // Convert pixel from BMP to TFT format
            b = sdbuffer[buffidx++];
            g = sdbuffer[buffidx++];
            r = sdbuffer[buffidx++];
            lcdbuffer[lcdidx++] = tft.color565(r, g, b);
          } // end pixel
        } // end scanline
        // Write any remaining data to LCD
        if (lcdidx > 0) {
          tft.pushColors(lcdbuffer, lcdidx, first);
        }
        Serial.print(F("Loaded in "));
        Serial.print(millis() - startTime);
        Serial.println(" ms");
      } // end goodBmp
    }
  }

  bmpFile.close();
  if (!goodBmp) Serial.println(F("BMP format not recognized."));
}

uint16_t read16(File f) {
  uint16_t result;
  ((uint8_t *)&result)[0] = f.read(); // LSB
  ((uint8_t *)&result)[1] = f.read(); // MSB
  return result;
}

uint32_t read32(File f) {
  uint32_t result;
  ((uint8_t *)&result)[0] = f.read(); // LSB
  ((uint8_t *)&result)[1] = f.read();
  ((uint8_t *)&result)[2] = f.read();
  ((uint8_t *)&result)[3] = f.read(); // MSB
  return result;
}

Você pode verificar o controlador do seu display touch utilizando o programa LCD_ID_Reader. Para versões anteriores do shield comercializado pela FILIPEFLOP, com os controladores S6D0154 e ST7781, as bibliotecas necessárias estão neste link, assim como exemplos similares aos apresentados neste post. Para a versão de controlador 9335, utilize a biblioteca PP_TFTLCD, disponível neste link.

Gostou ? Ajude-nos a melhorar o blog atribuindo uma nota a este tutorial (estrelas no final do artigo), comente e visite nossa loja FILIPEFLOP !

7
3 projetos incríveis com o Display Touch Arduino Shield
105 votos, 4.90 classificação média (98% pontuação)

Formado em Ciência da Computação pela Universidade de Mogi das Cruzes, atualmente responsável pelo departamento técnico da FILIPEFLOP.

Compartilhe este Post

198 Comentários

  1. Edinei Henrique Ricardo - 4 de abril de 2017

    Existe uma Biblioteca com exemplos com Pics 18F ?

    Gostaria de utiliza-lo com pic18f4620 vc’s tem biblioteca pra ele ?

  2. Luiz - 17 de março de 2017

    ola, tenho uma duvida, possuo um tft deste em maos, tentei embarcar um programa de texto no arduino para mostra no tft,mas sem sucesso, existe algum procedimento alem de embarcar o codigo direto na placa?

  3. Anderson Aguiar - 10 de março de 2017

    Ola , Eu gostaria de uma ajuda , eu adquirir o display TFT 2.4″ Touch , e eu gostaria de apagar apenas 1 unica linha do display ? eu estou criando um voltímetro e quero atualiza-lo. Agradeço desde ja.

    • Carlos - 13 de março de 2017

      Boa tarde Anderson! De maneira simples penso que para apagar uma linha do display apenas desenhamos um retangulo preenchido com a cor de fundo em cima da linha (nas coordenadas onde a linha está). Seria isso ?

    • Sirvello - 1 de abril de 2017

      Anderson, para atualizar uma variável que ocupa sempre o mesmo espaço no display, complemente
      a linha do comando que define a cor do texto dessa maneira;

      tft.setTextColor(WHITE, BLACK);

      O parâmetro (WHITE) se refere à cor do texto.
      O parâmetro (BLACK) se refere à cor do background (fundo)

      Você pode mudar essas cores conforme for seu desejo.
      Espero ter ajudado.
      Abraços

  4. Dilson - 7 de janeiro de 2017

    Olá Felipe.

    Adquiri uma tela desta recentemente porém quando testei o “PROGRAMA 1″ os textos aparecem no sentido oposto. No seu exemplo o texto aparece iniciando-se do lado oposto ao botão de reset, ja no meu caso ele a parece iniciando do lado do botão de reset.
    É possível corrigir este problema?

    Att.

    • Gustavo - 9 de janeiro de 2017

      É só mudar o número no comando TFT.setrotation(“número”), entre 1,2,3 e 4 (cada número altera entre as orientaçoes possíveis)

      • Dilson - 10 de janeiro de 2017

        Gustavo

        Obrigado pela ajuda, porém quando utilizo o “PROGRAMA 2″ a posição necessária para fazer os toques que acionam os botões não coincidem com os mesmos em nenhuma das posições de rotação. Para corrigir este problema mudei a posição(coordenadas dos toques) de todos os botões.

  5. mauro - 23 de novembro de 2016

    olá, não consegui fazer funcionar o segundo exemplo ,a tela fica ok ,mas o touch não funciona ,alguém pode me ajudar por favor

  6. carlos - 19 de novembro de 2016

    Olá pessoal,
    Preciso iniciar um projeto onde após eu clicar na tela passe para outra tela para iniciar as configurações, alguem pode me ajudar?
    Desde ja agradeço

  7. Diego Henrique S. Andrade - 12 de novembro de 2016

    Eu tenho a mesma dúvida do Mangili; como faríamos para ligar o display em um módulo I²C? E vocês podem indicar um livro ou tutorial ensinando como usar o display em um Intel Galileo Gen 2 com Python?

  8. Carlos - 18 de outubro de 2016

    Bom dia, após quebrar um pouco a cabeça, consegui fazer funcionar dessa forma com Arduino UNO
    Substitui os 4 #define e alguns if´s : De if (p.x > 235 & p.x 25 & p.y < 50) por exemplo.

    //Programa : Teste Display Touch Arduino – Touchscreen
    //Autor : FILIPEFLOP

    #include // Core graphics library
    #include // Hardware-specific library
    #include

    /* SUBSTITUI ESTAS LINHAS PELAS ABAIXO: O TOUCH FICOU MUITO MAIS RÁPIDO.

    #define YP A3 // Y+ is on Analog1
    #define XM A2 // X- is on Analog2
    #define YM 9 // Y- is on Digital7
    #define XP 8 // X+ is on Digital6
    */
    #define YP A1 // must be an analog pin, use “An” notation!
    #define XM A2 // must be an analog pin, use “An” notation!
    #define YM 7 // can be a digital pin
    #define XP 6 // can be a digital pin

    #define TS_MINX 150
    #define TS_MINY 120
    #define TS_MAXX 920
    #define TS_MAXY 940

    TouchScreen ts = TouchScreen(XP, YP, XM, YM, 100);

    //Definicao de cores
    #define BLACK 0x0000
    #define BLUE 0x001F
    #define RED 0xF800
    #define GREEN 0x07E0
    #define CYAN 0x07FF
    #define MAGENTA 0xF81F
    #define YELLOW 0xFFE0
    #define WHITE 0xFFFF

    //PP_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
    Adafruit_TFTLCD tft(A3, A2, A1, A0, A4);

    // Armazena o estado dos botões
    bool valor_botao1 = 0;
    bool valor_botao2 = 0;
    bool valor_botao3 = 0;
    bool valor_botao4 = 0;

    #define MINPRESSURE 10
    #define MAXPRESSURE 1000

    void setup(void)
    {
    Serial.begin(9600);
    Serial.println(“TFT Test”);
    //identifier == 0x9341;
    tft.reset();
    delay(500);
    //uint16_t identifier = tft.readRegister(0x0);
    //Serial.print(“Driver encontrado: “);
    //Serial.println(identifier, HEX);

    tft.begin(0x9341);
    //tft.initDisplay();
    tft.fillScreen(BLACK);
    tft.setRotation(3);

    // Inicio – Texto e botoes
    tft.drawRoundRect(5, 15, 312, 50, 5, WHITE);
    tft.drawRoundRect(255, 15, 62, 50, 5, WHITE);
    tft.setTextColor(YELLOW);
    tft.setTextSize(3);
    tft.setCursor(15, 30);
    tft.println(“Led Amarelo”);

    tft.drawRoundRect(5, 70, 312, 50, 5, WHITE);
    tft.drawRoundRect(255, 70, 62, 50, 5, WHITE);
    tft.setTextColor(GREEN);
    tft.setTextSize(3);
    tft.setCursor(15, 85);
    tft.println(“Led Verde”);

    tft.drawRoundRect(5, 125, 312, 50, 5, WHITE);
    tft.drawRoundRect(255, 125, 62, 50, 5, WHITE);
    tft.setTextColor(BLUE);
    tft.setTextSize(3);
    tft.setCursor(15, 140);
    tft.println(“Led Azul”);

    tft.drawRoundRect(5, 180, 312, 50, 5, WHITE);
    tft.drawRoundRect(255, 180, 62, 50, 5, WHITE);
    tft.setTextColor(RED);
    tft.setTextSize(3);
    tft.setCursor(15, 195);
    tft.println(“Led Vermelho”);

    //Preenchimento OFF
    tft.setTextColor(WHITE);
    tft.setCursor(260, 30);
    tft.println(“OFF”);
    tft.setCursor(260, 85);
    tft.println(“OFF”);
    tft.setCursor(260, 140);
    tft.println(“OFF”);
    tft.setCursor(260, 195);
    tft.println(“OFF”);
    }

    void loop()
    {
    TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    digitalWrite(XM, LOW);
    pinMode(YP, OUTPUT);
    digitalWrite(YP, HIGH);
    pinMode(YM, OUTPUT);
    digitalWrite(YM, LOW);
    pinMode(XP, OUTPUT);
    digitalWrite(XP, HIGH);

    if (p.z > MINPRESSURE && p.z y “);
    Serial.println(p.y>200);
    Serial.println(p.y);
    Serial.println(p.x);

    if (p.y > 20)
    {
    Serial.println(“Passou. p.y > 200 “);
    Serial.print(“py: “);
    Serial.print(p.y);
    Serial.print(” px: “);
    Serial.print(p.x);

    //Testa botao amarelo
    if (p.y > 25 & p.y 55 & p.y 120 & p.y 190 & p.y < 215)
    {
    if (valor_botao4 == 0)
    {
    tft.fillRoundRect(256, 181, 60, 48, 5, RED);
    mostra_on(269,195);
    valor_botao4 = !valor_botao4;
    }
    else
    {
    tft.fillRoundRect(256, 181, 60, 48, 5, BLACK);
    mostra_off(260,195);
    valor_botao4 = !valor_botao4;
    }
    }
    }
    }
    }

    void mostra_on(int x, int y)
    {
    tft.setTextColor(BLACK);
    tft.setCursor(x, y);
    tft.println("ON");
    delay(100);
    }

    void mostra_off(int x, int y)
    {
    tft.setTextColor(WHITE);
    tft.setCursor(x, y);
    tft.println("OFF");
    delay(100);
    }

    • Leandro - 7 de março de 2017

      Olá migo tentei esse mas deu errado no meu. Funciona, mas quando aperto no LCD nada acontece.

      • Carlos - 7 de março de 2017

        Bom dia Leandro !
        Olha só: Quando eu baixei o codigo aqui desse site eu tive q fazer a midificao acima descrita pra funcionar.
        Mas uns dias depois atualizei meu compilador arduino e apaguei sem querer as libs q eu ja havia baixado entao baixei elas novamente e au gravar o codigo do touch no arduino e percebi q o meu display touch nao estava funcionando de acordo FOI ENTÃO q entendi q as libs nao sao exatamente iguais. Baixei outras libs e uma delas (sem eu mexer em nada no codigo) fez funcionar o display. Concluo então que SE seu arduino e o display estão OK e as ligacões também, o negócio é baixar outras libs.

        • Leandro Fedatto Ceschim - 10 de março de 2017

          Olá Carlos. Depois de algumas tentativas aqui, consegui fazer o dito cujo, com algumas alterações no programa mesmo, sem precisar tentar outras bibliotecas. Foi trabalhoso, mas consegui. E agora já tenho um display com 16 botões acionando 16 saídas do Arduino MEGA 2560. Agora, para mim, o céu é o limite..hehe..Abraços e valeu a resposta.

  9. pedro - 30 de setembro de 2016

    Tenho boas notícias cisalhamento com você todo, você sabe que há um cartão chamado cartão Multibanco vazio? Os meus amigos este cartão é real e é muito útil para pagar e comprar coisas online. E este cartão pode retirar até US $ 3.000 por dia, eu não acho que ele funciona, quando me encontrei com meu amigo usando este cartão usando o cartão para compras on-line, mas eu também assumiu o risco e aplicado para um cartão e pago, e foi entregue para mim, juntamente com informações sobre como usá-lo. E desde que eu sou o mapa, ele me ajudou com os meus problemas Finanical e eu sou capaz de cuidar dos meus dois filhos. Este cartão é real e é muito fácil de usar e acessível. Se precisar de ajuda para obter um destes cartões, por favor contacte: unlimitedhackersnetwork@gmail.com

  10. Gabrieli Pavlack - 29 de agosto de 2016

    Oi, se eu usar um display maior em polegadas muda algo no código?

    • Adilson Thomsen - 12 de setembro de 2016

      Boa tarde,

      Sim, provavelmente vai mudar a biblioteca, já que nesse caso ela é específica para esse display e esse controlador, e também os comandos de desenho, texto, etc.

      Abraço!

      Adilson – Equipe FILIPEFLOP

  11. fernando vendrametto - 23 de agosto de 2016

    boa noite.
    estou pesquisando ha dias… mas não consegui encontrar nada bem claro…

    tenho um controlador que exibia as informações em um lcd 320240 20pinos monocromático mas no entanto o lcd danificou se, agora quero liga as saidas do controlador ao arduino uno e programar uma saida de video para ver as informações em um monitor.

    como faço isso? já estou ficando careca de tanto procurar kkkkk

    agradeço desde já a ajuda.

  12. Lael - 15 de agosto de 2016

    Olá, eu fiz um módulo de bateria eletronica com o arduino mega. O módulo é configurado por dois botões NA e os parâmetros aparecem em um visor LCD 16×2. Com o faço para trocar os botões e o LCD pelo touch screen?

  13. Gustavo - 9 de agosto de 2016

    Olá! gostaria de saber como faço para acionar uma saída utilizando o display. Por exemplo, quando apertar o “on” do amarelo, tem como mandar um pulso para acionar alguma saída? (no caso estou usando o arduino MEGA, tendo assim saídas disponíveis).

    Agradeço!

  14. silvio - 1 de agosto de 2016

    amigo , eu testei o primeiro codigo, no arduino1.6, e ele apresentou erro ,

    sabe informar se é a ide , ou se o codigo está errado mesmo ?

  15. Matheus - 29 de julho de 2016

    Olá,

    Qual seria controlador de Touch Screen? Porquê analisando a biblioteca de Touch, não está especificado o controlador, nem explicação do código.

    Grato

  16. LINDOLFO SILVEIRA KEMMERICH - 17 de junho de 2016

    Ola.

    Comprei o brinquedinho ja faz um tempinho (estava sem tempo entao ele ficou guardado) agora chegou a hora de brincar com ele todavia tenho uma pergunta:

    É possivel trabalhar com este touch e com a placa ethernet shield w5100 juntos? quero fazer um controle para uma esteira separadora de pecas e um supervisorio com elipse e3 ou uma interface web.

  17. Daniel Fernandes - 25 de maio de 2016

    Belo e excelente tutorial! Isto me despertou em fazer-lhe uma pergunta:
    Eu tenho um TFT LCD colorido que foi removido junto com o painel de controle de uma impressora HP modelo Photosmart C4280; gostaria de estar usando-o com Arduino mas não sei as suas pinagens e, não sei como programá-lo com Arduino. O tamanho é de aprox. 1.5″ (pol); o Flat cable tem 33 Pinos; a numeração no TFT é: 42P741B511-BX … (tenho 2 fotos mas ñ sei colocar aqui)
    Se o ADILSON ou alguém souber e puder me reponder eu agradeceria muito!

  18. Sergio Naves - 23 de abril de 2016

    Pessoal!

    Estou utilizando o IDE 1.6.7 e a placa arduino UNO.

    Porém o exemplo enviado por você não funciona corretamente. Emite a mensagem de erro abaixo:

    C:\Arduino\Setup – Arduino-1.6.7\libraries\Adafruit_GFX\Adafruit_GFX.cpp: In member function ‘virtual void Adafruit_GFX::drawLine(int16_t, int16_t, int16_t, int16_t, uint16_t)':

    C:\Arduino\Setup – Arduino-1.6.7\libraries\Adafruit_GFX\Adafruit_GFX.cpp:170:16: error: ‘swap’ was not declared in this scope

    swap(x0, y0);

    Alguém poderia me auxiliar nesta questão?!

  19. LEOMAR CLEUDSON - 13 de abril de 2016

    Ola pessoal, comprei um kit arduino uno e um display lcd 2.4, mais nao aprendi ainda aprogramar. gostaria de saber se algum de voces podem fazer um pequeno projeto para mim que consite no seguinte:
    No lado esquerdo da tela. um numero e do lado direito um botao pra pressionar que vai incrementar esse numero ate 6, quando chegar em 6 volta pra 0 . tem de começar por 0 e o numero grande do lado esquerdo. bem simples. se puderem enviar para leomarcleudson@gmail.com fico grato.

  20. Guilherme - 20 de março de 2016

    Amigo, o meu shield funciona mas com as cordenadas invertidas no exemplo tft paint, pra escolher uma cor por exemplo eu teria que ir no expelho da cor, ou seja, no lado oposto para poder escolher e no desenho a mesma coisa, ja viu algo parecido?

  21. Luiz Fernando Farias Serravalle - 10 de março de 2016

    Olá! Gostaria de saber se posso usar livremente as portas D 10, 11, 12, 13 para conectar outros periféricos já que não pretendo usar cartão SD (vou conectar a shield no arduino usando jumpers, aí posso deixar tais portas livres)

  22. Hernan - 16 de fevereiro de 2016

    Pessoal , não consigo fazer funcionar meu display TFT 2.4″. Fica branca a tela. Tentei com a versão 1.06 Arduino Ide e tambem não funcionou. Não sei mais o que fazer. Agradeço Ajuda.

  23. Daniel Monteiro - 29 de janeiro de 2016

    Estou estranhando o Display. Ele funciona, mas é MUITO LENTO para desenhar. O mesmo código foda fluido usando o LCD Nokia 5110 (que também comprei na FILIPEFLOP) roda muitissimo mais lento ( algo como 1 frame por segundo). Existe alguma configuração que possa ser feita para acelerar o desempenho gráfico?

    • Daniel Monteiro - 29 de janeiro de 2016

      Mais uma pista: o problema é em limpar a tela mesmo – o resto funciona bem. Olhando o código da biblioteca, fiz algumas otimizações em writeData_unsafe e até consegui ALGUM ganho (mas posso estar fazendo bobagem sem saber), mas não o suficiente.

      Se entendi direito, o problema é que meu programa precisa transmitir 320 x 240 x 2 bytes para limpar a tela. Eu poderia apenas limpar onde desenho? Talvez, mas o experimento que estou fazendo não me permite prever muito onde vou “sujar” a tela. E meu medo é que o gasto de tempo calculando isso fosse superar o tempo de transmitir tudo de uma vez.

      • Daniel Monteiro - 2 de fevereiro de 2016

        Me pergunto se é possível aumentar a taxa de transferência – imagino que isso aumente a taxa de quadros por segundos?

      • Eramis - 3 de fevereiro de 2016

        Daniel Monteiro, estive trabalhando com este tipo de tela e me deparei com este mesmo problema seu. Comparei com um display 16×2 onde vc manda escrever uma palavra sem se preocupar com o que estava escrito antes, este display 16×2 não é gráfico, e sempre que vai escrever ele apaga o que havia escrito. O problema do display gráfico, é que apagar o que foi escrito anteriormente ele não faz sozinho, é necessário o programador fazer isto. O código que fiz para a escrever uma palavra na tela e depois ficar atualizando de forma rápida, foi da seguinte forma:
        Define uma variável para a palavra, e esta palavra só poderá ser atualizada por uma rotina. A rotina escreverá a palavra antiga com a cor de fundo, “apagando” a variável da tela, e posteriormente escreve a palavra nova com a cor da palavra.
        Exemplo:
        A cor de fundo é verde, e escrevi a a palavra “2015” em vermelho.
        para trocar a palavra “2015” para “2016” basta
        escrever a palavra “2015” novamente com verde (cor do fundo), e
        escrever a palavra “2016” em vermelho novamente.

        Quando vou fazer carregamento de imagem, o meu display é lento também.
        Penso que o gargalo seja o processador do Arduino que é “lento”.
        Espero ter ajudado.

  24. Eramis - 23 de janeiro de 2016

    Venho compartilhar com vocês meu trabalho de conclusão de curso em Engenharia Elétrica que envolveu Arduino e este display.
    Meu TCC teve como tema um Protótipo de controle de velocidade de baixo custo para um automóvel.
    O link do vídeo que segue abaixo, trata de um Computador de bordo com piloto automático.
    https://youtu.be/VnX9I5nh4Xk
    Outros dois videos relacionados com meu TCC que são:
    Atuação do servo motor do piloto automático
    https://youtu.be/8y4oyPlSIlQ
    Sistema de controle de velocidade para um veículo carburado
    https://youtu.be/UDkmSyFs0Io
    Espero que gostem.

  25. André - 20 de janeiro de 2016

    Boa tarde!

    Estou pensando em comprar este display para um projeto e gostaria de saber se eu consigo utlilizar ele (o display), no arduino UNO e um NRF24L01?

    Obrigado

    • FILIPEFLOP - 20 de janeiro de 2016

      Boa tarde André,

      Creio que não, a não ser que vc faça alguma alteração na biblioteca e/ou no hardware, pois os dois componentes compartilham os mesmos pinos.

      Abraço.

      Adilson – Equipe FILIPEFLOP

      • André - 22 de janeiro de 2016

        Adilson, obrigado.

        Eu preciso de algumas portas disponiveis, além do display.

        No exemplo acima, tem os botões coloridos acionados pelo touch no display.
        Gostaria de saber se existem estas portas disponiveis. Ou seja, eu aperto o touch no botão amarelo e gostaria de acionar um led amarelo, pressiono o botão touch azul e aciono um led azul na saída do arduino uno, e assim por diante.

        Minha dúvida é: eu consigo fazer isso usando este display?

        Abraços
        André

  26. João Paulo - 19 de janeiro de 2016

    Eu estou utilizando um módulo IR com Arduino Mega, gostaria de inserir esse display para exibição de algumas informações da automação.
    A biblioteca de IR usa a porta 3 para emissão de sinais de IR, e não encontrei um meio de mudar essa porta.
    No caso do shield do display tem como eu customizar a porta de comunicação que será usada na biblioteca?

  27. gabriel - 14 de janeiro de 2016

    Onde encontro os códigos antigos antigos? que utilizava myGLCD. ????

  28. alexandro - 7 de janeiro de 2016

    meu display veio com controlador ili9335 mais fica somente com a tela branca, quando carreguei o programa ele respondia modelo C0C0 mais depois do reset do display coloquei um delay de 100ms e ele passou a responder 9335, mais o display continua branco. será que ainda tem problema de inicialização?

  29. Rafael Buzanelo - 4 de janeiro de 2016

    Olá! Estou para comprar esse Display, porém preciso saber se roda no Arduino DUE da mesma forma que roda no arduino MEGA e se para isso é necessário fazer alguma mudança? Desde já muito obrigado!

  30. Marco - 10 de dezembro de 2015

    Comprei um LCD destes e só da problemas, a unica solução é devolver ao vendedor ou LIXO.

  31. Rodrigo SiIva - 10 de dezembro de 2015

    O Lcd esta espelhado- Usei o esquema aqui dos comentarios para alterar. Funcionou em partes. As letras estao normais agora mas a escrita começa da direita para esquerda. Entao tudo que escrevo fica de trás pra frente. Exemplo : FILIPEFLOP fica POLFEPILIF. O que posso faze para alter isso?

  32. Leonardo - 9 de dezembro de 2015

    Olá senhores. O que exatamente precisa ser mudado na biblioteca para que funcione no arduino mega? Nada ficou claro aqui.

    Obrigado

  33. Nicolas - 26 de novembro de 2015

    Teria como usar no Mega?

  34. André - 24 de outubro de 2015

    Boa noite, galera

    Estou com um problema com o meu display, é da MCU friend, driver IL9341, fiz todas as telas e joguei no UNO funcionou perfeitamente, quando fui jogar no MEGA ficou a tela branca, ai fui buscar na internet e achei uma biblioteca modificada para usar com o MEGA, funcionou, porém todas as telas estão espelhadas e as cores estão estranhas.
    Como posso resolver isso??

    Estou usando a biblioteca Adafruit

  35. Leonardo - 19 de outubro de 2015

    Olá, este display funciona com o due? Perdoem a ignorância, sou novo neste mundo….

  36. werner - 1 de outubro de 2015

    Eu posso usar o reset do lcd em outra porta? se sim qual? (conectando tudo por fora) pra que a porta a4 e a5 fiquem livres pra uma comnucação i²c
    é muito complicado mudar isso na biblioteca?

    • FILIPEFLOP - 1 de outubro de 2015

      Boa tarde,

      A princípio, você só precisa mudar essa linha, alterando o último parâmetro (LCD_RESET), que está com o valor A4:

      PP_TFTLCD tft(A3, A2, A1, A0, A4);

      Abraço

      Adilson – Equipe FILIPEFLOP

  37. sidinei - 7 de setembro de 2015

    Boa noite,segundo o bloco de pinagem do shield todos os pinos do arduino uno são utilizados exeto A5 e A6.
    gostaria de saber se posso usar esse pinos em outra função?desde ja obrigado.

  38. Tiago Colombi - 24 de agosto de 2015

    Bom dia, Tenho um modulo display destes, consegui utiliza-lo adequadamente com arduino mega, só estou tendo problemas com o touch. Criei botoes na tela, mas nem sempre que toco a tela os botoes respondem, ou demoram a responder. Alguém teve esse problema ou sabe como resolver? Seria problema com ajuste de sensibilidade?

  39. Saimond Schroder - 15 de agosto de 2015

    Bom Dia;
    Estou tendo dificuldades…
    Estou testando em um Arduino Mega…

    Caso o controlador do seu display seja o ST7781, altere a linha 16 do programa de UNO_24 para UNO_26:

    Deixando em UNO_24, o Display fica Branco…
    Caso colocar UNO_26, o display estranho…
    http://postimg.org/image/elqv1zr3d/

    O que posso fazer para resolver o problema ?

  40. mauriliano - 11 de agosto de 2015

    oi alguem da flipeflop pode me esclarecer uma duvida , eu comprei o tft2.4 o sensor de fluxo para usar os dois juntos ja que na pagina da loja diz que as portas d2 e d3 estariam livres e na verdade nao estão, tem como utilizar as portas d10, d11, d12, e d13 no lugar das d2,d3,d4,d5 posso ligar o tft por cabo para poder usar essar portas

  41. Henrique - 8 de agosto de 2015

    Pessoal, tem um código para rotacionar as imagens que aprece na tela, no SEGUNDO projeto? é que o touch ta invertido, então ou eu inverto o touch, ou as escritas, mas seria bem mais facil se tivesse um tipo do TFT “tft.setrotate(0);”

    Alguem sabe um comando tipo esse para o MyGLCD?

  42. Henrique - 8 de agosto de 2015

    Olá, não consegui funcionar o touch como era pra fazer o exemplo 2, será que o touch da minha placa está estragado?

  43. Marcus Vinícius - 30 de julho de 2015

    Boa tarde!

    Baixei as bibliotecas e carreguei os programas no Arduíno, no entanto o display não sai da tela branca, ele pode estar danificado?

  44. mauriliano - 29 de julho de 2015

    gostaria de ajuda com o tft2.4 quero exibir as leituras de um sensor de fluxoSensor de Fluxo de Água YF-S201.

  45. Tonino - 29 de julho de 2015

    oi,
    Li com interesse o seu tutorial e testado. tudo funciona perfeitamente.
    Muito obrigado pelo excelente trabalho realizado.
    Agora eu gostaria de fazer uma pergunta.
    Gostaria de usar esta exibição para mostrar dados de vários sensores I2C
    Por exemplo, um RTC DS-1307
    Meu problema é o seguinte, porque, em primeiro lugar, há a seguinte declaração

    UTFT myGLCD (UNO_24, A2, A1, A3, A4);

    Mas o pino A4 eu preciso usá-lo como o módulo RTC SDA como devemos fazer para superar este problema?

    Um exemplo disso seria muito bem-vindo.

    • FILIPEFLOP - 7 de agosto de 2015

      Boa tarde,

      Realmente isso é um problema ao utilizar o shield com o Uno. Penso em 2 soluções:

      – Utilizar um Arduino Mega. Nessa placa o SDA e SCL estão nos pinos 20 e 21
      – Não utilizar o TFT como shield, fazer a ligação entre o Arduino e o display por meio de jumpers, e modificar a biblioteca para que esta não use o pino A4, se o seu projeto permitir.

      Abraço

      Adilson – Equipe FILIPEFLOP

  46. Henrique - 28 de julho de 2015

    Olá, estou tento dificuldades para lidar com os novos Display’s com controlador tm 74hc245, alguém poderia me ajudar? SOCORRO

  47. Robson - 26 de julho de 2015

    Uhuuuu!!!

    Consegui fazer o exemplo 3 funcionar, alterando a sub rotina dispRaw:

    _____________________________________________
    void dispRaw(UTFT *utft, SdFile* inFile)
    {

    #define SCREEN_WIDTH 320
    #define SCREEN_HEIGHT 240

    uint16_t buf[SCREEN_WIDTH];
    cbi(utft->P_CS, utft->B_CS);
    for (int y = 0; y setXY(0, y, SCREEN_WIDTH, y);
    for (int x = SCREEN_WIDTH – 1; x >= 0; x–) {
    byte h = inFile->read();
    byte l = inFile->read();
    buf[x] = ((uint16_t)h << 8) | l;
    }
    for (int x = 0; x LCD_Write_DATA(*(p + 1), *p);
    }
    }
    sbi(utft->P_CS, utft->B_CS);
    }
    _____________________________________________
    Boa sorte!

  48. Robson - 22 de julho de 2015

    Gente, preciso de uma coisa que é basicamente simples para um GLCD, rotacionar a tela! Mas não para ficar girando. Sei que cada pixel é controlado de forma independente, o que acontece é estou embarcando um Tacômetro, em um Fusca, mas as letras são escritas justamente na posição que o motorista não tem bom contraste, já o passageiro não teria problema. Ao deixar o display em Landscape ao olhar pela esquerda o LCD fica esbranquiçado e dificulta a visualização, porém ao olhar pela direita a imagem fica aceitável. Claro que seria bom olhar o LCD de frente, mas ao fixar o LCD na ranhura que seria instalado o rádio, não tem outro jeito. Preciso rotacionar a tela toda 180 graus, mas sem gambiarra, alguém sabe em que parte da biblioteca/driver posso inverter a sequencia de envio dos dados? Sei que é possível, e conto com a sua experiencia! Obrigado desde já!

    • Robson - 23 de julho de 2015

      Conforme já citei logo abaixo,

      Encontrei algo relacionado com o problema de, velocidade e orientação:

      http://misc.ws/2013/11/08/touch-screen-shield-for-arduino-uno/

      Eu já tinha visto no datasheet sobre isso e estava tentando implementar mudanças na biblioteca, mas acabei achando esse post mencionado acima, embora esteja em Inglês, acredito que valha apena ser lido.

      Boa sorte!

    • William - 24 de julho de 2015

      Não precisa alterar a Lib

      tft.setRotation(0) //usar ele na horizontal
      ou
      tft.setRotation(1)//usar ele na vertical

      • Robson - 25 de julho de 2015

        William – 24 de julho de 2015 ,

        Acho que não entendeu meu problema, não queria usar em ‘pé’ (PORTRAIT) ou ‘deitado’ (LANDSCAPE).

        Precisava sim usar ‘deitado’, mas ainda assim, ‘de ponta cabeça’.

        Como tem bastante gente internet afora comentando que a imagem fica espelhada, já aproveitei e adicionei a opção de espelho (Mirror).

        Esses códigos foram testados em lcd spfd5408a, e não deve ocasionar interferência em outros, bastando não usar as opções estendidas.

        Para quem quiser fazer isso, segue a receita, com estas alterações dá para fazer “des-espelhar” (caso já esteja espelhado) e girar para as 4 posições:
        PORTRAIT & NORMAL
        LANDSCAPE & NORMAL
        PORTRAIT & ROTATE
        LANDSCAPE & ROTATE

        —————————————————————————-
        Usage:
        myGLCD.InitLCD(LANDSCAPE, ROTATE, NORMAL); // InitLCD(PORTRAIT/LANDSCAPE, NORMAL/ROTATE, NORMAL/MIRROR)
        —————————————————————————-

        Modifications on lib utft

        File:
        \UTFT\UTFT.cpp.cpp

        Routine:
        void UTFT::InitLCD(byte orientation)

        Replace with:
        void UTFT::InitLCD(byte orientation, byte rotate, byte mirror)
        —————————————————————————-
        File:
        \UTFT\UTFT.cpp.cpp

        (New) Routine:
        void UTFT::InitLCD(byte orientation, byte rotate, byte mirror)

        Locale:
        orient=orientation;

        Add:
        rotate_byte=rotate;

        mirror_byte=mirror;
        —————————————————————————-
        File:
        \UTFT\UTFT.cpp.cpp

        Routine:
        void UTFT::setXY(word x1, word y1, word x2, word y2)

        Locale (Remove):
        if (orient==LANDSCAPE & rotate_byte==NORMAL)
        {
        swap(word, x1, y1);
        swap(word, x2, y2);
        y1=disp_y_size-y1;
        y2=disp_y_size-y2;
        swap(word, y1, y2);
        }

        Replace with:
        if (orient==LANDSCAPE & rotate_byte==NORMAL)
        {
        swap(word, x1, y1);
        swap(word, x2, y2);
        y1=disp_y_size-y1;
        y2=disp_y_size-y2;
        swap(word, y1, y2);
        }
        else if (orient==LANDSCAPE & rotate_byte==ROTATE)
        {
        swap(word, x1, y1);
        swap(word, x2, y2);
        x1=disp_x_size-x1;
        x2=disp_x_size-x2;
        swap(word, x1, x2);
        }
        else if (orient==PORTRAIT & rotate_byte==ROTATE)
        {
        x1=disp_x_size-x1;
        x2=disp_x_size-x2;
        y1=disp_y_size-y1;
        y2=disp_y_size-y2;
        swap(word, x1, x2);
        swap(word, y1, y2);
        }
        —————————————————————————-
        File:
        \UTFT\UTFT.h

        Routine:
        void InitLCD(byte orientation=LANDSCAPE);

        Replace with:
        void InitLCD(byte orientation=LANDSCAPE, byte rotate=NORMAL, byte mirror=NORMAL);
        —————————————————————————-
        File:
        \UTFT\UTFT.h

        (New) Routine:
        void InitLCD(byte orientation=LANDSCAPE, byte rotate=NORMAL, byte mirror=NORMAL);

        Locale:
        #define PORTRAIT 0
        #define LANDSCAPE 1

        Add:
        #define NORMAL 0
        #define ROTATE 1
        #define MIRROR 1
        —————————————————————————-
        File:
        \UTFT\UTFT.h

        Locale:
        byte orient;

        Add:
        byte rotate_byte;
        byte mirror_byte;
        —————————————————————————-
        File:
        \UTFT\tft_drivers\spfd5408a\initlcd.h

        Locale (Remove):
        LCD_Write_COM_DATA(0x03,0x1030);

        Replace with:
        if (mirror_byte==NORMAL)
        {
        if (orient==LANDSCAPE & rotate_byte==NORMAL)
        {
        LCD_Write_COM_DATA(0x03,0x1030); // Original: 0x1030 AM=”0″ Horizontal Update ID[1:0] = “11” H: increment V: increment
        }
        else if (orient==LANDSCAPE & rotate_byte==ROTATE)
        {
        LCD_Write_COM_DATA(0x03,0x1010); // 0x1010 AM=”0″ Horizontal Update ID[1:0] = “01” H: decrement V: increment
        }
        else if (orient==PORTRAIT & rotate_byte==ROTATE)
        {
        LCD_Write_COM_DATA(0x03,0x1000); // 0x1000 AM=”0″ Horizontal Update ID[1:0] = “00” H: decrement V: decrement
        }
        else // (orient==PORTRAIT & rotate_byte==NORMAL)
        {
        LCD_Write_COM_DATA(0x03,0x1030); // Original: 0x1030 AM=”0″ Horizontal Update ID[1:0] = “11” H: increment V: increment
        }
        }
        else // (mirror_byte==MIRROR)
        {
        if (orient==LANDSCAPE & rotate_byte==NORMAL)
        {
        LCD_Write_COM_DATA(0x03,0x1000); // 0x1000 AM=”0″ Horizontal Update ID[1:0] = “00” H: decrement V: decrement
        }
        else if (orient==LANDSCAPE & rotate_byte==ROTATE)
        {
        LCD_Write_COM_DATA(0x03,0x1030); // Original: 0x1030 AM=”0″ Horizontal Update ID[1:0] = “11” H: increment V: increment
        }
        else if (orient==PORTRAIT & rotate_byte==ROTATE)
        {
        LCD_Write_COM_DATA(0x03,0x1010); // 0x1010 AM=”0″ Horizontal Update ID[1:0] = “01” H: decrement V: increment
        }
        else // (orient==PORTRAIT & rotate_byte==NORMAL)
        {
        LCD_Write_COM_DATA(0x03,0x1020); // 0x1020 AM=”0″ Horizontal Update ID[1:0] = “10” H: increment V: decrement
        }
        }
        —————————————————————————-
        Boa sorte!

  49. Eduardo - 20 de julho de 2015

    Pessoal,
    Tenho mais uma dúvida com relação ao display.
    Existe alguma forma de fazer a transição entre as imagem serem mais rápidas?

    Eduardo

    • FILIPEFLOP - 21 de julho de 2015

      Bom dia Eduardo,

      Desconheço, mas talvez se você utilizar alguma outra biblioteca com um algoritmo mais enxuto, melhore um pouco. Não analisei ainda se o gargalo está no controlador do display ou no Arduino, mas se você puder, teste o seu projeto com um Arduino Mega, que tem clock de 16MHz.

      Uma solução que pode ajudar, dependendo do seu projeto, é atualizar apenas a parte da tela que você precisa, e não a tela inteira.

      Abraço

      Adilson – Equipe FILIPEFLOP

      • Robson - 22 de julho de 2015

        Ao que tudo indica, a limitação está no Arduino, já que no datasheet do controlador do display, na pag 28/194 menciona-se uma taxa de frame de 60Hz, assim, o Arduino não tem velocidade o suficiente para operar nesta velocidade, na pag 30/194, é citado um tempo mínimo de 2ns para os sinais RS,RW to CSB, E hold, 2ns são 500MHz, ou seja, talvez com o DUE seja possível um melhor desempenho, ainda assim longe de ser o ideal. Talvez seja possível utilizar um controlador de LCD de monitor para poder rodar vídeos neste LCD.

    • Robson - 23 de julho de 2015

      Encontrei algo relacionado com o problema do Eduardo e o meu, velocidade e orientação:

      http://misc.ws/2013/11/08/touch-screen-shield-for-arduino-uno/

      Boa sorte!

  50. Eduardo - 18 de julho de 2015

    Ola Pessoal,
    Alguém sabe com fazer para rotacionar as uma determinada informação na tela deste display?
    Por exemplo: todo o meu projeto esta aparecendo no display de forma vertical, mas as informações dos sensores de temperatura estão aparecendo na horizontal.
    Abraço.

  51. Jose Carlos - 8 de junho de 2015

    Para que serve o botão na frete do display? Já vi sem. Obrigado

  52. Eramis - 18 de maio de 2015

    Alguém ainda está com o display espelhado? Estive com esse problema e consegui resolver.

    • Anderson - 31 de maio de 2015

      Olá…

      Estou como meu espelhado, como resolver?

      Obrigado.

      • Robson - 24 de julho de 2015

        Olá,

        Eu estava tentando rotacionar a tela e consegui deixar a imagem espelhada, para isso, lá na pasta \UTFT\tft_drivers\spfd5408a tem um arquivo chamado initlcd.h

        Neste arquivo tem todos o setup inicial do LCD, inclusive sobre o modo de varredura do endereçamento do LCD, na linha:

        LCD_Write_COM_DATA(0x03,0x1030);

        Se vc for lá no datasheet do LCD, na pág 46/194 tem toda tabela de instruções.
        Note que na linha mencionada acima, é feito um endereçamento para a posição 0x03 e com valor 0x1030.

        Esse valor 0x1030 em binário (usando a calc em modo programador) fica com valor 1000000110000 e podemos notar com a ajuda do datasheet, na tabela 28, que o endereço de Reg.No para 0x03 tem bits de nome BGR ID1 e ID0 que batem com a posição que está com valor binário 1.

        Com isso, na pag 58/194 temos o descritivo dos bits ID1 e ID0, que atuam na varredura da tela, em conjunto com o bit AM.

        Resumindo, para deixar espelhado ou não, basta mudar o valor de 0x1030 para algo como 0x1020 ou 0x1010 ou 0x1000 isso vai fazer mudança nos bits:

        0x1030 = 1000000110000
        0x1020 = 1000000100000
        0x1010 = 1000000010000
        0x1000 = 1000000000000

        Ou seja o valor de ID1, ID0 e AM pode fazer o lcd mostrar espelhado.

        Leiam sempre o datasheet, de qualquer coisa, mesmo que seja banal como um LM35, tem muitos detalhes que podem ajudar muito, talvez até para um projeto futuro!

        Boa sorte!

  53. Rodrigo Cintra - 7 de maio de 2015

    Utilizando desse dispositivo quais portas ficam livres para uso no arduino Uno?

    Abraços
    Rodrigo Cintra

  54. iury - 5 de maio de 2015

    Olá! resolvi o problema da tela branca com essa lib : https://github.com/samuraijap/TFTLCD-Library

    carreguei o exemplo graphicstest e rodou numa boa !

    espero ter ajudado . valeu !

  55. iury - 5 de maio de 2015

    Ola !Comprei o display aqui no FlipFlop mas estou com o defeito da tela branca. o programa compila devidamente , mas a tela do display so fica branca ! alguém já conseguiu resolver esse problema??

  56. Mateus Paes - 28 de abril de 2015

    Boa Tarde.

    Gostaria de saber se é possível Utilizar o TouchScreen, pois pelas fotos este display não contem os pino YP YM XP e XM, alguém poderia responder?

  57. marcio - 27 de abril de 2015

    A IDE não encontra o SWTFT.h

    Arduino: 1.6.3 (Windows 8.1), Placa:”Arduino Uno”
    graphicstest.pde:9:48: fatal error: SWTFT.h: No such file or directory
    compilation terminated.
    Erro compilando.

    Fiz o download e descompactei na pasta ‘libraries’, conforme indicado.
    O que devo fazer para resolver esse problema?

  58. RSousa - 23 de abril de 2015

    Boa dia, Tal como o exemplo tenho um arduino uno+tft2.4 e funciona como terminal para outros projetos com arduino (Através do RxTX). Mas gostava tambem que funcionasse como terminal para o raspberry pi2.
    Isto é a informação do terminal raspberry aparecesse no display TFT com arduino ligado por serial.. Existe alguma maneira?

  59. Ijanai Filho - 31 de março de 2015

    Bom dia, como faço para criar um painel de senha no touch screen?

  60. Júnior Áli - 30 de março de 2015

    Boa tarde. É possível utilizar este display com o arduino pro mini?

  61. Rafael Nunes - 30 de março de 2015

    Caros,

    Vocês já tem uma biblioteca mais atual para fazer o display funcionar? Com estas acima nenhum dos 3 exemplos funcionam.

  62. Fabio Bica - 25 de março de 2015

    Pessoal , siga o passo-a-passo deste site https://alselectro.wordpress.com/2014/11/28/touch-screen-tft-shield-for-arduino-uno/ funcionou perfeitamente com os exemplos 1 e 2 do FilipeFlop com a Versão de IDE 1.6.1 no Windows 8.1 32 bits. , Arduino UNO , No exemplo 3 não rolou.

  63. Marco Antonio - 25 de março de 2015

    Olá, boa noite a todos.
    Gostaria de saber qual o procedimento ou programa para calibrar a tela, pois quando teclo nos quadradinhos nada acontece. Só quando teclo em outro canto é que funciona. A tela está descalibrada?

    Aguardo resposta.

    Grato

  64. FELIPE - 16 de março de 2015

    Testei todos os exemplos e funcionaram corretamente no Uno, porém no Mega 2560 nao consegui acessar o SD Card, testei varios pinos no #define SD_CS e nenhum funciona, alguem tem uma solução para o Mega acessar o SD Card? no Uno com o pin 10 funcionou corretamente.

  65. Marcelo - 4 de março de 2015

    Pessoal,

    Segue o link que publiquei com a biblioteca que fiz funcionar o shields novos: https://www.dropbox.com/s/7awgywjbngx71df/UTFT.rar?dl=0
    Não precisa modificar nada no exemplo que está na biblioteca, siga as instruções que coloquei no arquivo README.TXT.
    Funciona tanto para ARDUINO UNO quanto a MEGA sem a necessidade de modificações.

    • Marcelo - 4 de março de 2015

      Aguardo respostas…

    • Yves - 4 de março de 2015

      Oi Marcelo, tudo bem??

      Estou testando aqui, mas ta rolando erro com o arquivos das “fonts”. Segue detalhe do erro

      Arduino: 1.6.0 (Windows 8), Board: “Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)”

      C:\Program Files (x86)\Arduino\libraries\UTFT\DefaultFonts.c:21:14: error: variable ‘SmallFont’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
      fontdatatype SmallFont[1144] PROGMEM={

      ^
      C:\Program Files (x86)\Arduino\libraries\UTFT\DefaultFonts.c:125:14: error: variable ‘BigFont’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
      fontdatatype BigFont[3044] PROGMEM={

      ^
      C:\Program Files (x86)\Arduino\libraries\UTFT\DefaultFonts.c:234:14: error: variable ‘SevenSegNumFont’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
      fontdatatype SevenSegNumFont[2004] PROGMEM={

      ^
      Error compiling.

      This report would have more information with
      “Show verbose output during compilation”
      enabled in File > Preferences.

      • Marcelo - 4 de março de 2015

        Yves, executa o arduino como administrador.
        Eu estou rodando essa biblioteca e pelo erro é algum parâmetro do seu arduino ou permissão de acesso.

        • Yves - 4 de março de 2015

          Fala Marcelo,

          Eu adicionei um const à frente do fontdatatype no arquivo defaultfonts.c, mas não teve resposta…compilou mas manteve a tela branca.

          Rodei tambem como adm e deixei sem o const, mas novamente não compilou.

          • Marcelo - 4 de março de 2015

            Yves, você não deveria ter modificado o arquivo Defaultfonts.c.
            Seguiu a imagem conforme anexada no arquivo?

    • Yves - 4 de março de 2015

      Segui sim cara..nao foi de jeito nenhum..

      Sera a IDE?? to com a 1.0.6

    • Eduardo Pungilo - 4 de março de 2015

      Marcelo, tudo bem?

      Primeiramente obrigado pela ajuda. Foi de grande valor!!
      Fiz conforme você orientou e está funcionando agora… muito obrigado mesmo!

      Teste feito com o Arduino UNO, depois vou testar com o NANO. Após os testes vou postar o resulstado.

      Só gostaria de pedir um favor. Você tem algum exemplo para o touch e bitmap com esse programa que está rodando?

      abraço!

      • Marcelo - 4 de março de 2015

        Tudo bom Eduardo.
        Amanhã eu disponibilizo os dois exemplos que pediu, tudo bem?

        • Cristiano - 5 de março de 2015

          Marcelão, consegui baixar via dropbox, não sei o pq não tava conseguindo na hora…mas funcionou depois….baixei e segui as tuas orientações, funcionou que é uma blz…. provavelmente o código fonte do blog, talvez nem esteja errado, pode ser algo nas bibliotecas que baixamos, pq o código se compilava e não dava erro, as funções das bibliotecas até podiam estar com a sintaxe correta, agora se funcionavam???? ninguém sabe rssssss.

          Já tava achando que o display tinha defeito….mas com essas bibliotecas que mostrou e o exemplo…já da pra começar a fazer algo….

          Valeu…muito obrigado…

          Abraços…..

          Cristiano Closs

          • Marcelo - 5 de março de 2015

            De nada Cristiano, o problema não está nos exemplos do post e sim nas bibliotecas que não são compatíveis com a versão do SHIELD atual.
            Qualquer coisa estamos ai

          • FILIPEFLOP - 7 de março de 2015

            Boa tarde Cristiano,

            Realmente os códigos do blog e as bibliotecas não estão erradas, pois foram testadas antes da publicação, inclusive as fotos que acompanham o post são do circuito em funcionamento.

            Vamos verificar as informações disponibilizadas pelo Marcelo e providenciar a atualização do artigo.

            Abraço.

            Adilson – Equipe FILIPEFLOP

        • Eduardo Pungilo - 6 de março de 2015

          Olá Marcelo,

          Você você consegue disponibilizar os dois exemplos?
          Para Bitmap e touch.

        • Eduardo Pungilo - 8 de março de 2015

          Olá Marcelo, tudo bem?

          Aqueles exemplos para touch e bitmap você consegue disponibilizar?
          Estou tentando fazer aqui, mas não achei informação dos pinos do touch. São os mesmos?

          abraço,

          Eduardo

          • Marcelo - 9 de março de 2015

            Olá Eduardo,

            Estou um pouco atarefado com o trabalho e não consegui montar os exemplos que precisa, mas para utilizar o Touch, use a biblioteca TouchScreen e informe a seguinte pinagem:
            YP A3 // must be an analog pin, use “An” notation!
            XM A2 // must be an analog pin, use “An” notation!
            YM 9 // can be a digital pin
            XP 8 // can be a digital pin
            No meu caso funcionou perfeitamente.
            Abraços

        • Eduardo Pungilo - 15 de março de 2015

          Boa tarde Marcelo!

          Bom, São duas coisas.
          Primeiro: Os testes com o Arduino Nano Funcionaram Perfeitamente.
          Segundo: Agradeço pela pinagem do Touch mas até agora não consegui fazer funcionar.
          Se puder enviar aqueles exemplos eu agradeço.

          Abraço,

          • Marcelo - 16 de março de 2015

            Eduardo,

            Me desculpa por estar devendo os exemplos, mas o se você baixou a biblioteca TouchScreen e usar a pinagem que passei funcionará sem problemas.
            Encontrei a biblioteca SWTFT que funcionou com estes shields, vou disponibilizar até amanhã se possível.

    • Felipe - 6 de março de 2015

      Marcelo,

      Tenho um display Touch 3.5″ + SD, com o controlador ili9327. Sabe me dizer se esta biblioteca também funciona pra ele?

      Obrigado!

    • Paulo - 14 de março de 2015

      Não funcionou

      Arduino: 1.6.0 (Windows 8), Placa:”Arduino Uno”

      C:\Program Files (x86)\Arduino\libraries\UTFT\DefaultFonts.c:21:14: error: variable ‘SmallFont’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
      fontdatatype SmallFont[1144] PROGMEM={

      ^
      C:\Program Files (x86)\Arduino\libraries\UTFT\DefaultFonts.c:125:14: error: variable ‘BigFont’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
      fontdatatype BigFont[3044] PROGMEM={

      ^
      C:\Program Files (x86)\Arduino\libraries\UTFT\DefaultFonts.c:234:14: error: variable ‘SevenSegNumFont’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
      fontdatatype SevenSegNumFont[2004] PROGMEM={

      ^
      Erro compilando.

      Este relatório deveria ter mais informações
      “Mostrar saída verbosa durante a compilação”
      habilitado em Arquivo > Preferências.
      nou.

  66. Cristiano - 3 de março de 2015

    Estou com o mesmo problema…tela branca o tempo todo…..display não funciona, fui olhar o fabricante, códigos exemplos fora do ar. mas fui conferir o esquemático…encontrei algo diferente,….. devo seguir a pinagem aqui do felipeflop? ou do fabricante mcufriend?

    Preciso de uma certa urgência…. pois tenho que entregar um projeto e comprei esse display….

    Abraços…..

    • Eduardo Pungilo - 4 de março de 2015

      Cristiano, tudo bem?
      O que você encontrou de diferente no esquemático deste LCDTFT?
      Também tenho urgência nesta solução, pois o meu prazo vai começar a ficar apertado.

      att,

      Eduardo

      • Cristiano - 4 de março de 2015

        Nada de mais…. só um erro de serigrafia…. bati pino a pino….. e não faz difereça…. a pinagem da placa está igual a do UNO…..

        Já liguei pra Felipeflop e até agora nenhuma solução….tbm estou com prazo muito apertado…. os dois display’s que comprei ficam com a tela branca…já coloquei várias armadilhas, para ver se em alguma parte do prog exemplo fica em loop e passou por todas, o pograma roda, até o momento sem problema, só que o display não funciona, estou começando a chegar a essa conclusão….to pesquisando em vários foruns e ver se encontro algo…se eu descobrir coloco aqui….ou melhor….se alguém achar….colocar aqui….pq até agora, alguma resposta do pessoal do blog…nada…..

        • FILIPEFLOP - 7 de março de 2015

          Boa tarde Cristiano,

          Parece ser algum problema com o controlador do display. Estamos verificando as alternativas e fazendo os testes para atualizar o post.

          Abraço.

          Adilson – Equipe FILIPEFLOP

    • Marcelo - 4 de março de 2015

      Senhores, consegui testar e verificar que o shield funciona, porém o problema está no chipset desses novos shields que não são os ST7781 e sim os SPFD5408A. A má notícia que esses shields não funcionam com a biblioteca disponibilizada aqui.
      Realizei os testes em uma Arduino MEGA, quem puder testar na UNO será de grande valia, vou publicar a biblioteca e posto aqui.

    • FILIPEFLOP - 7 de março de 2015

      Boa tarde Cristiano,

      Parece ser algum problema com o controlador do display. Estamos verificando as alternativas e fazendo os testes para atualizar o post.

      Abraço.

      Adilson – Equipe FILIPEFLOP

  67. Marcelo Zurita - 27 de fevereiro de 2015

    Utilizando esse shield no arduino uno, quantos pinos de I/O ficarão disponíveis para outros usos? E no Mega?

  68. Eduardo Pungilo - 27 de fevereiro de 2015

    Boa tarde!
    Recebi esse display na data de ontem e até agora não consegui fazer funcionar.

    carreguei os três programas exibidos neste site e nenhum deles funcionou. A tela do LCD TFT fica totalmente branca.

    Alguém jã passou por este tipo de “problema”?

    Estou utilizando o Arduino UNO R3.

    • Marcelo Nakazaki - 27 de fevereiro de 2015

      Eduardo, recebi a minha tela hoje, e também estou com o mesmo problema e utilizo a Arduino MEGA 2560.
      Esse shield é diferente do anterior que adquiri no começo do ano e não funcionou como a anterior.

    • Luis Antonio Silva - 1 de março de 2015

      Boa noite, pessoal !

      Também estou com este problema. Nada aparece na tela.
      O programa que usa o touchscreen funciona mostrando as coordenadas e pressão exercida sobre a tela através da janela Serial, mas nada de imagem !!
      Já instalei e reinstalei as bibliotecas, mas não consegui fazer funcionar ainda.
      Será problema de hardware ou software ?

      • FILIPEFLOP - 7 de março de 2015

        Boa tarde Luis,

        Parece ser algum problema com o controlador do display. Estamos verificando as alternativas e fazendo os testes para atualizar o post.

        Abraço.

        Adilson – Equipe FILIPEFLOP

    • FILIPEFLOP - 7 de março de 2015

      Boa tarde Eduardo,

      Parece ser algum problema com o controlador do display. Estamos verificando as alternativas e fazendo os testes para atualizar o post.

      Abraço.

      Adilson – Equipe FILIPEFLOP

  69. Filipe - 26 de fevereiro de 2015

    Ola comprei faz poucas horas o display fui testar mais nao reconhece as bibliotes como a do nosso amigo ai em cima. minha ID eh 1.0.6 o que fazer?

    • Renato - 26 de fevereiro de 2015

      Tive esses mesmos problemas, e só resolvi quando organizei as bibliotecas no diretório “C:\Users\lobosoft\Documents\Arduino\libraries” no meu caso Windows 7, procurei colocar todas as bibliotecas agrupadas com as mesmas são chamadas pelo código. Antes as bibliotecas estavam junto com o código principal ai não deu certo. se ainda persistir os erros tente fazer o mesmo que eu fiz. Só falta agora eu conseguir o mesmo com a placa MEGA. Não consigo rodar o programa de bitmap, acho que tem alguma alteração pra fazer na biblioteca Sd.h. Quem sabe alguém já passou por isso e da uma ajudinha…

      • Luis Antonio Silva - 2 de março de 2015

        Renato, coloquei as bibliotecas conforme orientaram e o Arduino compila sem erro algum, mas até agora não funcionou!
        De duas, uma: ou é software ou hardware.
        Aparentemente o display funciona apenas coma função touch, mas nada de imagem, mesmo verificando no Serial Monitor que o programa está rodando normalmente sem erros.
        No programa exemplo da função touch, consigo ver as coordenadas X e Y de onde pressiono a tela.
        Alguém tem alguma sugestão do que fazer para fazer funcionar esta tela ?
        Ainda tenho esperança de não ter perdido meu tempo nem meu dinheiro com esta tela …

        • Renato - 2 de março de 2015

          Pois é Luiz, o Software está correto para o Arduino UNO, pois já testei e funcionou, já com o Arduino MEGA não tive o mesmo resultado com as imagens bmp, simplesmente a tela fica cintilando. Penso que as bibliotecas não estão ajustadas para Arduino MEGA. Gostaria de saber se alguém já conseguiu fazer funcionar. Como saber agora se a tela tem defeito, no seu caso né? Aguardando ai alguma ajuda de quem mais entende…

  70. Renato - 23 de fevereiro de 2015

    Alguém já usou o display com o Funduino MEGA 2560, eu não consegui funcionar o exemplo 3 com o cartão, todos os outros dois exemplos funcionaram. Fiz a alteração no arquivo como pede a instrução e nada. Será que tem mais algo a alterar na biblioteca SD.h? A propósito no Arduino UNO funcionou perfeitamente todos os tres exemplos.Obrigado.

    • FILIPEFLOP - 7 de março de 2015

      Boa tarde Renato,

      Testamos esse display com o Arduno Uno e o Arduino Mega, sem problemas.

      Abraço.

      Adilson – Equipe FILIPEFLOP

      • FELIPE - 12 de março de 2015

        Testei todos os exemplos e funcionaram corretamente no Uno, porém no Mega 2560 nao consegui acessar o SD Card, testei varios pinos no #define SD_CS e nenhum funciona, alguem tem uma solução para o Mega acessar o SD Card? no Uno com o pin 10 funcionou corretamente.

  71. Renato - 23 de fevereiro de 2015

    Alguém conectou o display numa placa Mega Funduino. Fiz a alteração do arquivo SWTFT.cpp e mesmo assim não funcionou. Será que tem mais alguma alteração a fazer. No manual diz que totalmente compatível com Arduino UNO, mas não funcionou. Grava sem nenhum erro porém fica tremendo a tela sem imagem no exemplo 3. Será preciso alterar alguma coisa na biblioteca do SD.h, pois, funciona perfeitamente nos outros dois exemplos. Obrigado desde já.

  72. Jefferson Deschamps - 11 de fevereiro de 2015

    Olá, tenho duas dúvidas. 1 – o exemplo para ler bitmap não funciona no meu, ele da erro de leitura no cartão. 2- você tem uma tabela com as cores da tela? nos exemplos só há aquelas 8 cores.

    • FILIPEFLOP - 21 de fevereiro de 2015

      Bom dia Jefferson,

      Provavelmente o erro está relacionado ao tamanho do arquivo ou ao formato, tente gravar o bitmap usando um programa diferente. Quanto às cores, por favor dê uma olhada nesse link :

      http://wiibrew.org/wiki/U16_colors

      Abraço.

      Adilson – Equipe FILIPEFLOP

    • Renato - 26 de fevereiro de 2015

      u16 code color

      0x0000 Black
      0xFFFF White
      0xBDF7 Light Gray
      0x7BEF Dark Gray
      0xF800 Red
      0xFFE0 Yellow
      0xFBE0 Orange
      0x79E0 Brown
      0x7E00 Green
      0x7FF0 Cyan
      0x1F00 Blue
      0xF81F Pink

      Achei essa informação, não sei se é o suficiente 12 cores. Acho que essas são as cores primárias, não testei ainda, mas, deve haver alguma variação entre elas.

  73. Pedro - 5 de fevereiro de 2015

    Ola, meu programa nao reconhece as bibliotecas. Coloquei da forma convencional , e não resolveu.

  74. Leo Puena - 3 de fevereiro de 2015

    Há alguma biblioteca que permite mostrar palavras acentuadas?

  75. Renato - 30 de janeiro de 2015

    Será que alguém já fez funcionar o diplay Display Touch Arduino Shield de 2,4″ e pode me ajudar?
    Já instalei as bibliotecas na IDE e elas aparecem no menu.
    Estou com um problema no arquivo “glcdfont.c” quando compilo na IDE do Arduino aparece a seguinte mensagem:

    Arduino: 1.5.8 (Windows 7), Placa:”Arduino Uno”

    Adafruit_GFX.cpp:31:22: fatal error: glcdfont.c: No such file or directory
    #include “glcdfont.c”
    ^
    compilation terminated.
    Erro compilando.

    Este relatório deveria ter mais informações
    “Mostrar saída verbosa durante a compilação”
    habilitado em Arquivo > Preferências.

    Desde já agradeço
    Renato Lobo Rodrigues

    • FILIPEFLOP - 3 de fevereiro de 2015

      Boa noite Renato,

      Você consegue utilizar a versão 1.0.6 da IDE do Arduino ?

      Grato.

      Adilson – Equipe FILIPEFLOP

      • Renato - 4 de fevereiro de 2015

        Obrigado pela Resposta. Não sei como conseguir essa versão 1.0.6 porque no site só tem downlod até 1.0.5. será que essa serve? as mais atuais são BETA como a minha instalação, vai até 1.5.7. A minha pergunta hoje seria: Pra onde copio o arquivo glcdfont.c porque a IDE não acha o mesmo no diretório library.

        • Alessandro - 8 de fevereiro de 2015

          Verifique se a pasta extraída tem outra pasta destro.
          Tive problema com isso e também com a nomenclatura das pastas, tive que tirar o “-” e substituir por “_”

          • Renato - 8 de fevereiro de 2015

            Obrigado pela ajuda. Não sei como resolver isso já tentei de tudo agora vou seguir seu conselho. Outra coisa que também não entendo. Tenho que copiar os arquivos, salvar e compactar, pois não consigo baixar no formato zip como diz na instrução do site.

        • FILIPEFLOP - 21 de fevereiro de 2015

          Bom dia Renato,

          Você encontra a versão 1.0.6 nesse link :

          http://arduino.cc/en/Main/OldSoftwareReleases

          Abraço !

          Adilson – Equipe FILIPEFLOP

          • Renato - 21 de fevereiro de 2015

            Desisnstalei a minha versão mais nova do Ariduino e Já instalei a IDE 1.0.6 e nada!!!!! continua dando o erro. veja:
            Onde eu coloco o arquivo “glcdfont.c” porque o compilador não acha ele na pasta.

            This report would have more information with
            “Show verbose output during compilation”
            enabled in File > Preferences.
            Arduino: 1.0.6 (Windows 7), Board: “Arduino Uno”
            C:\Users\lobosoft\Documents\Arduino\libraries\Adafruit_GFX\Adafruit_GFX.cpp:35:22: error: glcdfont.c: No such file or directory
            C:\Users\lobosoft\Documents\Arduino\libraries\Adafruit_GFX\Adafruit_GFX.cpp: In member function ‘void Adafruit_GFX::drawChar(int16_t, int16_t, unsigned char, uint16_t, uint16_t, uint8_t)':
            C:\Users\lobosoft\Documents\Arduino\libraries\Adafruit_GFX\Adafruit_GFX.cpp:444: error: ‘font’ was not declared in this scope

          • Renato - 21 de fevereiro de 2015

            Muito Obrigado….. Consegui rodar os três exemplos com sucesso!!!

  76. Marcelo - 28 de janeiro de 2015

    Comprei este shield mas gostaria de saber oq preciso fazer para funcionar em uma Arduino Mega.

    • FILIPEFLOP - 3 de fevereiro de 2015

      Boa noite Marcelo,

      Atualizamos o post com informações sobre como utilizar o shield com Arduino Mega. Isso exige apenas uma pequena alteração na biblioteca.

      Abraço.

      Adilson – Equipe FILIPEFLOP

  77. Mangili - 24 de janeiro de 2015

    Se eu n incluir a biblioteca do SD, quais pinos eu poderei usar para outro uso?

  78. Mangili - 24 de janeiro de 2015

    Tem como usar essa tela em conjunto com o modulo “Estrutura do módulo I2C” para ter mais pinos disponíveis?

Deixe uma resposta