segunda-feira, 17 de setembro de 2018

Biblioteca LiquidCrystal - Práticas


A função LiquidCrystal inicializa o modo de comunicação com o módulo de LCD

A sua sintaxe prevê a utilização ou não do pino R/W e a comunicação em 4 ou 8 bits.
Isso é definido no memento de sua chamada dependo do número de parâmetros, pela sua sintaxe


LiquidCrystal(rs, enable, d4, d5, d6, d7) 
LiquidCrystal(rs, rw, enable, d4, d5, d6, d7) 
LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7) 
LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)


  
  



Atividade 1 - Modificando I/Os LCD

Utilizando o exemplo "HelloWorld" refaça a ligação para utilizar o pino R/W e a comunicação em 4 bits utilizando a ligação entre o módulo LCD e o Arduino de acordo com a tabela abaixo



  • Montar a simulação
  • Montar o hardware para apresentação da atividade

  
  



Atividade 2 - Status do botão e led no LCD

Usando a mesma ligação entre o LCD e o Arduino desenvolvida na atividade 1, implemente um sketch que contenha

  • 1 botão
  • 1 led
  • Módulo de LCD


O seu funcionamento deverá obedecer a seguinte lógica

  • Botão Solto
    • Led desligado
    • Indicação na primeira linha do LCD o estado do botão - SOLTO
    • Indicação na segunda linha do LCD o estado do led - DESLIGADO
  • Botão pressionado
    • Led ligado
    • Indicação na primeira linha do LCD o estado do botão - PRESSIONADO
    • Indicação na segunda linha do LCD o estado do led - LIGADO


  • Montar a simulação
  • Montar o hardware para apresentação da atividade

  
  



Atividade 3 - Semáforo de cruzamento com  status LCD


  • Usando a mesma ligação entre o LCD e o Arduino desenvolvida na atividade 1, e utilizando como base o sketch do semáforo de cruzamento de duas vias (Semáforo - Atividade 2), adicione o módulo de LCD para indicar o estado de cada semáforo.
  • Utilize a criatividade para indicar no LCD o estado dos dois semáforos.


  • Montar a simulação
  • Montar o hardware para apresentação da atividade

  • Desafio extra: Monte para mostrar o cruzamento de 3 tempos

  
  



Atividade 4 - Contador binário no LCD


  • Usando a mesma ligação entre o LCD e o Arduino desenvolvida na atividade 1 e utilizando como base o sketch do contador binário com 4 botões:
    • Reset
    • Incrementa
    • Decrementa
    • Set
  • Utilize o módulo de LCD ao invés dos 8 leds para indicar o valor do contador.
  • Mostrar no LCD o valor do contador nos formatos:
    • Decimal
    • Binário
    • Hexadecimal


  • Montar a simulação
  • Montar o hardware para apresentação da atividade

  
  


Atividade 5 - Menu para controle de tempo

Construir um sketch para piscar um led com um tempo determinado
O sketch deve conter 3 botões que permitam:

  • OK - entrar e sair do menu
  • INC - Aumenta o tempo de on/off da rotina para piscar o led
  • DEC - Diminui o  tempo de on/off da rotina para piscar o led

Funcionamento do sketch:

  • Ao iniciar o programa pisca o led
  • Se o botão OK for pressionado o programa para de piscar o led e entra em um menu para aumentar ou diminuir o tempo de on/off da rotina para piscar o led




  • Montar a simulação
  • Montar o hardware para apresentação da atividade

  


Exemplo - Menu

O exemplo mostrado no sketch abaixo pisca um led. 
Ao pressionar o botão OK o programa para de piscar o led e entra no menu
Dentro do menu ao pressionar o botão OK o programa sai do menu volta piscar o led


Fluxograma de funcionamento do skecth


Diagrama de ligação do exemplo



Código do sketch de exemplo do menu
  



/*
  Nome: LCD_pr_Atv05_exemplo
  Menu de controle
  Biblioteca: LiquidCrystal

  Componentes:
  Módulo de LCD (Ver ligação abaixo)

  Usando a mesma ligação entre o LCD e o Arduino desenvolvida na atividade 1 e utilizando
  como base o sketch do contador binário com 4 botões(teste de botões)
    Menu/OK
    LED - para indicar uma atividade no loop principal
          Led piscante de acordo com um tempo
  Criar uma estrutura que permita entrar em um menu e sair dele
  Interface de saída - Módulo de LCD indicar o led em estado piscante ou as opções de Menu (troca
  de tempo.


  O circuito:
      Display LCD    -> Arduino

   Pino 1 - VSS     -> Pino GND
   Pino 2 - VDD     -> Pino +5V
   Pino 3 - VO      -> Central do Potenciômetro
   Pino 4 - RS      -> Pino digital 1
   Pino 5 - R/W     -> Pino digital 2
   Pino 6 - Enable  -> Pino digital 3
   Pino 7,8,9,10    -> Não conectado
   Pino 11 dados D4 -> Pino digital 4
   Pino 12 dados D5 -> Pino digital 5
   Pino 13 dados D6 -> Pino digital 6
   Pino 14 dados D7 -> Pino digital 7
   Pino 15 - Anodo  -> Pino +5V
   Pino 16 - Katodo -> Pino GND

   Potenciômetro
   Extremidade 1 -> Pino +5V
   Central       -> Pino 3 - VO do LCD
   Extremidade 2 -> Pino GND

   Led       Pino 11
   Botão ok  pino 8

  Baseado no exemplos button HelloWorld
  Baseado no sketch Contador Binário 5
  This example code is in the public domain.

  17/09/2018 - Tradução do cabeçalho e reordenamento das ligações do LCD e Arduino UNO
  por Luiz Oscar Pilger
  17/09/2018 - Modificação da pinagem Arduino (1 a 7) das ligações do LCD e Arduino UNO
  por Luiz Oscar Pilger
  17/09/2018 - Adição do controle do botão OK entrar e sair do menu e o lED
*/

// Inclui o código da biblioteca:
#include <LiquidCrystal.h>

// Associação entre os pinos do LCD e do Arduino
#define rs 1
#define rw 2
#define en 3
#define d4 4
#define d5 5
#define d6 6
#define d7 7
#define bt_ok 8
#define led 11
// Iniciliza a biblioteca com a associação para a interface LCD
LiquidCrystal lcd(rs, rw, en, d4, d5, d6, d7);
// variáveis de controle
byte tempo = 1; // varivale para indicar o tempo em s
bool menu = 0;

void delay_s (int segundos) {
  for (int i = 0; i < 100 * segundos; i++) {
    if (digitalRead(bt_ok) == 0) {   // testa o botão ok
      while (digitalRead(bt_ok) == 0); // espera soltar o botão ok
      menu = 1;                      // seta a variável menu para 1 para ter acesso ao menu
    }
    delay (10);
  }
}

void setup() {
  // inicializa os pinos digital OK INC DEC E LED
  pinMode(bt_ok, INPUT_PULLUP);  // iniciliaza o pino 8 como entrada com resistor de pull up ativado
  pinMode(led, OUTPUT);  // iniciliaza o pino 11 como saída
  lcd.begin(16, 2);           // Incializa o LCD com o número de Colunas(16) e Linhas(2):
}

void loop() {
  lcd.setCursor(0, 0);    // posiciona na primeira coluna (0) e primeira linha (0)
  lcd.print("Led Pisca T=");           // imprime texto
  lcd.print(tempo, DEC);         // imprime a variável x no formato decimal
  lcd.print("s");                  // imprime texto
  // pisca o led com o tempo especificado
  digitalWrite(led, HIGH);
  delay_s(tempo);
  digitalWrite(led, LOW);
  delay_s(tempo);
  // abre o menu
  while (menu == 1) {
    lcd.setCursor(0, 0);    // posiciona na primeira coluna (0) e primeira linha (0)
    lcd.print("Dentro Menu    ");           // imprime texto
    if (digitalRead(bt_ok) == 0) {   // testa o botão ok
      while (digitalRead(bt_ok) == 0); // espera soltar o botão ok
      menu = 0;                      // seta a variável menu para 0 para sair do menu
    }
  }
}


  



Nenhum comentário:

Postar um comentário