// Proyecto simple usando Arduino UNO y la pantalla OLED 128x64 SSD1306 IIC, creado por upir, 2023
// Canal de YouTube: https://www.youtube.com/@upir
// Más videos con Arduino UNO y pantallas OLED: https://www.youtube.com/@upir
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h> // Librería necesaria para la comunicación I2C
// Inicialización para la pantalla OLED utilizada (SSD1306 128x64 I2C).
// U8G2_R0 significa sin rotación. U8X8_PIN_NONE para el pin de reset si no se usa.
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
// Imágenes de Lopaka editor: https://lopaka.app/
// Para generar tus propias imágenes, usa la configuración de image2cpp para U8g2 (MSB first).
static const unsigned char image_Lock_7x8_bits[] U8X8_PROGMEM = {0x1c,0x22,0x22,0x7f,0x7f,0x77,0x7f,0x3e};
static const unsigned char image_Bluetooth_Idle_5x8_bits[] U8X8_PROGMEM = {0x04,0x0d,0x16,0x0c,0x0c,0x16,0x0d,0x04};
static const unsigned char image_Volup_8x6_bits[] U8X8_PROGMEM = {0x48,0x8c,0xaf,0xaf,0x8c,0x48};
static const unsigned char image_Alert_9x8_bits[] U8X8_PROGMEM = {0x10,0x00,0x38,0x00,0x28,0x00,0x6c,0x00,0x6c,0x00,0xfe,0x00,0xee,0x00,0xff,0x01};
int progress = 0; // Variable para el progreso de la barra
char buffer[32]; // Buffer de ayuda para construir la cadena de texto a mostrar
void setup(void) {
u8g2.begin(); // Inicia la librería U8g2
}
void loop(void) {
u8g2.clearBuffer(); // Limpia la memoria interna (buffer de la pantalla)
// Código adaptado de https://lopaka.app/
u8g2.setBitmapMode(1); // Configura el modo de bitmap (1 = transparencia)
u8g2.drawFrame(12, 21, 104, 20); // Dibuja el marco de la barra de progreso
u8g2.drawBox(14, 23, progress, 16); // Dibuja el relleno de la barra de progreso
u8g2.setFont(u8g2_font_helvB08_tr); // Establece una fuente para el texto
sprintf(buffer, "Progreso: %d%%", progress); // Construye una cadena con la variable de progreso
u8g2.drawStr(33, 53, buffer); // Muestra la cadena de texto
u8g2.setFont(u8g2_font_haxrcorp4089_tr); // Establece otra fuente para el título
u8g2.drawStr(0, 7, "Pantalla de progeso"); // Muestra el título
u8g2.drawLine(0, 9, 127, 9); // Dibuja una línea separadora
u8g2.drawXBMP( 100, 0, 7, 8, image_Lock_7x8_bits); // Dibuja el ícono de candado
u8g2.drawXBMP( 111, 0, 5, 8, image_Bluetooth_Idle_5x8_bits); // Dibuja el ícono de Bluetooth
u8g2.drawXBMP( 120, 1, 8, 6, image_Volup_8x6_bits); // Dibuja el ícono de volumen
u8g2.drawXBMP( 22, 45, 9, 8, image_Alert_9x8_bits); // Dibuja el ícono de alerta
u8g2.sendBuffer(); // Transfiere el contenido de la memoria interna a la pantalla
// Aumenta el valor de progreso para que vaya de 0 a 100
progress = progress + 5;
if (progress > 100) {
progress = 0; // Reinicia el progreso al llegar a 100
}
}