Arduino lcd2x16 brillo contraste


Quieres cambiar el brillo o el contraste de tu pantalla lcd2x16 con arduino por medio de código, es este post encontraras lo necesario para crearlo.

oscar Escrito por oscar 30 November 2015 76785 0

En esta ocasión vamos a realizar un pequeño ejemplo de manipulación del brillo y el contraste con arduino lcd2x16 por medio de código, utilizando los PWM  que poseen, con el fin de tener el control de estos parámetros en nuestro código según la necesidad de nuestros proyectos.

El funcionamiento del PWM es modificar el ciclo de trabajo de la señal que enviamos a través de un pin, lo que nos permite modificar el voltaje de salida, así podemos cambiar el valor del voltaje que le ingresa a los pines del lcd y modificando los valores de contraste y de brillo.

Puedes ver los ejemplos de PWM que viene con el ide de arduino el cual es analogo write.

Materiales

Cantidad Elemento
1 Arduino de cualquier tipo
1 LCD 2x16
3 Resistencias 1k
3 Interruptores miniatura

Circuito y conexión

El circuito se describe en la siguiente imagen, se deja el esquema y la conexión de cada elemento, si deseas obtener mas sobre la conexión te recomiendo visitar arduino lcd 2x16.

Circuito lcd brillo contraste
Circuito lcd brillo contraste

Código

Dejare el código en el repositorio de github para que los clones con los demás post. La explicación:


//Incluimos la librería del lcd y definimos los pines de conexión del lcd
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

//Declaramos las constantes para cada uno 
//de los pines y pulsadores
const int PIN_BRILLO = 9;     //Pin salida brillo
const int PIN_CONTRASTE = 10; //Pin salida contraste
const int PIN_13 = 13;        //Led de control
const int CAMBIO = 6;         //Pulsador cambio de brillo a contraste
const int MAX = 7;            //Pulsador aumentar
const int MIN = 8;            //Pulsador disminuir 

int brillo = 50;       //Iniciamos variable brillo 50%
int contraste = 50;    //Iniciamos variable contraste 50%

//Iniciamos variables de los pulsadores
int buttonCambio = 0;  
int buttonMax = 0;
int buttonMin = 0;
int estadoCambio = 0;

//Declaramos variables de lectura análoga max y min
int valMaxLcd = 255;
int valMinLcd = 0;


void setup() {
  lcd.begin(16, 2); //Iniciamos el lcd

  //Declaramos como entrada y salida a los pines
  pinMode(CAMBIO, INPUT);
  pinMode(MAX, INPUT);
  pinMode(MIN, INPUT);
  pinMode(PIN_13, OUTPUT);

  //Mostramos los valores iniciales de brillo y contraste
  lcd.print("Brillo:");
  lcd.setCursor(0,1);
  lcd.print("Contraste:");

  //Escribimos en los pines los valores por defecto
  analogWrite(PIN_BRILLO, (brillo*valMaxLcd)/100);
  analogWrite(PIN_CONTRASTE, (contraste*valMaxLcd)/100);

  lcd.setCursor(11,0);
  lcd.print(brillo);
  lcd.setCursor(11,1);
  lcd.print(contraste);

  lcd.setCursor(14,0);
  lcd.print("%");
  lcd.setCursor(14,1);
  lcd.print("%");

  lcd.setCursor(11,0);
  lcd.cursor();
}

void loop() {
  //Iniciamos el programa preguntando si el pulsador de cambio
  //fue habilitado 
  buttonCambio = digitalRead(CAMBIO);
  //Si es accionado cambiamos de brillo a contraste o viceversa 
  if (buttonCambio == HIGH) {
    digitalWrite(PIN_13, HIGH);
    //Si estado e 0
    if(estadoCambio == 0){
      estadoCambio = 1;     //Activamos estado
      lcd.noCursor();       //Quitamos el cursos del lcd
      lcd.setCursor(11,1);  //Seteamos el cursis en x=11 y=1 
      lcd.cursor();         //Colocamos el cursor
      delay(100);
    }else{
      //Si el cursor es 1 hacemos los cambios de esta forma
      estadoCambio = 0;
      lcd.noCursor();
      lcd.setCursor(11,0);
      lcd.cursor();
      delay(100);
    }
  }
  //Si el boton de cambio no es accionado, escribimos los valores 
  //de máximo y mínimo
  buttonMax = digitalRead(MAX);
  buttonMin = digitalRead(MIN);
  
  //Preguntamos si el pulsador máximo fue oprimido
  if (buttonMax == HIGH) {
    digitalWrite(PIN_13, HIGH);
    //Si es asi, verificamos el estado del cambio
    if(estadoCambio == 0){     //Si es activo aumentamos es valor de brillo
      brillo = brillo + 1;
      //Lo escribimos en el pin brillo
      analogWrite(PIN_BRILLO, (brillo*valMaxLcd)/100);
      lcd.setCursor(11,0);
      lcd.print(brillo);
    }else{                    //de lo contrario aumentamos el contraste
      contraste = contraste + 1;
      //Lo escribimos en el pin contraste
      analogWrite(PIN_CONTRASTE,(contraste*valMaxLcd)/100);
      lcd.setCursor(11,1);
      lcd.print(contraste);
    }
  }
  //Aplica la misma funcionalidad para el pin de mínima como esta 
  //en el de maxima
  if (buttonMin == HIGH) {
    digitalWrite(PIN_13, HIGH);
    if(estadoCambio == 0){
      brillo = brillo - 1;
      analogWrite(PIN_BRILLO, (brillo*valMaxLcd)/100);
      lcd.setCursor(11,0);
      lcd.print(brillo);
    }else{
      contraste = contraste - 1;
      analogWrite(PIN_CONTRASTE, (contraste*valMaxLcd)/100);
      lcd.setCursor(11,1);
      lcd.print(contraste);
    }
  }
  digitalWrite(PIN_13, LOW);
  delay(100);
}

Este es un pequeño ejercicio que puedes aplicar a tus proyectos. Si tienes alguna duda o inquietud, déjanos un comentario y te estaremos respondiendo.


Comentario

Debe aceptar antes de enviar