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
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); }
7 Comentários
Boa tarde
ResponderExcluirO link do codigo fonte nao esta funcionando.
Este link: http://74.117.156.195/verify.php?arquivo=Liblcd.zip ?
ExcluirEu acabei de baixar...
Esse link é da biblioteca, eu tambem consegui baixar.
Excluireu 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.
Oi Josias. Desculpe a demora no retorno, amigo.
ExcluirAtualizamos o link. Por favor, tente novamente.
Sempre que encontrar problemas aqui no Blog, por favor, continue avisando, sim.
Agradeço sua atenção!
Obrigado pelo retorno.
ExcluirConsegui baixar o código fonte.
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?
ResponderExcluirOlá Fernando! Como sugestão, por gentileza, faça um relógio com esse display e RTC!
ResponderExcluirFiz uma pergunta no seu site do YouTube mas não obtive resposta; Obrigado