Pantalla Alfanumérica LCD 16X2 Con Arduino

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 10

Pantalla alfanumérica LCD 16X2 con

Arduino
Par esta experiencia, estaremos utilizando la librería LiquidCrystal que viene
integrada en la instalación del IDE de arduino y nos permite controlar toda clase
de pantallas compatibles con el controlador HD44780 ya sean de 16×2, 20×4 u
otras configuraciones de caracteres.
Como adicional a este articulo recomendamos la lectura de nuestro otro artículo,
donde explicamos como realizar la conexión de la pantalla LCD 16X2 a través de
un adaptador I2C, esto permite la comunicación con pantallas de este tipo usando
solamente dos pines.
Material de la práctica
 Arduino UNO R3
 Protoboard de 830 puntos
 Cables para conexión
 Potenciómetro de 10K
 Pantalla LCD 16×2 compatible con HD4470

¿Cómo utilizar una pantalla LCD 16×2 con


Arduino?
Usar una pantalla LCD 16×2 con Arduino puede ser algo complicado por la
cantidad de lineas de conexión que se requieren, por lo tanto dividiremos el
proceso en varias fases para facilitarlo:
 Conectar la pantalla LCD 16×2 a la alimentación de 5 volts, incluyendo la
alimentación de la iluminación led
 Colocar un potenciómetro para el ajuste de contraste
 Conectar los pines de datos a la pantalla (modo de 4 bits o modo de 8 bits)
 Conectar los pines de control RS y EN (de manera opcional el pin RW).
A continuación se muestran los diagramas de cada parte de este proceso de
conexión; El primer paso consiste en la conexión de la alimentación, hay que
fijarnos en la polaridad para evitar dañar la pantalla. En este caso utilizaremos
los pines VSS(-), VDD(+), A(+) y K(-) para brindar la alimentación.
El siguiente paso es conexión de un potenciómetro de 10K que permite el ajuste
del contraste, los extremos del potenciómetro van al positivo y negativo de la
alimentación, mientras que el cursor (centro) va al pin VO del módulo LCD.
A continuación conectamos los pines de datos D4, D5, D6, D7. Utilizaremos
solamente estos 4 pines ya que operaremos la pantalla en Modo de 4 bits.
Finalmente realizamos la conexión de los pines de control RS y E. El pin RW es
opcional y en este caso no lo usamos para ahorrar un pin y mantener todo más
simple.
Programa prueba

1 /**
2 GeekFactory - "INNOVATING TOGETHER"
3 Distribucion de materiales para el desarrollo e innovacion tecnologica
4 www.geekfactory.mx
5
6 EJEMPLO BASICO PARA EL USO DEL LCD 16X2 CON ARDUINO. MUESTRA UN TEXTO QUE
7 RECORRE
8 LA PANTALLA DE UN LADO A OTRO. ESTE PROGRAMA SIRVE COMO PRUEBA DEL
9 CORRECTO
10 FUNCIONAMIENTO DE NUESTRO CONEXIONADO Y TAMBIEN ILUSTRA COMO REALIZAR
11 OPERACIONES
12 CON EL CURSOR, BORRAR LA PANTALLA Y MOSTRAR CADENAS DE TEXTO.
13 */
14 #include <LiquidCrystal.h>
15
16 // CONSTRUCTOR PARA LA PANTALLA LCD 16X2
17 // AQUI SE CONFIGURAN LOS PINES PARA LA COMUNICACION CON LA PANTALLA
18 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
19
20 void setup()
21 {
22 // INDICAMOS QUE TENEMOS CONECTADA UNA PANTALLA DE 16X2
23 lcd.begin(16, 2);
24 // MOVER EL CURSOR A LA PRIMERA POSICION DE LA PANTALLA (0, 0)
25 lcd.home();
26 // IMPRIMIR "Hola Mundo" EN LA PRIMERA LINEA
27 lcd.print("Hola Mundo");
28 // MOVER EL CURSOR A LA SEGUNDA LINEA (1) PRIMERA COLUMNA (0)
29 lcd.setCursor ( 0, 1 );
30 // IMPRIMIR OTRA CADENA EN ESTA POSICION
31 lcd.print("GEEKFACTORY");
32 // ESPERAR UN SEGUNDO
33 delay(1000);
34 }
35
36 void loop()
37 {
38 // EN EL CICLO PRINCIPAL SOLAMENTE RECORREMOS EL MENSAJE DE UN LADO A OTRO
39 // VARIABLE PARA CONTROL DE CICLOS
40 int i;
41
42 // DESPLAZAR LA PANTALLA A LA DERECHA 2 VECES
43 for ( int i = 0; i < 5; i++ ) {
44 lcd.scrollDisplayRight();
45 delay (1000);
46 }
47
48 // DESPLAZAR LA PANTALLA A LA IZQUIERDA 2 VECES
49 for ( int i = 0; i < 5; i++ ) {
50 lcd.scrollDisplayLeft();
delay (1000);
}
}

Códigos utilizados para pruebas

RECIBIR UN ÚNICO DÍGITO


Igual que cuando vimos cómo recibir un único carácter, recibir un único dígito es
muy sencillo y eficiente. De hecho, es prácticamente idéntico a recibir un carácter, pero
posteriormente eliminamos el valor de '0' para convertir el char a integer.

1 #define DEBUG(a) Serial.println(a);


2
3 void setup()

4 {
5 Serial.begin(9600);
6 }
7

8 void loop()
9 {
10 if (Serial.available())
11 {

12 char data = Serial.read();


13
14 if (data >= '0' && data <= '9')
15 {

16 data -= '0';
17 DEBUG((int)data);
18 }
19 }
20 }

La eficiencia del método es máxima, ya que apenas contiene procesamiento. La


mayor desventaja, lógicamente, es que únicamente podemos recibir un dígito. Aunque
generalmente es insuficiente, puede ser útil para recibir una transmisión sencilla, como
la opción de un menú o el número de parpadeos de un LED.

RECIBIR CON CLASE SERIAL


Si queremos recibir números de más de un dígito, que es lo normal, tenemos varias
opciones disponibles. La primera que vamos a ver es emplear las funciones de la clase
Serial, Serial.ParteInt() y Serial.ParseFloat().

Así, el siguiente ejemplo recibe un número entero.

1 #define DEBUG(a) Serial.println(a);

2
3 void setup()
4 {
5 Serial.begin(9600);

6 Serial.setTimeout(50);
7 }
8
9 void loop()

10 {
11 if (Serial.available())
12 {
13 int data = Serial.parseInt();

14 DEBUG((int)data);
15 }
}

Mientras que la recepción de un float sería la siguiente


#define DEBUG(a) Serial.println(a);

void setup()

{
Serial.begin(9600);
Serial.setTimeout(50);
}

void loop()
{
if (Serial.available())
{
float data = Serial.parseFloat();
DEBUG(data);
}
}
Codigo final implementado a checar lo del lcd

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
Serial.begin(9600);
Serial.setTimeout(50);

// set up the LCD's number of columns and rows:


lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("RESULTADO"); //revisa lo de los espacios para que quede en medio

void loop() {
// set the cursor to column 0, line 1

// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
if (Serial.available())

{
int data = Serial.parseInt();
lcd.print(data);
}

También podría gustarte