// ---------------------------------------------------------------------------
// (| " TwoSmoothGauges_I2C_16x2.ino "|)
// (| " Sketch para mostrar barras de progreso horizontales o verticales en"|)
// (| " LCD 16x2 o 20x4 basadas en caracteres. Se basa en las bibliotecas "|)
// (| " subyacentes LiquidCrystal y LiquidCrystal_I2C. La longitud y la "|)
// (| " posición de la barra de progreso se pueden configurar. "|)
// (| " "|)
// (| " La biblioteca utiliza los caracteres definibles por el usuario de "|)
// (| " la pantalla LCD y puede mostrar hasta 4 barras de progreso suaves "|)
// (| " horizontales o verticales independientes, simultáneamente. "|)
// (| " Las barras de progreso se pueden dibujar usando diferentes estilos "|)
// (| " visuales (distribuidos con la biblioteca como archivos .h separados"|)
// (| " o el usuario puede definir su propio estilo). Los estilos se "|)
// (| " definen mediante máscaras de bits y datos adicionales en la "|)
// (| " estructura barstyle (49 bytes) que se pueden almacenar en SRAM o en"|)
// (| " flash (PROGMEM). La biblioteca también admite barras de progreso en"|)
// (| " múltiples pantallas LCD conectadas, cada pantalla con un estilo de "|)
// (| " barra de progreso diferentes, hasta 4 barras de progreso por "|)
// (| " pantalla!. "|)
// (| " "|)
// (| " Dichas pantallas LCD pueden estar conectadas mediante I2C o "|)
// (| " utilizando los 16 pines, haciendo los ajustes correspondientes en "|)
// (| " el codigo. "|)
// (| " "|)
// (| " Autor: (c) Dejan Gjorgjevikj "|)
// (| " "|)
// (| " Este código de ejemplo es de dominio público. "|)
// (| " "|)
// (| " Visita https://jorgechac.blogspot.com "|)
// (| " "|)
// (| " Venta de accesorios Arduino/Raspberry Pi Pico/ESP32 "|)
// (| " Whatsapp y Ventas NEQUI +573177295861 "|)
// (| " Bucaramanga - Colombia "|)
// (| " Simulación https://wokwi.com/projects/340102773884322388 "|)
// (| " Descarga gratis este sketch en: "|)
// (| " https://create.arduino.cc/editor/jorgechac/3d449e57-a54c-4128-b6da-8b1290a97391/preview "|)
// ------------------------------------------------------------------------------------------------
#include <LiquidCrystal_I2C.h> // if you don't have I2C version of the display, use LiquidCrystal.h library instead
#include "yaLCDProgressBar.h" // Yet another LCD progress bar library for Arduino
// can dispalay up to 2 smoot gauges simultaneously
#include "yaLCDBatteryGauge.h" // LCD progress bar for battery status library for Arduino
LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
//LiquidCrystal_I2C lcd(0x3f,16,2); // set the LCD address to 0x3f for a 16 chars and 2 line display
// if you don't know the I2C address of the display, use I2C scanner first
LCDProgressBar pb1(lcd, 12, 1, 0);
LCDProgressBar pb2(lcd, 8, 0, 8, true);
// !!! not all of them can be used simoltaneously - only 2 appropriately configured
LCDGauge bat(lcd, 6, 0, 0);
unsigned int gauge = 0;
char buffer[16]; // helper buffer to store C-style strings (generated with sprintf function)
int state = 0;
void setup()
{
lcd.init(); // initialize the 16x2 lcd module
lcd.backlight(); // enable backlight for the LCD module
lcd.print("LCD gauge demo");
delay(1000);
}
void chargingAnimation(int state, int r = 3)
{
bat.showGaugePct(state);
sprintf(buffer, "Cargando: %3d%%", state);
lcd.setCursor(0, 0);
lcd.print(buffer); // print the string on the display
while (r)
{
int cs = state;
// animate
while (cs <= 100 && r > 0)
{
cs += 2;
bat.showGaugePct(cs);
delay(1);
}
r--;
delay(200);
}
bat.showGaugePct(state);
}
void loop()
{
lcd.clear();
lcd.print("2 smoot gauges");
delay(1000);
pb1.init();
pb2.init();
lcd.clear();
for(gauge=0;gauge<=100;gauge++)
{
lcd.setCursor(0, 0); // move cursor to top left
sprintf(buffer, "val:%3d ", gauge % pb2.size()); // set a string as val: XX%
lcd.print(buffer); // print the string on the display
pb1.showProgressPct(gauge % 100);
pb2.showProgress(gauge % pb2.size());
sprintf(buffer, "%3d%% ", gauge % 100); // set a string as XX%, with the number always taking at least 3 character
lcd.setCursor(12, 1);
lcd.print(buffer); // print the string on the display
delay(50);
}
lcd.clear();
lcd.print("Battery gauge");
delay(1000);
bat.init();
bat.setWidth(7);
bat.setPosition(0, 0);
lcd.clear();
for (int gauge = 0; gauge <= 100; gauge++)
{
bat.showGaugePct(gauge);
sprintf(buffer, "%3d%%", gauge);
lcd.setCursor(12, 1);
lcd.print(buffer); // print the string on the display
delay(10); // wait for a while
}
delay(500); // wait for a while
lcd.clear();
bat.setWidth(6);
bat.setPosition(8, 1);
for (int gauge = 40; gauge <= 80; gauge+=10)
{
chargingAnimation(gauge);
delay(100); // wait for a while
}
/*
lcd.clear();
lcd.print("2 thin gauges");
delay(1000);
ptb1.init();
ptb2.init();
lcd.clear();
for(gauge=0;gauge<=100;gauge++)
{
lcd.setCursor(0, 0); // move cursor to top left
sprintf(buffer, "val:%3d ", gauge % ptb2.size()); // set a string as val: XX%
lcd.print(buffer); // print the string on the display
ptb1.showProgressPct(gauge % 100);
ptb2.showProgress(gauge % ptb2.size());
sprintf(buffer, "%3d%% ", gauge % 100); // set a string as XX%, with the number always taking at least 3 character
lcd.setCursor(12, 1);
lcd.print(buffer); // print the string on the display
delay(50);
}
*/
}