//    ───▄▀▀▀▄▄▄▄▄▄▄▀▀▀▄───
//    ───█▒▒░░░░░░░░░▒▒█───
//    ────█░░█░░░░░█░░█────
//    ─▄▄──█░░░▀█▀░░░█──▄▄─
//    █░░█─▀▄░░░░░░░▄▀─█░░█
//    █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
//    █░░     Daniel,    ░░█
//    █░░ Welcome to the ░░█
//    █░░     C L U B    ░░█
//    █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "cool.h"

#define SCREEN_I2C_ADDR 0x3C
#define SCREEN_WIDTH 128     // OLED display width, in pixels
#define SCREEN_HEIGHT 64     // OLED display height, in pixels
#define OLED_RST_PIN -1      // Reset pin (-1 if not available)

Adafruit_SSD1306 display(128, 64, &Wire, OLED_RST_PIN);

int frame = 0;
String message = "Welcome, Daniel!";
int messageIndex = 0;

void drawFrame() {
  display.clearDisplay();
  display.drawBitmap(40, 0, cool_frames[frame], COOL_FRAME_WIDTH, COOL_FRAME_HEIGHT, 1);
  display.setCursor(16, 52);
  display.print(message.substring(0, messageIndex));
  display.display();
  frame = (frame + 1) % COOL_FRAME_COUNT;
  if (frame % 3 == 0) {
    messageIndex = (messageIndex + 1) % 40;
  }
}

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, SCREEN_I2C_ADDR);
  display.setTextColor(SSD1306_WHITE);
}

void loop() {
  drawFrame();
  delay(COOL_FRAME_DELAY);
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
ssd1306:DATA
ssd1306:CLK
ssd1306:DC
ssd1306:RST
ssd1306:CS
ssd1306:3V3
ssd1306:VIN
ssd1306:GND