Índice:

Como adicionar um visor E-Ink ao seu projeto: 12 etapas (com fotos)
Como adicionar um visor E-Ink ao seu projeto: 12 etapas (com fotos)
Anonim
Como adicionar um display E-Ink ao seu projeto
Como adicionar um display E-Ink ao seu projeto
Como adicionar um display E-Ink ao seu projeto
Como adicionar um display E-Ink ao seu projeto

Muitos projetos envolvem o monitoramento de algum tipo de dado, como dados ambientais, geralmente usando um Arduino para controle. No meu caso, queria monitorar o nível de sal no meu amaciante de água. Você pode querer acessar os dados em sua rede doméstica, mas também pode querer exibi-los onde estão sendo medidos. Ou você pode ter um monitor conectado remotamente sempre ligado em um local mais conveniente.

Existem agora vários tipos de display que você pode usar, todos muito baratos, mas com diferentes vantagens e desvantagens:

  • Um display LCD alfanumérico é o mais barato, mas também o mais limitado.
  • Um display OLED pode exibir gráficos, mas os baratos são muito pequenos. A segunda foto mostra um display OLED de 128x64 pixels ao lado de um E-Ink.
  • Uma tela E-Ink (ou E-Paper) é um pouco maior e, portanto, mais fácil de ler, e tem a vantagem de que a tela é mantida mesmo quando está desligada! Mas leva vários segundos para redesenhar a tela.

O display E-Ink parecia ideal para meu aplicativo, pois eu podia programar o Arduino para acordar apenas a cada poucas horas, fazer uma leitura e exibi-lo antes de voltar a dormir. Então, não tem importância que demore vários segundos para redesenhar a tela.

Em tal aplicação, o consumo médio de corrente pode ser arranjado para ser tão baixo que uma bateria de detector de fumaça de lítio de 9 V pode ser feita para durar 10 anos! Além do mais, alguns desses monitores exibirão três cores: branco, preto e vermelho (ou amarelo). Ideal se você gostaria de exibir um aviso ou alerta em vermelho.

Suprimentos

Os monitores E-Ink mais baratos que encontrei são vendidos pela BuyDisplay, também disponível em muitos vendedores do eBay. Infelizmente, a documentação deixa muito a desejar, então decidi escrever um tutorial - continue lendo!

Dependendo de seus requisitos e seu orçamento, você pode escolher entre vários tamanhos:

  • 1,54 "(152x152 = 23, 104 pixels)
  • 2,13 "(212x104 = 22.048 pixels)
  • 2,6 "(296x152 = 44,992 pixels)
  • 2,7 "(176x264 = 46, 464 pixels)
  • 2,9 "(296 x 128 = 37, 888 pixels)
  • 4,2 "(400x300 = 120.000 pixels)
  • 5,83 "(640x480 = 307, 200 pixels)
  • 7,5 "(880 x 528 = 464, 640 pixels)

(O intervalo aumentou desde a última vez que procurei, então pode ter se expandido ainda mais na época em que você leu isto.)

Eles estão disponíveis em 2 cores (preto / branco) ou 3 cores (preto / vermelho / branco ou preto / amarelo / branco). Este Instructable assume que você está usando o vermelho, mas se você escolheu a versão amarela, simplesmente leia "amarelo" para "vermelho" em todo.

Escolha uma versão SPI (4 fios). Usei o modelo de 1,54 , que é um tamanho muito bom.

Etapa 1: conectando seu monitor

Conectando seu monitor
Conectando seu monitor

Esses monitores vêm com um cabeçalho de pino 2x4. Os números dos pinos estão claramente identificados, pinos 7, 5, 3 e 1 (da esquerda para a direita) ao longo da linha superior e 8, 6, 4, 2 na parte inferior.

Seu monitor pode vir com um cabo patch de 8 vias, o que facilita a conexão. (Meu patch cable tem 2 fios vermelhos e 2 marrons. Eles não são intercambiáveis!

A tabela a seguir fornece as conexões, que se aplicam à maioria dos tipos de Arduino (incluindo Uno, Pro Mini, Pro Micro e Nano).

Módulo E-ink Arduino
Alfinete Nome Alfinete Nome
1 VDD Vcc 3,3 / 5V
2 VSS Gnd Gnd
3 Serial Data In 11 MOSI
4 Serial Clock In 13 SCK
5 / Chip Select 10
6 Dados / Instr 9
7 Redefinir 8
8 Dispositivo Ocupado 7

Etapa 2: Baixe o software fornecido

Você pode usar o software fornecido conforme descrito nesta etapa ou pode usar minha biblioteca aprimorada na próxima etapa, exceto uma.

Encontre seu dispositivo em BuyDisplay.com. Na parte inferior da página, você encontrará um arquivo ZIP para download "Arduino Library and Example for 4-wire SPI". Clique aqui para fazer o download e abrir no Windows Explorer.

O Windows Explorer irá mostrar isso como contendo uma única pasta de nível superior "Libraries-Examples_ER-EPM0154-1R". (O nome será um pouco diferente se o seu não for o modelo de 1,54 ".)

Copie esta pasta de nível superior para a pasta de bibliotecas do Arduino. Clique com o botão direito para renomear a pasta e exclua "Libraries-Examples_" do nome.

(Para encontrar a pasta de bibliotecas do Arduino, no IDE do Arduino, clique em Arquivo … Preferências e observe a localização do Sketchbook. Navegue até ela e você encontrará a pasta "bibliotecas" do Arduino entre as pastas de esboço.)

Abra esta pasta e abra a pasta "Bibliotecas" dentro dela. Arraste e solte todos os arquivos desta pasta na pasta pai um nível acima ("ER-EPM0154-1R"). Exclua a pasta "Bibliotecas" (agora vazia).

Agora você instalou os arquivos e um esboço de exemplo como uma biblioteca Arduino. Observe que se sua tela não for de 1,54 , a única diferença parece ser duas linhas em ER-ERM * -1.h definindo LARGURA e ALTURA.

No IDE do Arduino, clique em Arquivo… Exampes e role para baixo até ER-EPM0154-1R para o esboço de demonstração, que você deve ser capaz de compilar e executar assim que conectar seu monitor ao Arduino.

Etapa 3: executando a demonstração

Executando a demonstração
Executando a demonstração
Executando a demonstração
Executando a demonstração

No IDE do Arduino, clique em Arquivo… Exemplos… ER-EPM0154-1R.

Conecte seu Arduino ao computador com um cabo USB, ou como você faz normalmente.

Em Ferramentas, defina a Placa, o Processador e a Porta.

Em Sketch, clique em Upload.

Haverá um pequeno atraso após a conclusão do upload, e dez o atraso piscará várias vezes ao pintar a primeira imagem. Assista enquanto ele passa pela demonstração.

Etapa 4: usando a biblioteca aprimorada

Você pode baixar minha biblioteca aprimorada do github em

N. B. Tenho um alto grau de confiança de que minha biblioteca funcionará com qualquer tamanho de tela compatível, mas na verdade eu só testei com o modelo de 1,54 . Se você usar um diferente, por favor me avise nos comentários no final deste Instructable, para confirmar se funciona. Mas se não funcionar, farei o possível para ajudá-lo.

Baixe e salve o arquivo zip. No IDE do Arduino, clique em Sketch… Incluir biblioteca… Adicionar biblioteca. ZIP e selecione o arquivo zip salvo.

Minha biblioteca contém vários pequenos aprimoramentos:

  • Ele permite que diferentes números de pinos do Arduino sejam usados (exceto para MOSI).
  • A mesma biblioteca pode ser usada para dispositivos de qualquer tamanho.
  • Um novo preenchimento 50% sombreado e um preenchimento pontilhado (conjunto de pixels aleatórios) são fornecidos.

A biblioteca vem como um arquivo compactado (zip) do Arduino padrão. Baixe-o para a pasta Downloads (ou onde preferir) e, no IDE do Arduino, clique em Sketch … Incluir biblioteca … Adicionar biblioteca ZIP.

Em Exemplos, você encontrará agora E-ink_ER-EPM. Existem 3 esboços de exemplo:

  • ER_EPM154-1R-Teste: A demonstração original fornecida pelo fornecedor
  • E-ink_demo: O esboço desenvolvido nas próximas etapas
  • E-ink_rotate: Uma demonstração de rotação de imagem.

Etapa 5: programe você mesmo

Infelizmente, não há documentação com o código fornecido pelo fornecedor, nem o código de exemplo comentado adequadamente. Isso o torna mais difícil de usar do que deveria, e o principal objetivo deste Instructable é consertar isso.

Conceitos Básicos

Como um Arduino é limitado na quantidade de RAM disponível, a biblioteca permite que você desenhe ou escreva em pequenas seções da tela por vez, transferindo-as individualmente para a memória interna do dispositivo. Somente depois de fazer o upload de todas as partes de que você precisa, você o instrui a exibir o que está na memória.

Essas seções da tela são conhecidas como objetos "Pintar". Você só precisa de um, e para cada seção da tela você define sua altura, largura e rotação. Quando concluído, você faz o upload, definindo a posição na tela para carregá-lo e se deve ser preto e branco ou vermelho e branco.

O canto superior esquerdo da tela possui coordenadas horizontais (x) e verticais (y) (0, 0), o canto inferior esquerdo é (0, 151) e o canto superior direito é (151, 0).

Inicialização

Abra o esboço E-ink_demo no Arduino IDE e siga-o enquanto descrevo como usar a biblioteca.

No topo do esboço, você verá as seguintes linhas, que são sempre necessárias:

#include <SPI.h #include "ER-ERM0154-1.h" #include "imagedata.h" #include "epdpaint.h" #define COLORIDO 0 #define UNCOLORED 1 Epd epd;

As linhas #include trazem as bibliotecas necessárias. SPI.h é uma biblioteca padrão do Arduino, mas as outras fazem parte da biblioteca e-ink.

Definimos nomes para pixels SEM COR (brancos) e COLORIDOS (pretos ou vermelhos). (Nota para meus colegas europeus: a grafia americana de COLOR é usada.)

O Epd epd; linha cria o objeto de dispositivo de papel eletrônico, no qual estaremos exibindo. Isso tem que estar aqui no início do esboço para torná-lo disponível para bith as funções setup () e loop ().

Se você tiver um display de tamanho diferente, pode substituir a linha EPD por:

Epd epd (LARGURA, ALTURA);

(tendo previamente definido WIDTH e HEIGHT nas instruções #define.)

Da mesma forma, você pode especificar números de pinos não padrão com:

Epd epd (WIDTH, HEIGHT, BUSY_PIN, RESET_PIN, DC_PIN, CS_PIN);

Em setup (), precisamos inicializar o dispositivo da seguinte maneira:

Serial.begin (9600)

if (epd. Init ()! = 0) {Serial.print ("Falha na inicialização do e-Paper"); Retorna; }

(Na verdade, epd. Init () nunca retorna um erro, mas um aprimoramento futuro pode detectar a ausência de uma tela ou uma que não esteja funcionando.)

Etapa 6: Escrever texto

Escrevendo Texto
Escrevendo Texto

No E-ink_demo, volte sua atenção para loop (). Primeiro, vamos limpar a tela:

epd. ClearFrame ()

(Isso não é realmente necessário se você estiver prestes a exibir sua própria imagem.)

Antes de podermos desenhar qualquer coisa (seja texto ou gráfico), precisamos criar um objeto Paint para desenhar:

imagem de char unsigned [1024]

Pinte tinta (imagem, 152, 18); // largura deve ser múltiplo de 8

Isso reserva algum espaço (1024 bytes) e o aloca para o objeto Paint, localizado na segunda linha. Isso é provisoriamente configurado como 152 pixels de largura e 18 pixels de profundidade. Podemos reconfigurá-lo mais tarde para reutilizá-lo conforme necessário, mas observe: a largura deve ser um múltiplo de 8, já que 8 pixels são armazenados por byte e não podemos dividir os bytes. (Na verdade, ele irá arredondá-lo se necessário, mas pode ser confuso quando sua tela não está como deveria.

Agora devemos limpar o objeto de pintura para UNCOLORED (branco), então na posição (x, y) = (22, 2) escrevemos "e-ink Demo" usando uma fonte de 16 pixels de altura, e COLORIDO (para mostrar contra o Fundo SEM COR.

pintar. Limpar (SEM COR)

paint. DrawStringAt (12, 2, "e-paper Demo", & Font16, COLORIDO);

Observe que as coordenadas (22, 2) são o canto superior esquerdo do primeiro caractere da string, e são 22 pixels e 2 pixels abaixo em relação ao canto superior esquerdo do objeto de pintura, não a tela inteira. O texto fica melhor pelo menos um pixel abaixo da parte superior do objeto de pintura.

As seguintes fontes estão disponíveis:

Fonte8 - 5x8 pixelsFont12 - 7x12 pixelsFont16 - 11x16 pixelsFont20 - 14x20 pixelsFont24 - 17x24 pixels

Agora só temos que enviar o objeto de pintura ("pintura") para o dispositivo ("epd"):

epd. SetPartialWindowBlack (paint. GetImage (), 0, 3, paint. GetWidth (), paint. GetHeight ());

SetPartialWindowBlack é um método que aplicamos ao objeto epd, usando a imagem e suas propriedades de largura e profundidade do objeto de pintura. Estamos dizendo a ele para gravar esta imagem no dispositivo em (x, y) = (0, 3). E estamos dizendo que os pixels COLORIDOS devem ser pretos.

Não foi muito difícil, foi? Vamos tentar outro.

paint. Clear (COLORED);

paint. DrawStringAt (20, 2, "(Branco na cor)", & Font12, SEM COR); epd. SetPartialWindowRed (paint. GetImage (), 0, 24, paint. GetWidth (), paint. GetHeight ());

Reutilizamos o mesmo objeto de pintura e a mesma largura e altura, mas, desta vez, vamos defini-lo como COLORIDO e escrever uma string SEM COR nele. E para uma mudança, vamos deixar os pixels COLORIDOS vermelhos e escrever no dispositivo em (0, 24), logo abaixo do primeiro.

Gravamos os dois objetos de pintura na memória do dispositivo, mas ainda não pedimos para exibi-los. Fazemos isso com a seguinte declaração:

epd. DisplayFrame ();

(No esboço E-ink_demo, na verdade deixamos isso para o final, depois de desenhar mais algumas coisas, mas você pode inseri-lo aqui se quiser, mybe seguido de delay (10000); para dar-lhe tempo para admirar seu trabalho manual.

Etapa 7: Desenho de linhas e retângulos

Desenho de linhas e retângulos
Desenho de linhas e retângulos

Vamos ver como desenhar linhas e retângulos. Vamos usar o mesmo objeto de pintura, mas precisamos reconfigurá-lo com 40 pixels de largura e 36 pixels de altura. Vamos limpar para UNCOLORED.

paint. SetWidth (40);

paint. SetHeight (36); paint. Clear (UNCOLORED);

Vamos desenhar um retângulo (COLORIDO) com o canto superior esquerdo (5, 3) e o inferior direito (35, 33), em relação ao objeto de pintura, como de costume. Também desenharemos suas diagonais como linhas de (5, 3) a (35, 33) e de (35, 3) a (5, 33). Por fim, escreveremos todo o objeto de pintura (vermelho) na tela em (32, 42).

// LINHA SUPERIOR:

// Rectange paint. Clear (UNCOLORED); paint. DrawRectangle (5, 3, 35, 33, COLORIDO;) paint. DrawLine (5, 3, 35, 33, COLORIDO); paint. DrawLine (35, 3, 5, 33, COLORIDO); epd. SetPartialWindowRed (paint. GetImage (), 32, 42, paint. GetWidth (), paint. GetHeight ());

A biblioteca, conforme veio, também forneceu um retângulo preenchido, mas ei, eu queria um sombreado, então adicionei um novo método. Faremos mais dois retângulos, um sombreado e outro preenchido, e os colocaremos à direita do primeiro, alternando-os em preto e vermelho.

// Shaded Rectange paint. Clear (UNCOLORED); paint. DrawShadedRectangle (5, 3, 35, 33); epd. SetPartialWindowBlack (paint. GetImage (), 72, 42, paint. GetWidth (), paint. GetHeight ()); // Retângulo preenchido paint. Clear (UNCOLORED); paint. DrawFilledRectangle (5, 3, 35, 33, COLORIDO); epd. SetPartialWindowRed (paint. GetImage (), 112, 42, paint. GetWidth (), paint. GetHeight ());

Etapa 8: Desenhar Círculos

Desenhando Círculos
Desenhando Círculos

Os círculos são igualmente fáceis de desenhar. Em vez das coordenadas de dois vértices, temos que fornecer as coordenadas do centro e do raio. Vamos limpar o objeto de pintura e colocar um círculo em (20, 15) (em relação ao objeto de pintura) e raio 15. E repetir para um círculo sombreado e um círculo preenchido.

//SEGUNDA LINHA

// Circle paint. Clear (UNCOLORED); paint. DrawCircle (20, 18, 15, COLORIDO); epd. SetPartialWindowBlack (paint. GetImage (), 32, 78, paint. GetWidth (), paint. GetHeight ()); // Círculo sombreado paint. Clear (UNCOLORED); paint. DrawShadedCircle (20, 18, 15); epd. SetPartialWindowRed (paint. GetImage (), 72, 78, paint. GetWidth (), paint. GetHeight ()); // Círculo preenchido paint. Clear (UNCOLORED); paint. DrawFilledCircle (20, 18, 15, COLORIDO); epd. SetPartialWindowBlack (paint. GetImage (), 112, 78, paint. GetWidth (), paint. GetHeight ());

Etapa 9: SEM COR em um fundo COLORIDO

SEM CORES em um fundo COLORIDO
SEM CORES em um fundo COLORIDO

Estamos nos dando muito bem aqui! Então, enquanto estamos em um rolo, vamos fazer mais 3 círculos em uma linha abaixo, desta vez SEM COR em um objeto de pintura COLORIDO, como fizemos com a segunda linha do texto.

//TERCEIRA FILA

// Circle paint. Clear (COLORED); pintar. DrawCircle (20, 18, 15, SEM COR); epd. SetPartialWindowRed (paint. GetImage (), 32, 114, paint. GetWidth (), paint. GetHeight ()); // Círculo sombreado paint. Clear (COLORED) paint. DrawShadedCircle (20, 18, 15); epd. SetPartialWindowBlack (paint. GetImage (), 72, 114, paint. GetWidth (), paint. GetHeight ()); // Círculo preenchido paint. Clear (COLORED); paint. DrawFilledCircle (20, 18, 15, SEM COR); epd. SetPartialWindowRed (paint. GetImage (), 112, 114, paint. GetWidth (), paint. GetHeight ());

Além do preenchimento sombreado, há também um preenchimento pontilhado, que colore pixels aleatórios. Então, em vez do círculo sombreado acima, poderíamos ter colocado

paint. DrawSpeckledCircle (20, 18, 15, 25);

O parâmetro final (25) é a densidade, ou seja, a porcentagem de pixels que devem ser coloridos. Se omitido, 50% é assumido.

Também existe um DrawSpeckledRectangle, com um parâmetro extra opcional especificando a densidade.

Etapa 10: Rotação

Rotação
Rotação
Rotação
Rotação

Tudo o que podemos desenhar, podemos girar em 90, 180 ou 270 graus. (Contamos as rotações no sentido horário.)

Podemos aplicar uma propriedade ROTATE a um objeto de pintura, mas é importante entender que não é o objeto de pintura que é girado, mas tudo o que você escreve nele. Portanto, se você quiser texto vertical, precisará configurar o objeto de pintura com o comprimento e a espessura mais finos na direção vertical em vez de horizontal.

Portanto, se você quiser que seu texto seja girado 90 graus no sentido horário para que seja lido de cima para baixo (em vez de da esquerda para a direita), o canto superior direito do objeto de pintura será (0, 0) para o propósito de qualquer coisa que você escrever ou desenhe nele, com x medido desse canto para baixo e y desse canto para a esquerda.

Você provavelmente percebeu que deixamos um espaço no lado esquerdo da tela. Então, vamos escrever algum texto girado 270 graus, ou seja, lendo de baixo para cima. Isso colocará (0, 0) no canto inferior esquerdo.

Observe que, no entanto, você gira um objeto de pintura, a rotação só se aplica à medida que você desenha pixels nele. Quando você começa a escrever no dispositivo, ainda são as coordenadas do canto superior esquerdo que você deve fornecer para SetPartialWindow.

Então, para recapitular, vamos configurar nosso objeto de pintura para ter largura de 32 e altura de 110, e daremos a ele uma propriedade ROTATE_270. Não que tenhamos que fazer tudo isso antes de escrever ou desenhar algo nele.

paint. SetWidth (32);

paint. SetHeight (110); paint. SetRotate (ROTATE_270);

Vamos limpá-lo para COLORIDO e escrever uma string UNCOLORED nele, em seguida, colocá-lo em (0, 42). (Esse é o canto superior esquerdo, lembre-se. Esqueça qualquer rotação dos pixels nele.)

pintar. Limpar (COLORIDO); paint. DrawStringAt (8, 8, "Sideways!", & Font16, UNCOLORED); epd. SetPartialWindowBlack (paint. GetImage (), 0, 42, paint. GetWidth (), paint. GetHeight ());

Finalmente, precisamos dizer ao dispositivo para exibir todos os pixels que demos a ele. E se não quisermos trocá-lo por um tempo e quisermos conservar a bateria, podemos colocá-lo em hibernação, e por que não colocar o Arduino em hibernação também, para ser acordado na hora de tirar e exibir outro medição.

epd. DisplayFrame ();

epd. Sleep ();

Um segundo esboço de exemplo mostra a rotação em 90, 180 e 270 graus. Agora você deve ser capaz de segui-lo sozinho.

Etapa 11: Desenhar bitmaps

Desenho de bitmaps
Desenho de bitmaps

A demonstração do fornecedor inclui a exibição de algumas imagens de bitmap. Eles são fáceis de criar usando uma ferramenta que pode ser baixada de

www.buydisplay.com/image2lcd

Ele vem como um arquivo zip contendo um arquivo de instalação.exe e um arquivo de texto contendo uma chave de licença. Expanda-o e clique duas vezes no arquivo.exe para instalá-lo.

Claramente, existem restrições bastante severas sobre o que você pode exibir, uma vez que os pixels de tinta E só podem estar ligados ou desligados e, portanto, não podem representar níveis de cinza. Mas é possível sobrepor um objeto de pintura retangular a uma imagem. Você pode desejar exibir um logotipo, símbolos ou texto fixo em uma fonte sofisticada, na qual você pode sobrepor texto ou gráficos variáveis, como uma barra ou gráfico de pizza, talvez indicando algo como um nível de líquido.

Você pode criar sua imagem com qualquer software de desenho com o qual esteja familiarizado, ou você pode digitalizar em um esboço ou desenho, mas em qualquer caso, você precisa ser capaz de reduzi-lo a apenas 2 níveis. Salve-o como.gif,-j.webp

Inicie Image2Lcd. Ao longo da parte inferior, você verá uma guia Registrar. Clique aqui e digite o código de registro que veio em um arquivo de texto no arquivo zip que você baixou. Isso removerá uma sobreposição da imagem.

Em Image2Lcd, abra seu arquivo de imagem. No painel esquerdo, certifique-se de que você

  • Tipo de arquivo de saída: array C
  • Modo de digitalização: digitalização horizontal
  • BitsPixel: Monocromático
  • Largura e altura máximas: o tamanho da tela e
  • Incluir dados de cabeçalho deve ser desmarcado.

Clique no botão próximo a Largura e altura máximas para processar. O resultado do processamento será mostrado. Pode ser necessário ajustar os controles deslizantes de Brilho e Contraste para obter os melhores resultados.

Clique na caixa de seleção Reverse color acima do controle deslizante Brightness, tornando-o uma imagem negativa, o que por algum motivo é necessário, então clique em Save para salvá-lo como imagedata.cpp na pasta que contém seu esboço do Arduino. Na próxima vez que você abrir o esboço com o IDE do Arduino, deverá vê-lo como uma nova guia.

Etapa 12: Exibindo seu bitmap

Exibindo seu bitmap
Exibindo seu bitmap

No arquivo principal de seu esboço do Arduino, imediatamente após as linhas #include no topo, insira:

#include "imagedata.h"

Crie uma nova guia (clique na seta para baixo no final da linha das guias) e chame-a de imagedata.h. Insira as 2 linhas a seguir nele:

extern const unsigned char IMAGE_BLACK ;

extern const unsigned char IMAGE_RED ;

Em seu arquivo imagedata.cpp, a primeira linha começará com

const unsigned char gImage_image [2888] = {

(O número entre colchetes será diferente se você não estiver usando a tela de 1,54”.) Substitua por

const unsigned char IMAGE_BLACK PROGMEM = {

Isso é para uma imagem em preto e branco. Se você quiser vermelho e branco, mude para

const unsigned char IMAGE_RED PROGMEM = {

Pouco antes desta linha, adicione

#incluir

#include "imagedata.h"

Agora você está pronto para exibir sua imagem. Em loop () em seu arquivo principal, adicione

epd. ClearFrame ();

epd. DisplayFrame (IMAGE_BLACK, NULL);

Ou, se foi uma imagem vermelha que você criou, a segunda linha deve ser

epd. DisplayFrame (NULL, IMAGE_RED);

Na verdade, você pode criar uma imagem combinada de vermelho e preto convertendo as partes vermelhas e pretas separadamente com Image2Lcd e exibindo-as com

epd. DisplayFrame (IMAGE_BLACK, IMAGE_RED);

No entanto, quaisquer pixels especificados como pretos na imagem em preto e branco e vermelhos na imagem vermelha e branca sairão vermelhos.

Finalmente, você pode sobrepor sua imagem com qualquer uma das funções de texto ou gráficos que aprendemos anteriormente. Eu queria adicionar meu identificador do Twitter, então adicionei

Pinte tinta (imagem, 20, 152); // largura deve ser múltiplo de 8

paint. SetRotate (ROTATE_270); paint. Clear (UNCOLORED); paint. DrawStringAt (20, 2, "@pleriche", & Font16, COLORIDO); epd. SetPartialWindowRed (paint. GetImage (), 0, 0, paint. GetWidth (), paint. GetHeight ()); epd. SetPartialWindowRed (paint. GetImage (), 0, 0, paint. GetWidth (), paint. GetHeight ()); epd. DisplayFrame ();

Recomendado: