/*
 Biblioteca LiquidCrystal
 Hola mundo con control de contraste

 Demuestra cómo funciona una pantalla de cristal líquido en base al
 chip Hitachi HD44780 con interfaz paralela de 16 contáctos.
 
 Bibioteca agregada originalmente el 18 Apr 2008 por David A. Mellis
 Modificada el 2009-07-05 por Limor Fried (http://www.ladyada.net)
 Ejemplo agregado el 2009-07-09 por Tom Igoe
 Modificado el 2009-07-25 por David A. Mellis
 Modificado en 2010-04 por Antonio Maldonado (http://www.confusion.com.mx)
*/

//Incluír la biblioteca:
#include <LiquidCrystal.h>

//Inicializa la biblioteca con las terminales adecuadas
LiquidCrystal LCD(7, 8, 9, 10, 11, 12);
int estadoBt1 = 0;
int estadoBt2 = 0;
int contraste = 100;

void setup() {
  //Configura el tamaño del LCD en filas y columnas
  LCD.begin(20, 4);
 
  //Se usa la terminal 6 para manejar el voltaje de la luz de contraste
  pinMode(6,OUTPUT);
  analogWrite(6,contraste);

  //Dejamos que el cursor parpade
  LCD.blink();

  //Para los botones que regularan el contraste 
  pinMode(5,INPUT);
  pinMode(4,INPUT);
}

void loop() {
  //Si el botón 1 está activado, se sube el contraste aumentando el voltaje
  if( estadoBt1 == LOW && digitalRead(4) == HIGH ) {
    estadoBt1=HIGH;
    contraste++;
  } else {
    estadoBt1 = LOW;
  }

  //Si el botón 2 está activado, se baja el contraste reduciendo el voltaje
  if( estadoBt2 == LOW && digitalRead(5) == HIGH ) {
    estadoBt2 = HIGH;
    contraste--;
  } else {
    estadoBt2 = LOW;
  }

  //Limpia la pantalla
  LCD.clear();

  //Ajusta el voltaje para el contraste
  analogWrite(6,contraste);

  //Se hace el despliegue de los mensajes
  LCD.println("Hola mundo!");
  LCD.print("Contraste: ");
  LCD.print(contraste);

  //Un pequeño retardo y seguimos.
  delay(150);
}

