Linux

Display LCD 4 bits com Arduino (LCD 16×2)

Display LCD 4 bits com Arduino

Display LCD 4 bits com Arduino

Antes de começarmos, caso deseje controlar um display desse com I2C, o link é esse.

Como prometi no post sobre o sensor de temperatura LM35, vamos aprimorar o projeto de controle de temperaturas utilizando um display LCD (esse, precisamente).

Esse display possui 5 botões, mas todos eles utilizam a porta analógica 0. O que faz com que seja possível reconhecer qual botão foi pressionado é a frequẽncia que ele gera; cada botão possui uma resistência diferente, como se pode ver nesse esquemático oferecido pela WebTronico.
Além disso, pode-se ver no esquema os pinos utilizados. Porém, mesmo sem o esquemático, não só para esse LCD shield mas também para outros shields, existe uma referência do site oficial do Arduino que mostra a pinagem em uma lista, nesse link

Então para testar, vamos usar a biblioteca disponível para download no próprio site (e obviamente recomendo a compra na WebTronico). Baixe e descomprima a biblioteca dentro do sub-diretório libraries do diretório arduino-1.0 (que é a versão disponível até o momento que escrevi esse post).


Ao ligar, automaticamente o display se acende e a matriz fica preenchida por quadrados pretos, então, não se assuste; não há nada de anormal com ele.

Ao tentar compilar o programa, obtive um erro de comprimento da string. Diminua 2 bytes a partir da linha 12 do array. No meu caso, deixei a variável em uma só linha dessa forma:

Após compilar e subir o programa, o display exibirá a mensagem “Keypad testing…”. Pressionando cada um dos botões, a mensagem se alterará. Na imagem acima, ao apertar o botão para baixo, surgiu a mensagem “Baixo OK”.

Trabalharemos duas etapas distintas. Primeiramente, será necessário criar um método que possa tratar os resultados dos botões e manipular o array de mensagens também. Isso será feito porque há um objetivo principal; criar um menu para poder escolher qual sensor exibir a temperatura.

O segundo objetivo é exibir mensagens de temperatura na tela. Para converter esse valor em um array de char utilizaremos a função dtostrf(), mas não se preocupe com isso, estará claro no código de exemplo.

Para não virar um mega-projeto, utilizarei apenas 2 sensores LM35 para a temperatura, mas é possível adicionar outros tipos de sensores funcionando juntamente.

Nada desse mundo é perfeito
Esse fabuloso display tem lá suas deficiências. Não sei porque, mas infelizmente ele não vem com os slots para utilizar os demais pinos analógicos e os digitais, além de energia e terra. Então, foi necessário soldar os demais slots e obtive o resultado da imagem inicial desse post.

Enfeitando um pouco
Não há muito que se possa fazer de verdade, mas é possível colocar um pouco de charme no display, gerando um delay para a exibição do texto, de uma forma mais suave como se pode ver no video. Para isso, foi necessário mexer diretamente na biblioteca do display. Entre no diretório libraries/LCD4Bit_mod do Arduino e edite o arquivo LCD4Bit_mod.cpp.
No método pulseEnablePin(), troque os delays por 100,100 e 10. É só o que dá para fazer.

Criando o fluxo do menu
Aproveitei todo o código do exemplo da biblioteca do LCD, apenas adicionando algumas linhas. Claro que pode-se criar um menu extenso, com muitos ítens de submenu, mas o que fiz foi simplesmente adicionar um submenu a cada botão de direção; apertando esquerda, aparece Esquerda: 4. Apertando então Select, aparece Submenu 4.

Agora trocarei a mensagem de esquerda e direita para Sensor 1 e Sensor 2 respectivamente. Quando pressionados, exibirão a mensagem “Exibir valor”. Pressionando então select, exibirá o valor do sensor correspondente.

O código

Para aproveitar exatamente o mesmo código, pensei em criar alguns artifícios que me permitissem interagir com o fluxo original. Antes de Setup() adicionei algumas variáveis:

No final do código, criei uma função para trocar a mensagem do display. Depois de testado, fiz com que exibisse o valor do sensor:

 

Tem dois ifs no código verificando a mesma condição (ok, entendi, mas o código não é meu):

 

Logo abaixo dessa segunda condicional, deixei com as seguintes linhas:

 

Além disso, tive que modificar a classe do display em alguns lugares. Não vou entrar em detalhes sobre as mudanças, mas a biblioteca modificada está disponível aqui. As modificações são apenas para atender o propósito desse tutorial, portanto recomendo o backup da biblioteca original antes de utilizar essa modificada.

Para fazer uso dos botões (C)ima e (B)aixo, coloquei a função de acender e apagar um LED. O display está devidamente configurado para a exibição da mensagem, mas por algum motivo ainda não descoberto, não acendi o LED. Quer tentar?
O código utilizado no display é esse:

 

 

Quando corrigir o problema, atualizo o post; como está certamente já é útil. Eis o video:

3 comments
%d blogueiros gostam disto: