fbpixel
Etiquetas: ,

Um dos elementos de exibição de informação mais utilizados no mundo Arduino é o LCD (Liquid Crystal Display) 16×2. Ao construir um sistema eletrônico, pode ser interessante poder obter informações sobre o seu estado sem ter de ligá-lo a um computador ou a outro sistema como um smartphone. O LCD 16×02 é fornecido com um grande número de kits Arduino e é suficiente para diversas aplicações.

O LCD 16×2 pode ser encontrado montado num shield, com alguns botões adicionais para criar interfaces programáveis simples que permitem exibir valores e controlar projetos Arduino. Tudo isso com uma montagem muito fácil.

Material

  • Computador
  • Arduino UNO
  • Cabo USB A Macho/B Macho
  • Shield LCD

Princípio de funcionamento

arduino-lcd-16x2-shield Usar um shield LCD 16x2 com o Arduino

Os ecrãs de cristal líquido fazem uso da propriedade de modulação da luz dos cristais líquidos. Eles consistem em duas camadas de polarizadores com direções de polarização perpendiculares, fazendo um “sanduíche” com duas placas de vidro contendo cristais líquidos entre elas. Sobre as placas de vidro, há uma matriz de eletrodos para cada pixel. Uma tensão aplicada entre os eletrodos de um pixel provoca mudança na orientação das moléculas e, portanto, na transparência do pixel, que pode deixar passar a luz da retroiluminação ou não.

Esquema

O shield LCD é compatível com as placas Arduino UNO e Mega e é colocado diretamente sobre a placa. Em resumo, os pinos utilizados são:

  • A0 para leitura dos botões
  • pinos 8, 9, 4, 5, 6, 7 para gerir o ecrã LCD

O botão RST é ligado diretamente ao botão reset da placa Arduino.  

Código

Com o seu módulo devidamente ligado, pode modificar o código abaixo para obter a funcionalidade que deseja. No exemplo seguinte, definimos uma função que lê o valor dos botões e executa uma ação dependendo do botão pressionado.

Quando determinado botão é pressionado, o seu nome e valor são exibidos. Pode ser que o seu shield seja diferente, dependendo do fornecedor e da versão. Se for o caso, este código permite modificar facilmente os valores de detecção dos botões.

Para gerir o ecrã LCD 16×2 no programa, a biblioteca utilizada é a LiquidCrystal.h, cujas funções a conhecer são as seguintes:

  • LiquidCrystal lcd(rs, en, d4, d5, d6, d7) para definir a comunicação de 4bits;
  • lcd.begin(16, 2); para inicializar o ecrã;
  • lcd.print() para exibir uma cadeia de caracteres em ASCII;
  • lcd.write() para exibir dados, um byte por vez.;
  • lcd.setCursor(x, y) para posicionar o cursor (coluna x: 0-16, linha y:0-2);
  • lcd.clear() para limpar o que é exibido no ecrã.
//Libraries
#include <LiquidCrystal.h>//https://arduino.cc/en/Reference/LiquidCrystal

//Parameters
const int btnsPin  = A0;
int btnsVal  = 0;

//Objects
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);;

//Enums
enum {
  BUTTON_NONE,
  BUTTON_UP,
  BUTTON_DOWN,
  BUTTON_LEFT,
  BUTTON_RIGHT,
  BUTTON_SELECT,
};

void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
  //Init LCD16x2 Shield
  lcd.begin(16, 2);
  lcd.print(F("Hello World "));
  delay(2000);
  lcd.clear();
  lcd.print(F("Button pressed: "));
}

void loop() {
  btnListener(getBtnPressed());
}

void btnListener(byte btnStatus) { /* function btnListener */
  //// Get button value when pressed
  lcd.setCursor(0, 1);
  switch (btnStatus) {
    case BUTTON_UP:
      lcd.print(F("UP     "));
      lcd.print(btnsVal);
      break;

    case BUTTON_DOWN:
      lcd.print(F("DOWN   "));
      lcd.print(btnsVal);
      lcd.print("   ");
      break;

    case BUTTON_LEFT:
      lcd.print(F("LEFT   "));
      lcd.print(btnsVal);
      lcd.print("   ");
      break;

    case BUTTON_RIGHT:
      lcd.print(F("RIGHT  "));
      lcd.print(btnsVal);
      lcd.print("   ");
      break;

    case BUTTON_SELECT:
      lcd.print(F("SELECT "));
      lcd.print(btnsVal);
      lcd.print("   ");
      break;

    default://case BUTTON_NONE:
      //lcd.print(F("       "));
      break;
  }
  delay(100);
}

byte getBtnPressed() { /* function getBtnPressed */
  //// Get button value when pressed
  btnsVal = analogRead(btnsPin);
  if (btnsVal < 50)
    return BUTTON_RIGHT;
  else if (btnsVal < 250)
    return BUTTON_UP;
  else if (btnsVal < 350)
    return BUTTON_DOWN;
  else if (btnsVal < 450)
    return BUTTON_LEFT;
  else if (btnsVal < 650)
    return BUTTON_SELECT;
  else
    return BUTTON_NONE;
}

Aplicações

  • Criar uma interface simples para o seu projeto Arduino

Fontes

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie