// ---------------------------------------------------------------------------
// (| " Imagen_en_OLED.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 "PRUEBA OLED 128x64" por 5     "|)
// (| " segundos y seguidamente visualiza una imagen intermitente e        "|)
// (| " indefinidamente, la cual corresponde al logotipo de arduino 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.                      "|)
// (| "                                                                    "|)
// (| " 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/339574692157325908           "|)
// (| " Descarga gratis este sketch en:                                    "|)
// (| " https://create.arduino.cc/editor/jorgechac/d0ea4c7d-c9a1-4d71-80fe-bd7012d746a2/preview "|)
// ------------------------------------------------------------------------------------------------

#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={

0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0010 (16) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x0F, 0x07, 0x03, 0x03, 0x03, 0x01,   // 0x0020 (32) pixels
0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x03,   // 0x0030 (48) pixels
0x03, 0x03, 0x07, 0x07, 0x0F, 0x1F, 0x3F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0040 (64) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x1F, 0x0F, 0x07, 0x07, 0x03, 0x03, 0x03, 0x01,   // 0x0050 (80) pixels
0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x03,   // 0x0060 (96) pixels
0x03, 0x07, 0x07, 0x0F, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, 0xF3, 0xF3, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0070 (112) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0080 (128) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0090 (144) pixels
0xFF, 0x3F, 0x0F, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xF0, 0xF0, 0xF8, 0xFC, 0xFE,   // 0x00A0 (160) pixels
0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC,   // 0x00B0 (176) pixels
0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x0F, 0x1F, 0x3F, 0x3F,   // 0x00C0 (192) pixels
0x1F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFC, 0xFE,   // 0x00D0 (208) pixels
0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, 0xFC,   // 0x00E0 (224) pixels
0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0F, 0x7F, 0xFF, 0xFF, 0xFF,   // 0x00F0 (240) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0100 (256) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0110 (272) pixels
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0120 (288) pixels
0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0xFF,   // 0x0130 (304) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0140 (320) pixels
0x00, 0x00, 0x00, 0x20, 0xF0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0150 (336) pixels
0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x07, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0160 (352) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF,   // 0x0170 (368) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0180 (384) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0190 (400) pixels
0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x01A0 (416) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x01B0 (432) pixels
0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0,   // 0x01C0 (448) pixels
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x01D0 (464) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x01E0 (480) pixels
0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFE, 0xFF, 0xFF,   // 0x01F0 (496) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0200 (512) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0210 (528) pixels
0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0xE0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x07,   // 0x0220 (544) pixels
0x0F, 0x0F, 0x0F, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0F, 0x0F, 0x0F, 0x07, 0x07,   // 0x0230 (560) pixels
0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0240 (576) pixels
0xFF, 0xFE, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x07, 0x0F,   // 0x0250 (592) pixels
0x0F, 0x0F, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x03,   // 0x0260 (608) pixels
0x03, 0x01, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0270 (624) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0280 (640) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0290 (656) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, 0xFC, 0xF8, 0xF8,   // 0x02A0 (672) pixels
0xF8, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF8,   // 0x02B0 (688) pixels
0xF8, 0xFC, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x02C0 (704) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, 0xFC, 0xF8, 0xF8, 0xF8,   // 0x02D0 (720) pixels
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xF8,   // 0x02E0 (736) pixels
0xFC, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x02F0 (752) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0300 (768) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0310 (784) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x01, 0x81, 0xE1, 0xC1, 0x01, 0x0F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0320 (800) pixels
0x01, 0x01, 0x01, 0x79, 0x79, 0x79, 0x31, 0x01, 0x03, 0x87, 0xFF, 0xFF, 0xFF, 0x01, 0x01, 0x19,   // 0x0330 (816) pixels
0xF9, 0xF9, 0xF9, 0xF9, 0xF1, 0x03, 0x03, 0x0F, 0xFF, 0xFF, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF,   // 0x0340 (832) pixels
0xFF, 0xFF, 0xFD, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xF9, 0xF9, 0xF9, 0xF9, 0x01, 0x01, 0xF9, 0xF9,   // 0x0350 (848) pixels
0xF9, 0xF9, 0xFF, 0xFF, 0xFF, 0x01, 0x01, 0x81, 0x81, 0x07, 0x1F, 0x7F, 0xFF, 0xFD, 0x01, 0x01,   // 0x0360 (864) pixels
0xFF, 0xFF, 0x0F, 0x03, 0xC1, 0xF1, 0xF9, 0xF8, 0xF8, 0xF9, 0xE1, 0x03, 0x07, 0x1F, 0xFF, 0xFF,   // 0x0370 (880) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0380 (896) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 0x0390 (912) pixels
0xFF, 0x7F, 0x07, 0x00, 0xE0, 0xF0, 0xF3, 0xF3, 0xF3, 0xF0, 0xE0, 0x80, 0x83, 0x9F, 0xFF, 0xFF,   // 0x03A0 (928) pixels
0x80, 0x80, 0x80, 0xFE, 0xFC, 0xF8, 0xE0, 0x81, 0x07, 0x1F, 0x7F, 0xFF, 0xFF, 0x80, 0x80, 0x90,   // 0x03B0 (944) pixels
0x9F, 0x9F, 0x9F, 0x9F, 0x8F, 0xC0, 0xE0, 0xF0, 0xFF, 0xFF, 0xE0, 0x80, 0x80, 0x9F, 0x1F, 0x3F,   // 0x03C0 (960) pixels
0x3F, 0x9F, 0x87, 0x80, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x1F, 0x1F,   // 0x03D0 (976) pixels
0x1F, 0x1F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xF8, 0xC0, 0x83, 0x03, 0x00, 0x00,   // 0x03E0 (992) pixels
0xFF, 0xFF, 0xE0, 0xC0, 0x83, 0x8F, 0x1F, 0x1F, 0x1F, 0x9F, 0x87, 0xC0, 0xE0, 0xF8, 0xFF, 0xFF,   // 0x03F0 (1008) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,   // 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("PRUEBA OLED 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
}