#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Caracteres customizados para crear numeros grandes.
uint8_t DEFINICION_CARACTERES[8][8] = {
{ //Esquina superior izquierda
B00111,
B01111,
B11111,
B00000,
B11111,
B11111,
B11111,
B11111
},
{ // Cuadro entero
B11111,
B11111,
B11111,
B00000,
B11111,
B11111,
B11111,
B11111
},
{ ///Esquina inferior izquierda
B11111,
B11111,
B11111,
B00000,
B11111,
B11111,
B01111,
B00111
},
{ //Esquina superior derecha
B11100,
B11110,
B11111,
B00000,
B11111,
B11111,
B11111,
B11111
},
{ //Esquina inferior dereccha
B11111,
B11111,
B11111,
B00000,
B11111,
B11111,
B11110,
B11100
},
{ //Punto bajo
B00000,
B00000,
B00000,
B00000,
B11111,
B11111,
B11111,
B11111
},
{ //Punto alto
B11111,
B11111,
B11111,
B00000,
B00000,
B00000,
B00000,
B00000
},
{// punto fino
B00000,
B00000,
B00000,
B00000,
B11100,
B11100,
B11100,
B11100
}
};
const char DEFINICION_NUMEROS[12][4][4] = {
{ // Definición del 0
{ 0, 1, 1, 3 },
{ 1, 32, 32, 1 },
{ 1, 32, 32, 1 },
{ 2, 1, 1, 4 }
},
{ // Definición del 1
{ 0, 1, 1, 32 },
{ 32, 1, 1, 32 },
{ 32, 1, 1, 32 },
{ 2, 1, 1, 4 }
},
{ // Definición del 2
{ 0, 1, 1, 3 },
{ 5, 5, 5, 1 },
{ 1, 6, 6, 6 },
{ 2, 1, 1, 4 }
},
{ // Definición del 3
{ 0, 1, 1, 3 },
{ 32, 5, 5, 1 },
{ 32, 6, 6, 1 },
{ 2, 1, 1, 4 }
},
{ // Definición del 4
{ 0, 32, 32, 3 },
{ 1, 5, 5, 1 },
{ 6, 6, 6, 1 },
{ 32, 32, 32, 4 }
},
{ // Definición del 5
{ 0, 1, 1, 3 },
{ 1, 5, 5, 5 },
{ 6, 6, 6, 1 },
{ 2, 1, 1, 4 }
},
{ // Definición del 6
{ 0, 1, 1, 3 },
{ 1, 5, 5, 5 },
{ 1, 6, 6, 1 },
{ 2, 1, 1, 4 }
},
{ // Definición del 7
{ 0, 1, 1, 3 },
{ 32, 32, 32, 1 },
{ 32, 32, 32, 1 },
{ 32, 32, 32, 4 }
},
{ // Definición del 8
{ 0, 1, 1, 3 },
{ 1, 5, 5, 1 },
{ 1, 6, 6, 1 },
{ 2, 1, 1, 4 }
},
{ // Definición del 9
{ 0, 1, 1, 3 },
{ 1, 5, 5, 1 },
{ 6, 6, 6, 1 },
{ 2, 1, 1, 4 }
},
{
{ 0, 1, 1, 3 },
{ 1, 32, 5, 5 },
{ 1, 32, 6, 1 },
{ 2, 1, 1, 4 }
},
{
{ 1, 32, 32, 32 },
{ 1, 32, 32, 32 },
{ 1, 32, 32, 32 },
{ 2, 1, 1, 32 }
},
};
// Función que muestra un dígito a partir de la columna indicada
void mostrarDigito(int digito, int columna) {
for (int fila = 0; fila < 4; fila++) {
lcd.setCursor(columna, fila);
for (int caracter = 0; caracter < 4; caracter++) {
lcd.print(DEFINICION_NUMEROS[digito][fila][caracter]);
}
}
}
void setup() {
Serial.begin(9600); // Activa serial
lcd.init(); // Inicia lcd
lcd.backlight(); // Enciende retroiluminacion
lcd.clear();
// Creamos los nuevos caracteres
for (int i = 0; i < 8; i++) {
lcd.createChar(i, DEFINICION_CARACTERES[i]);
}
}
void loop() {
/*
lcd.setCursor(9, 2);
lcd.print((char)6);
lcd.setCursor(10, 2);
lcd.print((char)6);
lcd.setCursor(0, 0);
lcd.print("B");
lcd.setCursor(0, 1);
lcd.print("A");
lcd.setCursor(0, 2);
lcd.print("R");
mostrarDigito(0, 3);
// Indicamos que se está esperando a ocultar los dos puntos
mostrarDigito(3, 13);
lcd.setCursor(19, 0);
lcd.print("R");
lcd.setCursor(19, 1);
lcd.print("M");
lcd.setCursor(19, 2);
lcd.print("A");
*/
lcd.clear();
mostrarDigito(11,0 );
delay(500);
lcd.clear();
mostrarDigito(11,5 );
mostrarDigito(0, 0);
delay(500);
lcd.clear();
mostrarDigito(11,10 );
mostrarDigito(0, 5);
mostrarDigito(0, 0);
delay(500);
lcd.clear();
mostrarDigito(10, 0);
mostrarDigito(0, 10);
mostrarDigito(0, 5);
mostrarDigito(11,15 );
delay(2000);
lcd.clear();
delay(500);
mostrarDigito(10, 0);
mostrarDigito(0, 10);
mostrarDigito(0, 5);
mostrarDigito(11,15 );
delay(2000);
lcd.clear();
delay(500);
mostrarDigito(10, 0);
mostrarDigito(0, 10);
mostrarDigito(0, 5);
mostrarDigito(11,15 );
delay(2000);
/*
lcd.setCursor(19, 0);
lcd.print((char)1);
lcd.setCursor(19, 1);
lcd.print((char)1);
lcd.setCursor(19, 2);
lcd.print((char)6);
lcd.setCursor(19, 3);
lcd.print((char)1);
*/
}