Simulação do Arduino no Proteus: Display LCD

Display LCD
Este post faz parte da série Proteus. Leia também os outros posts da série:

Dando continuidade à sequência apresentada no artigo passado sobre a implementação e simulação de projetos utilizando Arduino UNO e o Proteus/ISIS, apresentamos neste artigo um material exclusivo para ensinar como manipular displays LCD que utilizam o controlador HD44780 (que são os mais básicos e bastante utilizados), bem como realizar simulações com estes elementos. Neste artigo será apresentado como desenvolver um menu completo utilizando o display LCD, além da simulação do circuito.

Objetivo

Este projeto consiste em criar uma aplicação utilizando todo o conhecimento adquirido tanto neste material como no apresentado anteriormente. Aqui será desenvolvido um sistema composto por um display LCD, três leds que serão acionados utilizando PWM (simulando um led RGB), um led com comportamento on/off, quatro botões para a manipulação do menu e dos leds além de um potenciômetro para realizar o ajuste fino do PWM. E você poderá baixar o manual completo no final do artigo.

Hardware – Conectando o Display LCD no Arduino

A seguir são apresentados os componentes utilizados no Proteus, assim como o esquema de ligação dos mesmos.

Componentes necessários

Display LCD com Arduino: Componentes do projeto
Figura 1 – Componentes utilizados

Diagrama esquemático das ligações

Display LCD com Arduino: Esquema
Figura 2 – Esquema de ligação dos componentes para simulação do controle do Display LCD com Arduino

Desenvolvimento do código – Controlando o Display LCD com Arduino

No decorrer desta seção serão explicados todos os passos utilizados para o desenvolvimento do projeto, isto é, o código será comentado de modo que todo conhecimento aplicado seja facilmente compreendido.

Primeiramente deve-se incluir a biblioteca LiquidCrystal.h para que seja possível fazer a interação do Arduino UNO com o display utilizado de maneira mais simples.

Em seguida utiliza-se a diretiva #define para associarmos os elementos aos seus respectivos pinos. Neste momento os leds vermelho (R), verde (G), azul (B) e amarelo (LED_AM) estão relacionados com os pinos 1, 10, 11 e 13. Os botões BOT1/2/3/4 estão ligados aos pinos 0, 1, 7 e 8, respectivamente, e o potenciômetro está conectado ao pino de entrada analógica A0.

Em seguida é declarada uma grande quantidade de variáveis, sendo assim, estas foram separadas em blocos para facilitar o entendimento sobre a área de atuação das mesmas. A primeira variável é a lcd já discutida neste material. Posteriormente tem-se o primeiro bloco de variáveis, estas são responsáveis pelo funcionamento dos quatro botões existentes no hardware da simulação. Observe que os botões 1 e 2 possuem tratamento em seu acionamento, enquanto os botões 3 e 4 não necessitam deste artifício (se o leitor tive alguma dúvida sobre a implementação do tratamento em botões, favor consultar o item 2.1 do manual disponibilizado na primeira parte).

O segundo bloco possui as variáveis linhaATUAL, linhaANTERIOR e linhaANTERIORaux, responsáveis pelo controle das linhas do menu criado. Já o terceiro bloco é representado pelas variáveis que armazenarão os valores para serem utilizados no acionamento dos leds R, G e B através do PWM e pela variável para realizar o acionamento ON/OFF do led amarelo.

O último bloco é responsável pela interação do potenciômetro com os leds R, G e B. Este possui como função realizar um ajuste fino no valor que será utilizado no PWM para acionar os leds citados.

Além dos blocos comentados anteriormente, existe ainda a variável contador utilizada em estruturas de repetição e os caracteres especiais que farão parte do menu representado no display.

Caracteres especiais gerados com o código acima:

Display LCD com Arduino: Caracteres
Figura 3 – Caracteres especiais

Dentro da função setup() serão definidos os modos de operação dos pinos utilizados, onde os pinos em que estão conectados os 5 leds são definidos como saídas e os pinos em que se encontram os botões são definidos como entradas. Neste momento também são criados os caracteres especiais através da função createChar(), inicializada a interface entre Arduino UNO e display, além da utilização da função cabeçalho, responsável por escrever a parte de cima (duas linhas superiores) do display.

Na função loop() são chamadas quatro funções que proporcionam o funcionamento propriamente dito do programa. As funções verificarBOT1/BOT2/BOT3() são responsáveis por analisar os três botões e tomar as providências necessárias, enquanto a função verificarLINHA() realiza o ajuste do cursor de seleção de acordo com a linha selecionada e organiza as linhas da forma correta para serem representadas no display.

Como as funções mostradas a seguir são grandes e complexas, será explicado neste momento apenas as partes importantes e necessárias para o entendimento do funcionamento do programa.

No começo do programa, a primeira função que deve ser analisada é a função verificarBOT1(). Primeiramente nesta função verifica-se o estado do botão 1, caso este tenha sido pressionado a variável linhaANTERIOR recebe o valor da variável linhaATUAL e esta última é incrementada. O mesmo acontece com a função verificarBOT2(), porém a variável linhaATUAL é decrementada neste caso.

Supondo que por enquanto não ocorra um acionamento do botão 3, o programa passará para a função verificarLINHA(). Nesta função, o programa escreve as duas linhas que aparecerão por vez no display, juntamente com o cursor de seleção destas (por isso é importante levar em conta as duas variáveis, linhaANTERIOR e linhaATUAL, para o posicionamento correto do cursor). Repare que dentro das funções verificarBOT1/2() existem condições que limitam o valor destas variáveis no intervalo de 1 a 4.

As linhas fornecem as possibilidades de atuar sobre os seguintes elementos:

  •         Linha 1  →  R
  •         Linha 2  →  G
  •         Linha 3  →  B
  •         Linha 4  →  LED_AM

Supondo agora que o botão 1 foi apertado uma vez (linhaATUAL = 2 e linhaANTERIOR = 1). Quando o botão 3 for pressionado, serão verificadas várias estruturas condicionais if() e uma delas detectará que a linha atual é a número 2, sendo assim, o sistema entrará em um outro patamar onde é possível realizar o acionamento do led G utilizando PWM.

Neste momento o display passa a sinalizar que a componente verde do led RGB foi escolhida para ser alterada. Para isto existe a esturura do/while(), que realizará primeiramente uma sentença e enquanto uma determinada condição não é atingida, esta sentença é repetida indefinidamente. A sentença em questão consiste em verificar o potenciômetro e adicionar até 25 unidades na variável estadoG (responsável por conter o valor que será utilizado para acionar o led). Observe que dentro desta mesma sentença, as funções verificarBOT1/BOT2() são chamadas novamente.

Fazendo uma nova observação na função verificarBOT1() pode-se ver que existe uma estrutura condicional if() que verifica a hipótese de que o botão 3 tenha sido apertado, e posteriormente encontra-se uma estrutura switch/case onde é determinada em qual linha o programa estava quando o botão 3 foi pressionado. Como a variável linhaATUAL possui o valor 2, logo, ao ser pressionar o botão 1, a variável estadoG será decrementada em 25 unidades. O mesmo acontece com o botão 2, porém a diferença é que a variável estadoG será incrementada do mesmo valor. Este ciclo vai se repetindo até que o botão 4 seja pressionado (condição de parada da estrutura do/while()), onde o display volta a apresentar a tela onde estava o sistema no momento em que o botão 3 foi pressionado.

A única exceção acontece quando linhaATUAL = 4, pois neste caso temos o acionamento on/off do led amarelo

A seguir são apresentadas as telas conforme código acima:

Display LCD com Arduino: Telas
Display LCD com Arduino: Telas
Figura 4 – Telas geradas

Além deste exemplo de aplicação, estão presentes no manual completo os seguintes tópicos:

  • IMPRESSÃO DE CARACTERES NO DISPLAY;
  • DESLOCAMENTO LATERAL DE CARACTERES;
  • IMPLEMENTAÇÃO DE UM DISPLAY INFORMATIVO;
  • IMPLEMENTAÇÃO DE UM SEMÁFORO INFORMATIVO;
  • DADO DE 6 FACES NO DISPLAY LCD;
  • BARRA DE PROGRESSO NO DISPLAY LCD.

Conclusão

De acordo com o exemplo dado anteriormente, pode-se perceber a grande importância dos displays LCD em proporcionar a interação do usuário com os sistemas de diversas maneiras, seja através de um modo mais informativo ou até mesmo de um maneira que estes possibilitem o controle do próprio sistema, utilizando menus de seleção como as principais estruturas de interação. Além disso conclui-se que a simulação deste componente no Proteus/ISIS funciona de maneira praticamente idêntica ao mesmo quando utilizado fisicamente, servindo portanto como uma forma bastante satisfatória tanto para o aprendizado da manipulação dos displays quanto para testes.

Convidamos o leitor a baixar este manual através do link disponibilizado abaixo. Esperamos que este documento possa contribuir com o seu conhecimento e tenha bons estudos! Pedimos encarecidamente que nos envie dúvidas, sugestões, críticas e caso tenha gostado deste.

download_proteus_arduino_lcd

Outros artigos da série

<< Proteus: Manual para simulação do ArduinoSimulação do Arduino no Proteus: Servo Motor e Displays LCD com o controlador PCD8544 >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Arduino » Simulação do Arduino no Proteus: Display LCD
Comentários:
Notificações
Notificar
guest
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Pedro
Pedro
14/04/2020 14:34

Acredito que esteja faltando a função verificarPOT(). Ou pelo menos não encontrei 😉

Pedro
Pedro
Reply to  Pedro
14/04/2020 14:44

Depois só pus a função deste modo…

void verificarPOT(){
medidaPOT = analogRead(A0);
}

Fora isso, excelente publicação!

Talvez você goste:

Séries



Outros da Série

Menu
WEBINAR
Além da IoT
DATA: 27/01 às 19:30H