#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Initialize LCD (20x4)
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Define custom characters for large numbers
byte leftSide[8] = {0x07,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f};
byte upperBar[8] = {0x1f,0x1f,0x1f,0x00,0x00,0x00,0x00,0x00};
byte rightSide[8] = {0x1c,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1c};
byte leftEnd[8] = {0x0f,0x07,0x00,0x00,0x00,0x00,0x03,0x07};
byte lowerBar[8] = {0x00,0x00,0x00,0x00,0x00,0x1f,0x1f,0x1f};
byte rightEnd[8] = {0x1e,0x1c,0x00,0x00,0x00,0x00,0x18,0x1c};
byte middleBar[8] = {0x1f,0x1f,0x1f,0x00,0x00,0x00,0x1f,0x1f};
byte lowerEnd[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0f};
void setup() {
lcd.init();
lcd.backlight();
// Load custom characters into LCD memory
lcd.createChar(0, leftSide);
lcd.createChar(1, upperBar);
lcd.createChar(2, rightSide);
lcd.createChar(3, leftEnd);
lcd.createChar(4, lowerBar);
lcd.createChar(5, rightEnd);
lcd.createChar(6, middleBar);
lcd.createChar(7, lowerEnd);
lcd.clear();
}
// Function to display large numbers (placed on lines 2 & 3)
void custom0(int x) {
lcd.setCursor(x, 1); lcd.write(0); lcd.write(1); lcd.write(2);
lcd.setCursor(x, 2); lcd.write(0); lcd.write(4); lcd.write(2);
}
void custom1(int x) {
lcd.setCursor(x, 1); lcd.write(' '); lcd.write(2); lcd.write(' ');
lcd.setCursor(x, 2); lcd.write(' '); lcd.write(2); lcd.write(' ');
}
void custom2(int x) {
lcd.setCursor(x, 1); lcd.write(3); lcd.write(6); lcd.write(2);
lcd.setCursor(x, 2); lcd.write(0); lcd.write(4); lcd.write(4);
}
void custom3(int x) {
lcd.setCursor(x, 1); lcd.write(3); lcd.write(6); lcd.write(2);
lcd.setCursor(x, 2); lcd.write(7); lcd.write(4); lcd.write(2);
}
void custom4(int x) {
lcd.setCursor(x, 1); lcd.write(0); lcd.write(4); lcd.write(2);
lcd.setCursor(x, 2); lcd.write(' '); lcd.write(' '); lcd.write(2);
}
void custom5(int x) {
lcd.setCursor(x, 1); lcd.write(0); lcd.write(6); lcd.write(5);
lcd.setCursor(x, 2); lcd.write(7); lcd.write(4); lcd.write(2);
}
void custom6(int x) {
lcd.setCursor(x, 1); lcd.write(0); lcd.write(6); lcd.write(5);
lcd.setCursor(x, 2); lcd.write(0); lcd.write(4); lcd.write(2);
}
void custom7(int x) {
lcd.setCursor(x, 1); lcd.write(1); lcd.write(1); lcd.write(2);
lcd.setCursor(x, 2); lcd.write(' '); lcd.write(2); lcd.write(' ');
}
void custom8(int x) {
lcd.setCursor(x, 1); lcd.write(0); lcd.write(6); lcd.write(2);
lcd.setCursor(x, 2); lcd.write(0); lcd.write(4); lcd.write(2);
}
void custom9(int x) {
lcd.setCursor(x, 1); lcd.write(0); lcd.write(6); lcd.write(2);
lcd.setCursor(x, 2); lcd.write(7); lcd.write(4); lcd.write(2);
}
// Function to print large numbers
void printNumber(int value, int col) {
switch (value) {
case 0: custom0(col); break;
case 1: custom1(col); break;
case 2: custom2(col); break;
case 3: custom3(col); break;
case 4: custom4(col); break;
case 5: custom5(col); break;
case 6: custom6(col); break;
case 7: custom7(col); break;
case 8: custom8(col); break;
case 9: custom9(col); break;
}
}
// Function to print 3-digit numbers
void print_bigletter(int dist) {
lcd.clear(); // Clear previous numbers
int hundreds = dist / 100;
int tens = (dist / 10) % 10;
int ones = dist % 10;
if (hundreds > 0) {
printNumber(hundreds, 4);
} else {
lcd.setCursor(4, 1);
lcd.print(" "); // Hide leading zero
}
printNumber(tens, 7);
printNumber(ones, 10);
}
void loop() {
for (int i = 0; i <= 999; i++) { // Count up to 999
print_bigletter(i);
delay(200);
}
}
El brillo de la pantalla puede modularse
con el potenciometro de la parte trasera.