Social Icons

Reconhecendo Teclas com Shield LCD



Fiz um Exemplo rápido de como "Lêr" as teclas da shield LCD, é bem simples, todos os botões são ligados na mesma entrada Analógica, a 0, por isso para diferenciar as teclas são usados resistores, fazendo com que valores diferentes sejam interpretados pelo arduino.
Não sei se é o caso de todas mas na minha as teclas são organizadas dessa forma:


Fotos em Breve...

------------------------------------------------------------------
Tecla         - Valor:
Cima          - 146
Baixo         - 334
Direita        - 0
Esquerda    - 511
Selecionar   - 745
------------------------

Qualquer coisa se não for este valor, ou quiser saber como ligar faça assim:






1) Ache o Datasheet da Sua Shield e confira qual pino Analógico dos botões.
2) Coloque este código em seu arduino substituindo o indicado pelas suas informações.
3) Anote o valor de cada tecla e faça um "coeficiente de cagaço" ou seja a margem de erro, de uns 50 para mais e para menos, mas cuide para que este 50 para mais ou para menos não entre no valor de outra tecla.


#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //use a pinagem de seu arduino
void setup(){
lcd.begin(16,2);
Serial.begin(9600);
}
void loop(){
  delay(1000);
  lcd.clear();
  int tecla_valor = analogRead(0);// 0  é o pino da sua entrada analógica
  lcd.print(tecla_valor);//tecla_valor armazena o valor lido e joga pra tela LCD.

}
5) Aqui está o código com os valores da minha Shield, ele lê a tecla e mostra qual é na tela.
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //use a pinagem de seu arduino
void setup(){
lcd.begin(16,2);
Serial.begin(9600);
}
void loop(){
  delay(90);
  lcd.clear();
  int tecla_valor = analogRead(0);
  if (tecla_valor == 0)
{
  lcd.print("Direita 0");
  delay(100);
}
if ((tecla_valor >= 120) & (tecla_valor <= 146))
{
 
  lcd.print("Cima 146");
delay(100);
}
if ((tecla_valor >= 300) & (tecla_valor <= 350))
{
  lcd.print("Baixo 334");
  delay(100);
}
if ((tecla_valor >= 500) & (tecla_valor <= 530))
{
  lcd.print("Esquerda 511");
  delay(100);
}
if ((tecla_valor >= 700) & (tecla_valor <= 790))
{
  lcd.print("Selecionar 745");
  delay(100);
}
delay(50);
}

Como prometido criei um "menuzinho", percebam que está cheio de bugs ainda, quando você vai pra negativo e volta pra positivo ficam números errados na tela, e várias outras coisas, mas como estou ainda em fase de testes nesse projeto do Relógio vou desenvolver um menu para poder alterar a hora do relógio pelo sistema mesmo e não mais pelo source, então vou aos poucos mudando o código abaixo...
Se alguém conseguir avanços poste ai, OpenSource é isso!


#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //use a pinagem de seu arduino
int up;
int down;
int nothing;
int right;
int left;
int enter;
int sel;
int x;
int y;
void setup() {   
lcd.begin(16, 2);
lcd.write(0);
sel = 0;
x = 0;
y = 0;
up = 0;
down = 0;
right = 0;
left = 0;
enter = 0;
nothing = 0;
}
void loop(){
  delay(100);
 
int tecla_valor = analogRead(0); 
if (tecla_valor == 1023){
up = 0;
down = 0;
right = 0;
left = 0;
enter = 0;
nothing = 1;
}
if (tecla_valor == 0)
{
  right = 1;
}
if ((tecla_valor >= 120) & (tecla_valor <= 146))
{
  up = 1;
}
if ((tecla_valor >= 300) & (tecla_valor <= 350))
{
  down = 1;
}
if ((tecla_valor >= 500) & (tecla_valor <= 530))
{
  left = 1;
}
if ((tecla_valor >= 700) & (tecla_valor <= 790))
{
  enter = 1;
}
delay(50);


lcd.setCursor(x,y);

if (down == 1){
  sel = sel -1;
}

if (up == 1){
  sel = sel + 1;
}
if (enter == 1) {
  (x=x+1);
}
lcd.print(sel);

}


Mais um exemplo, mas esse com menus escritos, tem 3 menus mas pode expandir para mais menus e sub-menus....


#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //use a pinagem de seu arduino
int up;
int down;
int nothing;
int right;
int left;
int enter;
int sel;
int x;
int y;
void setup() {  
lcd.begin(16, 2);
lcd.write(0);
sel = 1;
x = 0;
y = 0;
up = 0;
down = 0;
right = 0;
left = 0;
enter = 0;
nothing = 0;
}
void loop(){
 

int tecla_valor = analogRead(0);
if (tecla_valor == 1023){
up = 0;
down = 0;
right = 0;
left = 0;
enter = 0;
nothing = 1;
}
if (tecla_valor == 0)
{
  right = 1;
}
if ((tecla_valor >= 120) & (tecla_valor <= 146))
{
  up = 1;
}
if ((tecla_valor >= 300) & (tecla_valor <= 350))
{
  down = 1;
}
if ((tecla_valor >= 500) & (tecla_valor <= 530))
{
  left = 1;
}
if ((tecla_valor >= 700) & (tecla_valor <= 790))
{
  enter = 1;
}
delay(120);

if (right == 1){
sel++;
 }
if (left == 1){
sel--;
 }

if (sel<=1){
  sel =1;
  lcd.clear();
lcd.print("     MENU 1  >> ");
 }
if (sel==2){
  lcd.clear();
lcd.print(" <   MENU 2   > ");
 }
if (sel>=3){
  sel=3;
  lcd.clear();
lcd.print(" <<  MENU 3    ");
 }
}

Nenhum comentário:

Postar um comentário