Recents in Beach


Receba o meu conteúdo GRATUITAMENTE


BBB - Bom, Bonito e Barato: Display com STM32L4





Hoje vamos falar de três “caras” que eu gosto muito: display de LCD que gasta pouca energia, STM32 com Core Arduino e o Arduino Mega Pro Mini, ou seja, um trio infalível para a Internet das Coisas. Vou, então, te apresentar o display LCD de seis dígitos HT1621 e criar um exemplo de controle com um código que funciona tanto no Arduino Mega Pro Mini quanto no STM32 L432KC. Detalhe: o código fonte para os dois microcontroladores é exatamente o mesmo. Não estou mudando nem a pinagem. Olha que fantástico!



Introdução

O display LCD HT1621 tem uma tela amplamente utilizada em multímetros, balanças eletrônicas, relógios eletrônicos, termômetros, dispositivos de medição eletrônico.
·         Possui 6 dígitos com 7 segmentos
·         Utiliza comunicação SPI de 3 fios
·         Luz de fundo adequada para ambientes escuros
·         Tensão de funcionamento 4.7 ~ 5.2V
·         Consome 4mA com luz de fundo


Repare que temoss além dos SEIS dígitos, TRÊS pontos decimais e um medidor de bateria com TRÊS barras.



Biblioteca para uso

Utilizaremos uma biblioteca do usuário ANXZHU do github, que é bem simples. Ela pode ser vista na versão original no link abaixo:
O nome da biblioteca ficou um pouco estranho para leitura, então resolvi mudar o nome dela (arquivos, classes, construtores...). O nome original dela é “A6seglcd”, eu substitui por “lcdlib”.


Biblioteca

Adicione biblioteca “lcdlib”.
Acesse o link e faça download da biblioteca.
Descompacte o arquivo e cole na pasta de bibliotecas da IDE do arduino.
C:/Program Files (x86)/Arduino/libraries


Demonstração

Montagem com o Arduino Mega

Montagem com o SMT32


STM32 NUCLEO-L432KC

Quero destacar aqui que o que o STM32-L432KC tem não é um conversor de USB de serial, mas uma USB completa, que utiliza o protocolo ST-link da STMicroelectronics. Então, ele é bastante sofisticado e possibilita uma depuração muito eficiente se você estiver utilizando IR ou Microvision. Isso tudo além de ser Arduino Core, MBED, usar ferramenta nativa da Microsoft, ou seja, ele usa compiladores altamente profissionais. Precisa falar mais alguma coisa?



Arduino Mega 2560 PRO MINI

Esse “cara” eu gostei bastante também porque posso dizer que é um Arduino “puro”, um Arduino “de verdade”. É um Mega, com um monte de IOs, mas Mini, então, cabe em qualquer lugar, entendeu? Eu, particularmente, gosto de IO para todos os lados. Quero ligar Led, SPI, i2c, etc, etc, e tal. Então, nesse quesito, esse Mega é maravilhoso.



Montagem

Deixamos na nossa montagem a fileira de pino macho no lado interno enquanto a de pino fêmea ficou do lado mais externo, facilitando o nosso trabalho e ligação com um protoboard. Fazemos a ligação do SPI, lembrando que a mesma pinagem que usamos no Arduino Mega é a utilizada com esse “clone” de Arduino Nano, que é o STM32-L432KC.



Programa

Faremos um programa bem simples, no qual escreveremos no display diversos símbolos (letras, números, pontos).
Lembrando que esse programa funciona tanto no Arduino Mega Pro Mini quanto no STM32 L432KC.


Bibliotecas e Variáveis

Vamos, então, incluir a biblioteca responsável pela comunicação e instanciar o controle do display. No caso da função “const char”, esta expõe uma tabela do array. São através destes vetores que você vai fazer a referência do caracter que irá imprimir no display.

#include <lcdlib.h> //biblioteca para controle do display
lcdlib lcd;       //instancia do controlador do display

                  /*0,   1,   2,   3,   4,   5,  6,   7,    8,   9,   A,   b,   C,   c,   d,   E,   F,   H,   h,   L,   n,   N,   P,   r,   t,   U,   -,    bat,  pf,      ,*/
const char num[]={0x7D,0x60,0x3E,0x7A,0x63,0x5B,0x5F,0x70,0x7F,0x7B,0x77,0x4F,0x1D,0x0E,0x6E,0x1F,0x17,0x67,0x47,0x0D,0x46,0x75, 0x37, 0x06,0x0F,0x6D,0x02,0x80,0xFF, 0x00 };
/*indice num [i]  /*0    1    2    3    4    5   6    7     8    9   10   11   12   13   14   15   16   17   18   19   20   21    22   23   24   25   26   27   28     29  */


Setup

Para iniciar o Setup, vamos definir os pinos, fazer a configuração inicial, bem como a configuração para limpeza do display. Determinamos que no display apareça escrito “Hello” e, após determinado delay, que a mensagem do display seja apagada.

void setup()
{
     lcd.run(2,3,4,5); //[ cs wr data led+] definição dos pinos 
     lcd.conf(); //configuração inicial
     lcd.clr(); //limpa o display

     //escreve HELLO
     lcd.display(10, num[17]);
     lcd.display(8, num[15]);
     lcd.display(6, num[19]);
     lcd.display(4, num[19]);
     lcd.display(2, num[0]);
     //fim HELLO
     delay(1000);
     lcd.clr(); //limpa o display
}


Loop

Aqui criamos uma função chamada "writeLoop", que vai escrever a palavra LOOP no display, em seguida escreveremos todos os símbolos de nosso arrray. Também temos a função "writeBattery", que imprime os marcadores de bateria.

Por fim, temos o comando "lcd.dispnum" que escreve o valor do ponto flutuante.

void loop()  {
     writeLoop();
     delay(1000);
     //escreverá todos os símbolos de nosso array
     for(int i=0; i<30; i++) {
         lcd.display(0, num[i]);
         lcd.display(2, num[i]);
         lcd.display(4, num[i]);
         lcd.display(6, num[i]);
         lcd.display(8, num[i]);
         lcd.display(10, num[i]);
         delay(1000); 
     } 
     lcd.clr(); //limpa o display
     writeBattery();

     //escreve números com PONTO FLUTUANTE
     lcd.dispnum(3.21);     delay(1500);
     lcd.dispnum(980.15);   delay(1500);
     lcd.dispnum(3214.58);  delay(1500);
     lcd.dispnum(85641.2);
     delay(1500);
     lcd.clr();//limpa o display 
}

//função que escreve loop no display
void writeLoop()
{
     //escreve LOOP
     lcd.display(10,num[19]);
     lcd.display(8, num[0]);
     lcd.display(6, num[0]);
     lcd.display(4, num[22]);
}

//função que escreve os marcadores de bateria
void writeBattery()
{
     //escreve os símbolos da BATERIA
     lcd.display(10, num[27]);
     delay(750);
     lcd.display(8, num[27]);
     delay(750);
     lcd.display(6, num[27]);
     delay(750);
     lcd.display(10, 0x00);
     delay(500);
     lcd.display(8, 0x00);
     delay(500);
     lcd.display(6, 0x00);
     delay(500);
}



Faça o download dos arquivos:



Postar um comentário

7 Comentários

  1. Boa tarde
    O link do codigo fonte nao esta funcionando.

    ResponderExcluir
    Respostas
    1. Este link: http://74.117.156.195/verify.php?arquivo=Liblcd.zip ?
      Eu acabei de baixar...

      Excluir
    2. Esse link é da biblioteca, eu tambem consegui baixar.
      eu me refiro ao arquivo .ino.
      Aliás não só esse mas outros links de outros posts tambem estão quebrados, eu sempre comento aqui mas infelizmente não estou tendo retorno.

      Excluir
    3. Oi Josias. Desculpe a demora no retorno, amigo.
      Atualizamos o link. Por favor, tente novamente.
      Sempre que encontrar problemas aqui no Blog, por favor, continue avisando, sim.
      Agradeço sua atenção!

      Excluir
    4. Obrigado pelo retorno.
      Consegui baixar o código fonte.

      Excluir
  2. Boa tarde!!! Eu poderia falar a tarde toda do quanto o Sr., Prof. Koyanagi, e sua equipe, têm me ajudado, mas tenho que perguntar: O senhor compra diretamente da STM, certo? O senhor compra mesmo um STM32 de 10USD e paga 47USD de frete, ou tem outra forma, outro tipo de frete ou fornecedor, para comprar sem um frete tão absurdo?

    ResponderExcluir
  3. Olá Fernando! Como sugestão, por gentileza, faça um relógio com esse display e RTC!
    Fiz uma pergunta no seu site do YouTube mas não obtive resposta; Obrigado

    ResponderExcluir