En este proyecto vamos a ver cómo conectar un display LCD de texto al Arduino.
Se trata de un display monocromo de 16 caracteres por 2 filas.
Empezaremos mostrando mensajes de texto sencillos.
Más información sobre LCD´s en arduino.cc y tronixstuff.com
#include <LiquidCrystal.h>
LiquidCrystal lcd(4, 5, 6, 7, 8, 9); // pins for RS, E, DB4, DB5, DB6, DB7
void setup()
{
lcd.begin(16, 2);
lcd.clear();
}
void loop()
{
lcd.setCursor(0, 0);
lcd.print("Hola");
lcd.setCursor(0, 1);
lcd.print("Mundo");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Practicando con");
lcd.setCursor(0, 1);
lcd.print("Arduino");
delay(2000);
lcd.clear();
}
Hemos visto como mostrar texto en la pantalla de un LCD. Para mostrar más de dos líneas de texto había que borrar la pantalla y sacar el siguiente mensaje.
En el siguiente ejemplo veremos como hacer scrolling con un texto, cuando éste es demasiado largo para mostrarlo por pantalla.
El circuito empleado es el mismo que en el ejemplo anterior, sólo cambia el código utilizado.
#include <LiquidCrystal.h>
LiquidCrystal lcd(4, 5, 6, 7, 8, 9); // pins for RS, E, DB4, DB5, DB6, DB7
void setup()
{
lcd.begin(16, 2);
lcd.clear();
}
void loop()
{
matrix("Hola Mundo. Practicando con Arduino y displays LCD");
delay(1000);
lcd.clear();
}
void matrix( char *text)
{
int length = strlen(text); // the number of characters in the text
if(length < 16)
lcd.print(text);
else
{
int pos;
for( pos = 0; pos < 16; pos++)
lcd.print(text[pos]);
delay(1000); // allow time to read the first line before scrolling
pos=1;
while(pos <= length - 16)
{
lcd.setCursor(0,0);
for( int i=0; i < 16; i++)
lcd.print(text[pos+i]);
delay(300);
pos = pos + 1;
}
}
}
En este ejemplo vamos a hacer un circuito para medir distancias, empleando el sensor de ultrasonidos de prácticas anteriores.
El resultado se mostrará en el display LCD.
#include <LiquidCrystal.h>
LiquidCrystal lcd(4, 5, 6, 7, 8, 9); // pins for RS, E, DB4, DB5, DB6, DB7
#define echoPin 2
#define trigPin 3
long duration, distance, contador;
float aux;
void setup()
{
lcd.begin(16, 2);
lcd.clear();
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration/58.2;
lcd.setCursor(0, 0);
lcd.print("Distancia cm:");
lcd.setCursor(0, 1);
lcd.print(distance);
delay(2000);
lcd.clear();
}
Mediante el sensor DHT11, obtendremos las medidas de temperatura y humedad y las mostraremos en el display.
#include "DHT.h"
#include <LiquidCrystal.h>
LiquidCrystal lcd(4, 5, 6, 7, 8, 9); // pins for RS, E, DB4, DB5, DB6, DB7
#define DHTPIN 3 // what pin we're connected to
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
dht.begin();
lcd.begin(16, 2);
lcd.clear();
}
void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
int h = dht.readHumidity();
int t = dht.readTemperature();
// check if returns are valid, if they are NaN (not a number) then something went wrong!
if (isnan(t) || isnan(h)) {
lcd.setCursor(0, 0);
lcd.print("Failer read DHT");
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Humedad:");
lcd.setCursor(13, 0);
lcd.print(h);
lcd.setCursor(15, 0);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("Temperatura:");
lcd.setCursor(13, 1);
lcd.print(t);
lcd.setCursor(15, 1);
lcd.print("*");
delay(2000);
}
}