Revista Informática

27.- LCD Keypad Shield27.- LCD Keypad Shield

Publicado el 24 diciembre 2013 por Practicandoarduino @PracticaArduino

Hola a todos, en este tutorial vamos a aprender a usar un LCD Keypad Shield, el sketch es muy sencillo, lo único que hace es dependiendo del botón que pulsemos, multiplica por 10 un número, lo divide por 10, le suma o le resta 1 o lo multiplica por si mismo. Si pulsamos reset volvemos al estado inicial.

LCD Keypad Shield

No diré nada sobre conexiones ya que el LCD Keypad Shield se conecta directamente sobre nuestra placa Arduino, no hay que hacer nada más, en este caso como no vamos a interactuar con más no hace falta hacer ninguna conexión.

Código fuente:

 
#include <LiquidCrystal.h>
 
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int pulsacion, oldpulsacion;
double valor=2.0;
void setup() {
  lcd.begin(16, 2);
  lcd.clear();
  Serial.begin(9600);
}
 
void loop() {
  pulsacion=analogRead(0);
  Serial.println(pulsacion);
  if (pulsacion!=oldpulsacion & abs(pulsacion-oldpulsacion)>1){
    switch (pulsacion){
     case 0:
       valor=valor*10;
       break;
     case 258:
       valor--;
       break;
     case 101:
       valor++;
       break;
     case 413:
       valor=valor/10;
       break;
     case 642:
       valor=valor*valor; 
    }
    lcd.print("Usando LCD");
    lcd.setCursor(0,1);
    lcd.print(valor);
    lcd.setCursor(0,0);
    oldpulsacion=pulsacion;
  }
 
}

Vamos a ver el código, en primer lugar incluimos la libreria LiquidCrystal que es la encargada de controlar el LCD Keypad Shield y configuramos sus pins (en mi caso 8,9,4,5,6,7), tened en cuenta que dependiendo del fabricante varían.
En el void setup() indicamos que el lcd (en mi caso) tiene 2 lineas y 16 caracteres por linea, lo limpiamos, lo cual borra la pantalla y coloca el cursor en la posición 0,0 que el primer caracter de la primera linea.
Para leer los botones usamos la entrada analógica 0, y según el valor leído actuamos. Aclaro que no me convence mucho este método ya que si haceis un sketch para que muestre por el Lcd Keypad shield el valor que devuelve la pulsación y que ese mismo valor salga por el monitor serie vereis que son distintos. Usando los que aparecen en el monitor serie funciona el sketch así que tomé dichos valores. Con las variables pulsacion y oldpulsacion controlamos que cuando el usuario deje pulsado el boton este solo haga una operación, el problema es que algunos botones nod an un valor fijo al pulsarlo, sino que varia en un dígito, por eso la segunda comprobación del if, si el valor absoluto de su resta es mayor que 1 es que hemos pulsado otro botón si no es que sigue pulsado el mismo pero ha variado en un dígito.
Actuamos sobre nuestra variable valor, la mostramos y actualizamos pulsación.



style="display:inline-block;width:728px;height:15px"
data-ad-client="ca-pub-3868159888315364"
data-ad-slot="7639712738">

Hello everyone, in this tutorial we will learn how to use an LCD Keypad Shield, the sketch is very simple, all it does is depending on the button you press , multiplies number by 10 , divide it by 10, adds or subtracts 1to it and to multiply it by itself . If you press reset button it backs to the initial state.

LCD Keypad Shield

I will not say anything about connections because the LCD Keypad Shield connects directly on our Arduino , we don’t need to do anything else, in this case as we will not interact with anything moreIt is unnecessary to make any connection.

Source code:

 
#include <LiquidCrystal.h>
 
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int pulsacion, oldpulsacion;
double valor=2.0;
void setup() {
  lcd.begin(16, 2);
  lcd.clear();
  Serial.begin(9600);
}
 
void loop() {
  pulsacion=analogRead(0);
  Serial.println(pulsacion);
  if (pulsacion!=oldpulsacion & abs(pulsacion-oldpulsacion)>1){
    switch (pulsacion){
     case 0:
       valor=valor*10;
       break;
     case 258:
       valor--;
       break;
     case 101:
       valor++;
       break;
     case 413:
       valor=valor/10;
       break;
     case 642:
       valor=valor*valor; 
    }
    lcd.print("Usando LCD");
    lcd.setCursor(0,1);
    lcd.print(valor);
    lcd.setCursor(0,0);
    oldpulsacion=pulsacion;
  }
 
}

Let’s see the code, first we include LiquidCrystal library that is responsible for controlling the LCD Keypad Shield and we configure their pins (in my case 8,9,4,5,6,7 ) , note that depending on the manufacturer they vary.
In void setup () we indicate that the lcd ( in my case) has 2 lines and 16 characters per line , we clean it , this clears the screen and places the cursor at the position 0.0, the first character of the first line
To read the buttons we use analog input 0 , and according to the value read we act. I clarify that I am not very convinced by this method because if you do a sketch to show the value returned by analogRead() in LCD Keypad shield and to show that same value in the Serial monitor you will see they are different. Using the monitor displayed value in the sketch, it works so I took those values. With oldpulsacion and pulsation variables we control when the user keep pressing the button the system only do one operation instead of one on each clock cycle, the problem is that some buttons do not give an unique value when are pressed , it varies in one single digit, is for that we do the second check in the if, if absolute value of subtraction is greater than 1, it means we pressed another button, if not, it means we continue pressing the same button but has changed one digit.
We act on our variable value, then we shot it and we update pulsacion.



style="display:inline-block;width:728px;height:15px"
data-ad-client="ca-pub-3868159888315364"
data-ad-slot="7639712738">


Volver a la Portada de Logo Paperblog