Índice:

Programa de desenho Arduino TFT: 4 etapas
Programa de desenho Arduino TFT: 4 etapas

Vídeo: Programa de desenho Arduino TFT: 4 etapas

Vídeo: Programa de desenho Arduino TFT: 4 etapas
Vídeo: COMO UTILIZAR O DISPLAY TOUCHSCREEN SHIELD LCD TFT 2.4'' COM ARDUINO 2024, Julho
Anonim
Programa de desenho Arduino TFT
Programa de desenho Arduino TFT
Programa de desenho Arduino TFT
Programa de desenho Arduino TFT
Programa de desenho Arduino TFT
Programa de desenho Arduino TFT

Isso detalha o código usado para fazer um programa de desenho para uma tela TFT do Arduino. Este programa é único, no entanto, porque permite salvar um desenho no cartão SD e carregá-lo posteriormente para fazer mais edições!

Suprimentos

  1. Arduino Uno - original ou um clone compatível
  2. Touchscreen TFT - usei uma tela Elegoo, o que significa que precisava de drivers Elegoo.
  3. Placa de leitor Micro SD - usada para armazenar dados de desenho no cartão SD. Minha tela tinha um leitor embutido embaixo da tela.
  4. Stylus - minha tela veio com uma. As unhas também funcionam bem.
  5. Cartão Micro SD - não mais que 32 GB, devido às limitações de formatação exFAT (O Arduino pode ler cartões formatados em FAT32, mas NÃO em exFAT. A maioria dos cartões maiores são formatados com exFAT.). Esse é o tipo que você colocaria em um telefone com armazenamento expansível.
  6. Computador com IDE Arduino
  7. Cabo de programação - USB A para USB B. Meu Arduino veio com um.
  8. Adaptador de cartão SD - usado para converter o cartão Micro SD em um SD normal para colocar no slot SD OU um que conecte um cartão SD a um slot USB.

Etapa 1: formate o cartão SD

Formate o cartão SD
Formate o cartão SD
Formate o cartão SD
Formate o cartão SD
  1. Pegue o cartão Micro SD e conecte-o ao seu computador usando o leitor de cartão SD
  2. Abra o Explorador de Arquivos e encontre o cartão SD.
  3. Clique com o botão direito e selecione Formatar.
  4. Defina as opções com base na captura de tela.
  5. Clique em Iniciar.
  6. Ejete o cartão quando o processo for concluído.

Se você não estiver executando o Windows, tente usar o SD Formatter da associação SD.

Etapa 2: preparar o Arduino

Prepare o Arduino
Prepare o Arduino
Prepare o Arduino
Prepare o Arduino
  1. Pressione o escudo da tela para baixo no Arduino, tomando cuidado para alinhar os pinos.
  2. Insira o cartão SD no leitor abaixo da tela.

Etapa 3: Arduino Sketch

Embora a lista de peças seja bem simples, há uma tonelada de código. Vou passar por isso passo a passo aqui.

#incluir

#include #include #include #include

Elegoo_GFX, _TFTLCD e TouchScreen são todos específicos do hardware. Se você usar uma tela diferente, use as bibliotecas fornecidas pelo fabricante.

SPI e SD são usados para se comunicar com o cartão SD. SPI é o protocolo usado pelo controlador do cartão SD.

#if definido (_ SAM3X8E _) # undef _FlashStringHelper:: F (string_literal) #define F (string_literal) string_literal #endif

Isso também é específico do hardware.

# define YP A3 // deve ser um pino analógico # define XM A2 // deve ser um pino analógico # define YM 9 # define XP 8

// Toque para novo ILI9341 TP

#define TS_MINX 120 #define TS_MAXX 900 #define TS_MINY 70 #define TS_MAXY 920

# define CSPIN 10

# define LCD_CS A3

#define LCD_CD A2 #define LCD_WR A1 #define LCD_RD A0 #define LCD_RESET A4

Cada uma dessas instruções #define faz com que o IDE substitua o nome pelo valor. Aqui, eles definem os pinos de E / S de LCD e SD.

// Atribuir nomes a alguns valores de cor de 16 bits: #define BLACK 0x0000 #define WHITE 0xFFFF #define RED 0xF800 #define BLUE 0x001F #define GREEN 0x07E0

Estas são algumas das cores usadas no código. # defini-los torna a leitura do código mais fácil.

# define PENRADIUS 3

Isso define o tamanho da caneta de desenho.

# define MINPRESSURE 10 # define MAXPRESSURE 1000

// Para melhor precisão de pressão, precisamos conhecer a resistência

// entre X + e X- Use qualquer multímetro para lê-lo // Para o que estou usando, seus 300 ohms na placa X TouchScreen ts = TouchScreen (XP, YP, XM, YM, 300);

Elegoo_TFTLCD tft (LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

Essas declarações definem a pressão necessária para registrar um toque, inicializar a função de toque e iniciar a tela.

Armazenamento de arquivos; int storageSize; int stoX = 1; int stoY = 1;

Essas são variáveis para a parte de armazenamento do programa.

configuração de vazio (vazio) {Serial.begin (9600); Serial.println ("Programa de pintura");

tft.reset ();

identificador uint16_t = tft.readID ();

if (identificador == 0x0101) {identificador = 0x9341; Serial.println (F ("Driver 0x9341 LCD encontrado")); }

// Iniciar a tela

tft.begin (identificador); tft.setRotation (2);

pinMode (13, SAÍDA);

// Iniciar o cartão SD

if (! SD.begin (CSPIN)) {Serial.println ("Falha na inicialização do SD"); Retorna; } Serial.println ("SD inicializado");

// Desenhe o fundo

drawBackground (); }

A função de configuração inicia Serial se estiver disponível, redefine a tela, detecta o driver TFT, inicia a tela, inicia o cartão e chama uma função para desenhar o fundo.

Vou pular para a parte principal da função de loop. Todo o resto é usado apenas para acionar a tela sensível ao toque.

// Detectar tela pressionada e armazená-la nas variáveis if (p.z> MINPRESSURE && p.z <MAXPRESSURE) {// Escala p.x = map (p.x, TS_MINX, TS_MAXX, tft.width (), 0); p.y = (tft.height () - mapa (p.y, TS_MINY, TS_MAXY, tft.height (), 0));

//Empate

if (p.y> 21) {// Salvar dados no cartão SD storage = SD.open ("storage.txt", FILE_WRITE); storage.print (p.x); storage.print (","); storage.println (p.y); storage.close ();

// Ponto na posição de toque

tft.fillCircle (p.x, p.y, PENRADIUS, BRANCO); }

// botão Excluir

if ((p.y 198) && (p.x <219)) {deleteStorage (); }

// Carregar ação do botão

if ((p.y 219)) {loadStorage (); }}

Se uma impressora for detectada, defina variáveis para a localização da impressora.

Então, se a impressora estiver dentro da área de desenho, salve o ponto no cartão SD em storage.txt e desenhe um círculo no ponto pressionado, com tamanho e cor definidos.

Em seguida, se a impressora estiver no local do botão de exclusão, execute uma função que exclua o desenho armazenado. Se você estiver usando uma tela de tamanho diferente, tente brincar com os valores de localização do botão.

Então, se a impressora estiver no local do botão carregar, execute uma função que carregue o desenho armazenado. Se você estiver usando uma tela de tamanho diferente, tente brincar com os valores de localização do botão.

Agora, vou explicar as funções.

A primeira função é chamada na configuração para desenhar o plano de fundo e os botões.

void drawBackground () {// Define o plano de fundo tft.fillScreen (BLACK);

// Pintar texto

tft.setTextColor (WHITE); tft.setTextSize (3); tft.setCursor (0, 0); tft.println ("Paint");

// botão Carregar

tft.fillRect (219, 0, 21, 21, VERDE);

// Botão Limpar

tft.fillRect (198, 0, 21, 21, RED); }

Ele preenche a tela de preto, escreve a palavra Paint e desenha quadrados coloridos para os botões. Se você estiver usando uma tela de tamanho diferente, tente brincar com os valores de localização do botão.

void deleteStorage () {// Excluir o arquivo SD.remove ("storage.txt");

// Definir o fundo

tft.fillScreen (PRETO);

// Excluir texto de sucesso

tft.setTextColor (WHITE); tft.setTextSize (2); tft.setCursor (0, 0); tft.println ("storage.txt excluído");

// Deixe o usuário ler

atraso (2000);

// Continue desenhando

drawBackground (); }

A função deleteStorage remove storage.txt, preenche a tela com preto e fornece uma mensagem de sucesso para exclusão. Em seguida, ele chama a função drawBackground para permitir que você comece a pintar outra coisa.

void loadStorage () {// Evita repetições de dedos lentos delay (250);

// Verifique o arquivo de armazenamento

if (! SD.exists ("storage.txt")) {Serial.println ("Nenhum arquivo storage.txt"); Retorna; }

// Abra o arquivo em modo somente leitura

armazenamento = SD.open ("armazenamento.txt", FILE_READ);

// Enquanto houver dados, while (stoY> 0) {// Atualizar variáveis de posição stoX = storage.parseInt (); stoY = storage.parseInt ();

// Desenhe do armazenamento

tft.fillCircle (stoX, stoY, PENRADIUS, BRANCO); } // Fecha o arquivo storage.close (); }

Por fim, a função loadStorage verifica se há um arquivo de armazenamento, abre-o no modo somente leitura e repete este loop:

Enquanto houver mais dados,

  1. Atualize as variáveis de posição com os dados analisados de storage.txt
  2. Desenhe um círculo no ponto carregado

Quando o loop é concluído e não há mais dados, ele fecha o arquivo de armazenamento.

O código para este esboço pode ser encontrado abaixo. Basta fazer o download, abri-lo no Arduino e carregá-lo em sua placa!

Etapa 4: usando este programa

Usando este programa
Usando este programa

Basta conectar o Arduino a uma fonte de alimentação - computador, bateria, verruga de parede etc. e começar a desenhar. Para apagar seu desenho e seus dados armazenados, pressione o botão vermelho. Para carregar um desenho do armazenamento e continuar trabalhando nele, clique no botão verde. Desta forma, você pode iterar várias vezes em um desenho!

Como uma extensão, tente plotar o desenho em seu computador:

  1. Conecte o cartão SD com dados em seu computador.
  2. Abra storage.txt em seu editor de texto / código favorito.
  3. Copie todos os valores em storage.txt.
  4. Siga este link para um programa de plotagem de pontos.
  5. Exclua os dois pontos de exemplo à esquerda.
  6. Cole seus dados onde estavam os pontos de exemplo.

Esta é uma maneira legal de mostrar seus desenhos - talvez até tente mudar a cor do ponto no Arduino ou no plotter de pontos!

Modificações são bem-vindas e eu adoraria ver algumas sugestões nos comentários. Obrigado por dar uma olhada nisso e espero que você encontre usos interessantes para ele em seus próprios projetos!

Recomendado: