Conectar Pantalla LCD A Arduino UNO e Interactuar Con Ella
Conectar Pantalla LCD A Arduino UNO e Interactuar Con Ella
Conectar Pantalla LCD A Arduino UNO e Interactuar Con Ella
temperatura
Fecha Monday, 19 November a las 23:25:45
Tema Hardware
http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=627
Explicamos en este tutorial cómo conectar una pantalla LCD a Arduino UNO.
Mostramos varios ejemplos de código para interacturar con los botones del
shield LCD (keypad) de la pantalla LCD para movernos por los menús.
Explicamos también cómo cambiar la luminosidad de la
pantalla LCD (intensidad de la retroiluminación) desde el menú (con los
keypad) y cómo conectar un sensor de temperatura y mostrarla en la
pantalla LCD.
void setup() {
// establecemos el numero de columnas y filas del display
lcd.begin(16, 2);
// enviamos el mensaje a mostrar en el display
lcd.print("www.ajpdsoft.com");
}
void loop() {
// enviamos la posicion del cursor al display
// (nota: la linea 1 es la segunda fila, empieza a contar en 0
lcd.setCursor(0, 1);
// mostramos el numero de segundos desde el inicio del programa
lcd.print(millis()/1000);
}
Comprobaremos la sintaxis pulsando en "Verificar":
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("www.ajpdsoft.com");
delay(1000);
}
void loop() {
// scroll 13 positions (string length) to the left
// to move it offscreen left:
for (int positionCounter = 0; positionCounter < 13;
positionCounter++) {
// scroll one position left:
lcd.scrollDisplayLeft();
// wait a bit:
delay(150);
}
void setup()
{
lcd.clear();
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("www.ajpdsoft.com");
time = millis();
// pinMode(10, OUTPUT);
}
void loop()
{
if (millis()-time > 10000) { // Si han pasado mas de 10 segundos
apagamos la luz
pinMode(10, OUTPUT);
digitalWrite(10, LOW);
luzEncendida=false;
}
if (millis()-time > 5000) { // Si han pasado mas de 5 segundos
apagamos el cursor
lcd.noBlink();
cursorActivo=false;
}
char tituloMenu[numeroDeMenus][16] = {
"1 Menu 1 ",
"2 Menu 2 ",
"3 Menu 3 ",
"4 Menu 4 ",
"5 Menu 5 " };
char tituloSubmenu[numeroDeMenus][numeroMaximoDeSubmenus][16] =
{
"1.1 Submenu 1","1.2 Submenu 2","1.3 Submenu 3","1.4 Submenu 4",
"2.1 Submenu 1","2.2 Submenu 2","2.3 Submenu 3","",
"3.1 Submenu 1","3.2 Submenu 2","","",
"4.1 Submenu 1","","","",
"5.1 Submenu 1","5.2 Submenu 2","5.3 Submenu 3","5.4 Submenu 4"};
int adc_key_val[5] ={
50, 200, 400, 600, 800 };
int NUM_KEYS = 5;
int adc_key_in;
int key=-1;
int oldkey=-1;
boolean luzEncendida=true;
boolean cursorActivo=false;
unsigned long time;
int x=0;
int y=0;
void setup()
{
lcd.clear();
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("www.ajpdsoft.com");
lcd.setCursor(0,1);
lcd.print("Menu version 0.1");
delay(5000);
lcd.setCursor(0,0);
lcd.print("Muevase con las ");
lcd.setCursor(0,1);
lcd.print("teclas direccion");
delay(4000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Menu principal");
lcd.setCursor(0,1);
lcd.print(tituloMenu[x]);
time = millis();
// pinMode(10, OUTPUT);
}
void loop()
{
// Si han pasado mas de 10 segundos apagamos la luz
if (millis()-time > 10000) {
pinMode(10, OUTPUT);
digitalWrite(10, LOW);
luzEncendida=false;
}
// Si han pasado mas de 5 segundos apagamos el cursor
if (millis()-time > 5000) {
lcd.noBlink();
cursorActivo=false;
}
#include
#include
#define ThermistorPIN 1 // Analog Pin 1
#define NUM_KEYS 5
/*
Circuito del dispaly LCD:
* LCD RS pin to digital pin 8
* LCD Enable pin to digital pin 9
* LCD D4 pin to digital pin 4
* LCD D5 pin to digital pin 5
* LCD D6 pin to digital pin 6
* LCD D7 pin to digital pin 7
* LCD BL pin to digital pin 10
* KEY pin to analogl pin 0
*
* Esquema del sensor de temperatura:
* [Ground] -- [10k-pad-resistor] -- | -- [10k thermistor] --[Vcc
(5v)]
* |
* Analog Pin 1
*/
char tituloMenu[numeroDeMenus][16] = {
"Fijar Temp.: ",
"Fijar Tiempo:",
"Kp: ",
"Kd: ",
"Ki: ",
"Intensidad: " };
int adc_key_val[5] ={
50, 200, 400, 600, 800 };
int adc_key_in;
int key=-1;
int oldkey=-1;
boolean luzEncendida=true;
boolean cursorActivo=false;
boolean enMenu=false;
unsigned long time;
unsigned long tiempoPID;
byte numeroLecturas=0;
int x=0;
int signo=0;
char temp[10];
int lecturas[100];
byte numeroLectura=0;
//int lectura=0;
int maximo, minimo, diferencia, t1, t2, t3;
byte consigna=25;
byte tiempo=1;
byte kp=1;
byte kd=1;
byte ki=1;
byte intensidad=10;
void setup()
{
cargarConfig();
pinMode(10, OUTPUT);
analogWrite(10,intensidad*25);
Serial.begin(9600);
lcd.clear();
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("www.ajpdsoft.com");
lcd.setCursor(0,1);
lcd.print("C.Ventanas v1.0 ");
delay(2000);
// lcd.setCursor(0,0);
// lcd.print("Muevase con las ");
// lcd.setCursor(0,1);
// lcd.print("teclas direccion");
// delay(4000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temperatura: ");
lcd.setCursor(0,1);
int lectura=getTemp(1);
sprintf(temp, "%3d%c%1d%cC", lectura/100, '.', lectura/10%10,223);
lcd.print(temp);
time = millis();
tiempoPID = millis();
}
void loop()
{
int lectura = getTemp(ThermistorPIN);
lecturas[numeroLectura++] = lectura;
if (millis()-time > 20000) { // Si han pasado mas de 20 segundos
apagamos la luz
digitalWrite(10, LOW);
luzEncendida=false;
}
if (millis()-time > 7000) { // Si han pasado mas de 7 segundos
salimos del menu
if (enMenu) guardarConfig();
enMenu = false;
x=0;
time = millis();
// }
// if (!enMenu) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temperatura: ");
lcd.setCursor(0,1);
sprintf(temp, "%3d%c%1d%cC", lectura/100, '.', lectura/10%10,223);
lcd.print(temp);
// Serial.print("Temperatura[");
// Serial.print(numeroLectura);
// Serial.print("]: ");
// Serial.println(temp);
}
if (millis()-time > 5000) { // Si han pasado mas de 5 segundos
apagamos el cursor
lcd.noBlink();
cursorActivo=false;
}
// Serial.print("Temperatura[");
// Serial.print(i);
// Serial.print("]: ");
// Serial.println(lecturas[i]);
}
diferencia = maximo - minimo;
suma = suma / 100;
// Si la diferencia es superior a un grado
//es que ha habido un error en la lectura
if (diferencia > 100) {
Serial.println("Lectura no valida");
// TODO: Descartar lectura y repetir la medida
}
else {
numeroLecturas++;
t3=t2;
t2=t1;
t1=suma;
}
Serial.print("Suma: ");
Serial.println(suma);
/* Serial.print("Media: ");
Serial.print(suma/100);
Serial.print(",");
Serial.println(suma/10%10);
Serial.print("Maximo: ");
Serial.print(maximo/100);
Serial.print(",");
Serial.print(maximo/10%10);
Serial.print(" - Minimo: ");
Serial.print(minimo/100);
Serial.print(",");
Serial.print(minimo/10%10);
Serial.print(" - Diferencia: ");
Serial.print(diferencia/100);
Serial.print(",");
Serial.println(diferencia/10%10); */
}
if (numeroLectura > 99) {
// Cuando se termina de tomar las 100
//lecturas empezamos de nuevo por la primera
numeroLectura = 0;
}
PID();
delay(10);
// Si se desborda millis() empieza otra
//vez por cero, ocurre cada 50 dias
if (millis() < time){
time = millis();
}
}
void PID(){
// Si se desborda millis() empieza otra
// vez por cero, ocurre cada 50 dias
if (millis() < tiempoPID){
tiempoPID = millis();
}
// Si no ha pasado todavía el timepo de ciclo del PID
if (millis() < tiempoPID + (tiempo*10*1000)){
// entonces mantenemos la fuerza y esperamos mas tiempo
// s = sActualPID;
}
else if (numeroLecturas >= 2){
numeroLecturas--;
Serial.print("Distancia a la consigna: ");
Serial.print(t1-consigna*100);
Serial.print(" - Velocidad: ");
Serial.println(t1-t2);
tiempoPID = millis();
}
boolean cargarConfig(){
if ((EEPROM.read(0) == 27) && (EEPROM.read(1) == 28) &&
(EEPROM.read(2) == 13) && (EEPROM.read(3) == 18)) {
// Comprobamos que la eeprom tenga una
// configuracion valida con numeros concretos
// solo cargamos el valor de la configuracion si los valores
coinciden
if (EEPROM.read(4) == EEPROM.read(5)) consigna = EEPROM.read(4);
if (EEPROM.read(6) == EEPROM.read(7)) tiempo = EEPROM.read(6);
if (EEPROM.read(8) == EEPROM.read(9)) kp = EEPROM.read(8);
if (EEPROM.read(10) == EEPROM.read(11)) kd = EEPROM.read(10);
if (EEPROM.read(12) == EEPROM.read(13)) ki = EEPROM.read(12);
if (EEPROM.read(14) == EEPROM.read(15)) intensidad =
EEPROM.read(14);
return true;
}
return false;
}
void guardarConfig(){
EEPROM.write(0,27);
EEPROM.write(1,28);
EEPROM.write(2,13);
EEPROM.write(3,18);
// Ponemos nmeros concretos en el comienzo
// de la EEPROM para confirmar que tiene valores correctos.
EEPROM.write(4,consigna);
EEPROM.write(5,consigna); // almacenamos los valores 2 veces
EEPROM.write(6,tiempo);
EEPROM.write(7,tiempo); // almacenamos los valores 2 veces
EEPROM.write(8,kp);
EEPROM.write(9,kp); // almacenamos los valores 2 veces
EEPROM.write(10,kd);
EEPROM.write(11,kd); // almacenamos los valores 2 veces
EEPROM.write(12,ki);
EEPROM.write(13,ki); // almacenamos los valores 2 veces
EEPROM.write(14,intensidad);
EEPROM.write(15,intensidad); // almacenamos los valores 2 veces
}