Índice:
- Suprimentos
- Etapa 1: formate o cartão SD
- Etapa 2: preparar o Arduino
- Etapa 3: Arduino Sketch
- Etapa 4: usando este programa
Vídeo: Programa de desenho Arduino TFT: 4 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:35
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
- Arduino Uno - original ou um clone compatível
- Touchscreen TFT - usei uma tela Elegoo, o que significa que precisava de drivers Elegoo.
- Placa de leitor Micro SD - usada para armazenar dados de desenho no cartão SD. Minha tela tinha um leitor embutido embaixo da tela.
- Stylus - minha tela veio com uma. As unhas também funcionam bem.
- 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.
- Computador com IDE Arduino
- Cabo de programação - USB A para USB B. Meu Arduino veio com um.
- 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
- Pegue o cartão Micro SD e conecte-o ao seu computador usando o leitor de cartão SD
- Abra o Explorador de Arquivos e encontre o cartão SD.
- Clique com o botão direito e selecione Formatar.
- Defina as opções com base na captura de tela.
- Clique em Iniciar.
- 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
- Pressione o escudo da tela para baixo no Arduino, tomando cuidado para alinhar os pinos.
- 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,
- Atualize as variáveis de posição com os dados analisados de storage.txt
- 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
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:
- Conecte o cartão SD com dados em seu computador.
- Abra storage.txt em seu editor de texto / código favorito.
- Copie todos os valores em storage.txt.
- Siga este link para um programa de plotagem de pontos.
- Exclua os dois pontos de exemplo à esquerda.
- 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:
Usando um robô de desenho para Arduino com tutoriais de hora de código: 3 etapas
Usando um robô de desenho para Arduino com tutoriais do Hour of Code: Eu criei um robô de desenho Arduino para um workshop para ajudar meninas adolescentes a se interessarem por tópicos STEM (consulte https://www.instructables.com/id/Arduino-Drawing-Robot/ ) O robô foi projetado para usar comandos de programação no estilo tartaruga, como avançar (distanc
Robô de desenho para Arduino: 18 etapas (com imagens)
Robô de desenho para Arduino: Nota: Eu tenho uma nova versão deste robô que usa uma placa de circuito impresso, é mais fácil de construir e tem detecção de obstáculo IR! Confira em http://bit.ly/OSTurtleEu desenvolvi este projeto para um workshop de 10 horas para ChickTech.org cujo objetivo é i
Plotter Arduino CNC (MÁQUINA DE DESENHO): 10 etapas (com fotos)
Plotter Arduino CNC (MÁQUINA DE DESENHO): Olá, pessoal! Espero que você já tenha gostado do meu instrutivo anterior " Como fazer sua própria plataforma de treinamento Arduino " e você está pronto para um novo, como sempre fiz este tutorial para guiá-lo passo a passo enquanto torna este tipo de super incrível
Robô de desenho de baixo custo compatível com Arduino: 15 etapas (com imagens)
Robô de desenho de baixo custo compatível com o Arduino: Observação: tenho uma nova versão desse robô que usa uma placa de circuito impresso, é mais fácil de construir e tem detecção de obstáculos por infravermelho! Confira em http://bit.ly/OSTurtleEu desenvolvi este projeto para um workshop de 10 horas para ChickTech.org cujo objetivo é i
Máquina de desenho CNC Arduino (ou o caminho para o sucesso): 10 etapas (com imagens)
Máquina de desenho CNC Arduino (ou o caminho para o sucesso): Este projeto é baseado principalmente em itens fáceis de encontrar. A ideia é pegar duas unidades de disco de computador não utilizadas e combiná-las para criar uma máquina de desenho automatizada que se assemelha a uma máquina CNC. As peças usadas fora das unidades incluem o mo