// ---------------------------------------------------------------------------
// (| " I_Love_Wokwi.ino                                                   "|)
// (| " Sketch para manejo básico de una pantalla OLED de 0.96" de 128x64  "|)
// (| " de resolución, que utiliza el controlador SSD1306 y que usa I2C    "|)
// (| " para comunicarse, se implementara con Arduino UNO Rev3 / NANO.     "|)
// (| "                                                                    "|)
// (| " Muestra un mensaje inicial que dice "TEST OLED 0.96 128x64" por 5  "|)
// (| " segundos y seguidamente visualiza una imagen intermitente e        "|)
// (| " indefinidamente, la cual corresponde al logotipo de wokwi como     "|)
// (| " prueba.                                                            "|)
// (| "                                                                    "|)
// (| " La libreria "OLED_I2C.zip" debe estar instalada en el IDE de       "|)
// (| " arduino para que este sketch funcione.                             "|)
// (| "                                                                    "|)
// (| " El pin SDA de la OLED 0.96" monocromática I2C 128x64 va al pin A4  "|)
// (| " del Arduino UNO Rev3 / NANO.                                       "|)
// (| " El pin SCL de la OLED 0.96" monocromática I2C 128x64 va al pin A5  "|)
// (| " del Arduino UNO Rev3 / NANO.                                       "|)
// (| "                                                                    "|)
// (| " Este código de ejemplo es de dominio público.                      "|)
// (| "                                                                    "|)
// (| " Maker: jorgechac©                                                  "|)
// (| " 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/340292673718977106           "|)
// ---------------------------------------------------------------------------

#include <OLED_I2C.h>

OLED  control_OLED(SDA, SCL, 8);

extern uint8_t SmallFont[];                // Selecciono el tamaño de fuente (Small o Big)
extern uint8_t MediumNumbers[];            // Selecciono el tamaño de fuente para los numeros

const uint8_t IDE_Arduino_20[] PROGMEM={

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0010 (16) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0020 (32) pixels
0x00, 0x80, 0xC0, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x9C, 0xCE, 0xC6, 0x66, 0xE7, 0xE6, 0x8E, 0x1E,   // 0x0030 (48) pixels
0x7C, 0xF8, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0040 (64) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00,   // 0x0050 (80) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0xC0, 0xC0,   // 0x0060 (96) pixels
0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0070 (112) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0080 (128) pixels
0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x3F, 0x1F, 0x1F, 0x1F, 0x3F, 0x3F, 0x7F, 0xFE, 0xFE, 0xFE,   // 0x0090 (144) pixels
0xFC, 0xFC, 0xF8, 0xF0, 0xF0, 0xF0, 0xF0, 0x30, 0x38, 0x38, 0x18, 0x18, 0x1C, 0x1C, 0x0E, 0x0E,   // 0x00A0 (160) pixels
0x0F, 0x0F, 0x03, 0x01, 0x00, 0x08, 0x1E, 0x3F, 0x3B, 0x71, 0x70, 0xE0, 0xE3, 0xFF, 0x7F, 0x00,   // 0x00B0 (176) pixels
0x00, 0xEF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x00C0 (192) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,   // 0x00D0 (208) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x00E0 (224) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x00F0 (240) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0100 (256) pixels
0x00, 0x00, 0x00, 0x07, 0x7F, 0xFF, 0xFF, 0xF8, 0xE0, 0xC0, 0xC0, 0xC0, 0xE0, 0xF9, 0xFF, 0xFF,   // 0x0110 (272) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0120 (288) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0130 (304) pixels
0x00, 0x07, 0x0F, 0x3F, 0xFC, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0140 (320) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,   // 0x0150 (336) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x0F, 0x0F, 0x1F, 0x3F, 0x1F, 0x0F,   // 0x0160 (352) pixels
0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0170 (368) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0180 (384) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0190 (400) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x01A0 (416) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x70, 0x60, 0x00,   // 0x01B0 (432) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0,   // 0x01C0 (448) pixels
0xC0, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0,   // 0x01D0 (464) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0xE0, 0x00,   // 0x01E0 (480) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x01F0 (496) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0200 (512) pixels
0x00, 0x00, 0xE0, 0xF0, 0x1C, 0x0E, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x1F, 0x3F,   // 0x0210 (528) pixels
0x7F, 0xFF, 0xEF, 0x83, 0x01, 0x00, 0x30, 0x38, 0x1C, 0x0C, 0x0C, 0x1C, 0x08, 0x00, 0x00, 0x00,   // 0x0220 (544) pixels
0x00, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x0C, 0x3E,   // 0x0230 (560) pixels
0xB6, 0xB6, 0x38, 0x10, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F,   // 0x0240 (576) pixels
0xFF, 0xFF, 0xF8, 0x80, 0xF0, 0xFF, 0xFF, 0x3F, 0xFF, 0xFE, 0xE0, 0xC0, 0xFE, 0xFF, 0x3F, 0x03,   // 0x0250 (592) pixels
0xF8, 0xFC, 0xFC, 0x1E, 0x0E, 0x0E, 0x0E, 0x3E, 0xFC, 0xF8, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xE0,   // 0x0260 (608) pixels
0xF8, 0xFC, 0xBE, 0x1E, 0x0E, 0x06, 0x06, 0x3E, 0xFE, 0xFC, 0xC0, 0xF0, 0xFE, 0xFE, 0xFE, 0xFE,   // 0x0270 (624) pixels
0xE0, 0xF0, 0xFE, 0xFF, 0x3F, 0x00, 0xDE, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0280 (640) pixels
0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x70, 0xF0, 0x80, 0x30, 0x70, 0x60, 0x0C, 0x3C, 0x38, 0x06,   // 0x0290 (656) pixels
0x0E, 0x0C, 0x01, 0xFF, 0xFE, 0x70, 0x36, 0x36, 0xBB, 0xFB, 0xC0, 0x00, 0x00, 0x00, 0x60, 0x70,   // 0x02A0 (672) pixels
0xE0, 0xC1, 0xC1, 0xE1, 0x7F, 0x3F, 0x18, 0x38, 0x38, 0x38, 0x1F, 0x0F, 0x06, 0x00, 0x00, 0x00,   // 0x02B0 (688) pixels
0x81, 0xC1, 0xF3, 0x7B, 0x3F, 0x0F, 0x0F, 0x0E, 0xF8, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00,   // 0x02C0 (704) pixels
0x00, 0x0F, 0x1F, 0x3F, 0x3F, 0x0F, 0x00, 0x00, 0x03, 0x1F, 0x1F, 0x1F, 0x1F, 0x07, 0x00, 0x00,   // 0x02D0 (720) pixels
0x07, 0x0F, 0x1F, 0x1E, 0x1C, 0x1C, 0x1C, 0x1F, 0x0F, 0x07, 0x01, 0x00, 0x1F, 0x1F, 0x1F, 0x01,   // 0x02E0 (736) pixels
0x03, 0x07, 0x0F, 0x1F, 0x1E, 0x1C, 0x00, 0x00, 0x03, 0x1F, 0x1F, 0x1F, 0x07, 0x00, 0x00, 0x07,   // 0x02F0 (752) pixels
0x0F, 0x0F, 0x0F, 0x03, 0x00, 0x00, 0x0C, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0300 (768) pixels
0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x06, 0x06, 0x0C, 0x0C, 0x0C, 0x0C,   // 0x0310 (784) pixels
0x0E, 0x0E, 0x0F, 0x1F, 0x3D, 0x78, 0xF8, 0xF1, 0xF3, 0xE1, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0,   // 0x0320 (800) pixels
0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0xE0, 0x60, 0x70, 0x30, 0x38, 0x38, 0x3C, 0x3C, 0x3E, 0x3E, 0x7F,   // 0x0330 (816) pixels
0xFF, 0xC7, 0x81, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xC0, 0x00,   // 0x0340 (832) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0350 (848) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0360 (864) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0370 (880) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0380 (896) pixels
0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0390 (912) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x07,   // 0x03A0 (928) pixels
0x7F, 0x7F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x03B0 (944) pixels
0x00, 0x01, 0x3F, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x00,   // 0x03C0 (960) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x03D0 (976) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x03E0 (992) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x03F0 (1008) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0400 (1024) pixels
};

void setup()
{
  control_OLED.begin();                                    // Inicializo la OLED
  control_OLED.setFont(SmallFont);                         //seteo el tamaño de la fuente
  control_OLED.print("TEST OLED 0.96 128x64", CENTER, 0);  //imprime la frase entre comillas
  control_OLED.update();                                   // actualiza la pantalla haciendo lo anterior
  delay(5000);                                             // visualiza el mensaje estatico por 5 segundos (solo la primera vez)
  control_OLED.clrScr();                                   // borra la pantalla
}

void loop ()
{
  control_OLED.invert(false);                             // Invertir colores FALSO
  control_OLED.clrScr();                                  // borrar toda la pantalla
  control_OLED.drawBitmap(0, 0, IDE_Arduino_20, 128, 64); // mostrar la imagen importada en OLED 128x64
  control_OLED.update();                                  // Imprime en pantalla OLED
  delay(700);                                             // retardo
  control_OLED.invert(true);                              // Invertir colores FALSO
  control_OLED.update();                                  // Imprime en pantalla OLED
  delay(700);                                             // retardo, mostrar la imagen durante 700 mseg
}