/* -------------------------------------------------------------------------------------
DEBUG COMMANDS FOR SERIAL MONITOR
m7 — Runs Move 7 instantly. (1-12)
rage15 — Sets the rage level to 15 (great for testing the color logic).
random — Toggles random mode on or off.
combo — Runs your new chaotic vibration/light function.
status — Prints out all your current variables so you can see what Hank is "thinking."
open - opens the lid
close - closes the lid
-------------------------------------------------------------------------------------*/
#include <ESP32Servo.h>
#include <Adafruit_NeoPixel.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include "time.h"
// NEOPIXEL CONFIG
#define PIXEL_PIN 26
#define NUM_PIXELS 5
Adafruit_NeoPixel pixel(NUM_PIXELS, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
// STANDARD MEMORY (Resets on Sleep/Reboot)
int selected_move = 0;
bool random_mode = false;
int rage_level = 0;
// WOKWI / TEST CONFIG
const int angryShakeTime = 2000;
const int angryFrameRate = 200;
const int annoyedBlinkFrameRate = 200;
unsigned long annoyed_duration = 5000;
const int sleepFrameRate = 1000; // Changes frame every 500ms
// OLED CONGIG
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// CONFIGURATION
bool debug_mode = false;
unsigned long DEEP_SLEEP_H = 24; // HOURS
const unsigned long PEEK_THRESHOLD_M = 10; // MINUTES
const unsigned long RAGE_DECAY_TIME = 1; // MINUTES
const int DEBOUNCE_TIME = 100;
const float CRITICAL_BATTERY_LEVEL = 3.2;
const float LID_OPEN_BATTERY_LEVEL = 3.5;
const float FULL_BATTERY_LEVEL = 3.95;
const int MAX_RAGE_STEPS = 20;
const unsigned long motion_blind_time = 2000;
bool serial_led_override = false;
bool constant_motion_detect = LOW;
const int hand_min = 180, hand_max = 50;
const int door_min = 180, door_max = 30;
int AktHandpos = 180, AktDoorpos = 180;
// WIFI CONFIG
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 0;
const int daylightOffset_sec = 3600;
// PIN DEFINITIONS
const int switch_pin = 15;
const int vibration_motor_pin = 14;
const int door_pin = 13;
const int hand_pin = 25;
const int motion_sensor_pin = 27;
const int Servo_power_pin = 5;
const int battery_pin = 34;
const int detectPin = 33;
// BITMAPS
const unsigned char happy_octopus_bmp[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x3f, 0xfc, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x9f, 0xfa, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x9f, 0xf2, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x1f, 0xf0, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x1f, 0xf0, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x1f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xbf, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xe3, 0xc7, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0xff, 0xc0, 0x07, 0xff, 0xc0, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3f, 0x83, 0xff, 0xc0, 0x07, 0xff, 0xc1, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0x83, 0xff, 0xe7, 0xc7, 0xff, 0x83, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7d, 0xc1, 0xff, 0xe7, 0xef, 0xff, 0x83, 0xbe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf8, 0xc0, 0xff, 0xf3, 0x9f, 0xff, 0x03, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x7f, 0xfc, 0x7f, 0xfe, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x3f, 0xff, 0xff, 0xf8, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x67, 0xff, 0xff, 0xcf, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3c, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xbf, 0x0e, 0xff, 0xff, 0xff, 0xfe, 0xe1, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x8f, 0xfb, 0xff, 0xff, 0xff, 0xe3, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf7, 0xff, 0xff, 0xdf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x07, 0xf8, 0x3f, 0xc0, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x87, 0xfa, 0x5f, 0xc2, 0x4f, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x07, 0xf8, 0x1f, 0xc0, 0x17, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0xf8, 0x1f, 0xc0, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0xe0, 0x0f, 0xc0, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0xe8, 0x07, 0xc0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x03, 0xf0, 0x0f, 0xc0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x03, 0xf0, 0x0f, 0xc0, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xf1, 0xc3, 0xe0, 0x07, 0xc7, 0x87, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xf3, 0xc3, 0xe0, 0x07, 0xc3, 0xc7, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x87, 0xe0, 0x07, 0xc1, 0xc3, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0xc0, 0x07, 0xe1, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x8f, 0xc0, 0x07, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xc0, 0x07, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xc0, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x80, 0x01, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const unsigned char angry_octopus_bmp[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xeb, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xeb, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xcc, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xbf, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xcf, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0x86, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf2, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfb, 0xff, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x7f, 0xfe, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x3f, 0xf8, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf8, 0xcb, 0xa6, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0xc3, 0xc6, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x0f, 0xe0, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x0f, 0xf0, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x3f, 0xf8, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3f, 0x07, 0xff, 0xfc, 0x7f, 0xff, 0xc1, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0x83, 0xff, 0xf9, 0xbf, 0xff, 0x83, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0x81, 0xff, 0xf7, 0xdf, 0xff, 0x83, 0xbe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf0, 0x80, 0xff, 0xff, 0xff, 0xff, 0x03, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0xff, 0xff, 0xff, 0xfe, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x70, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x67, 0xff, 0xff, 0xce, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x78, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7e, 0x06, 0xff, 0xff, 0xff, 0xfe, 0xc0, 0xfd, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0f, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf4, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0xe7, 0xff, 0xff, 0xff, 0xbf, 0xcf, 0xe8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x27, 0x8f, 0xfb, 0xff, 0xff, 0xbf, 0xe3, 0xe4, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfb, 0xff, 0xff, 0xdf, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf7, 0xff, 0xff, 0xdf, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x37, 0xf8, 0x3f, 0xcc, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xe2, 0x87, 0xf6, 0x5f, 0xc3, 0x4f, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xe8, 0x07, 0xf4, 0x5f, 0xc0, 0x17, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0xf8, 0x1f, 0xc0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0xf0, 0x0f, 0xc0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0xe8, 0x2f, 0xc0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0xe8, 0x2f, 0xc0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0xf0, 0x1f, 0xc0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x11, 0xc7, 0xf0, 0x1f, 0xc3, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xf3, 0xe7, 0xe0, 0x17, 0xc7, 0xc7, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xe7, 0x87, 0xd0, 0x17, 0xc1, 0xc7, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0xe0, 0x0f, 0xc1, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0xc0, 0x03, 0xe1, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0xb0, 0x0b, 0xfb, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xc0, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x80, 0x01, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x80, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x80, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const unsigned char peeking_octopus_bmp[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x7f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xd4, 0x7f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x9c, 0x3f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x90, 0x3f, 0xf7, 0xfb, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x93, 0x3f, 0xf3, 0xf3, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xd1, 0x7f, 0xf8, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc8, 0x7f, 0xfe, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf1, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xf0, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x07, 0xff, 0xf0, 0x1f, 0xff, 0xc1, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0x83, 0xff, 0xff, 0xff, 0xff, 0x83, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0x83, 0xff, 0xff, 0xff, 0xff, 0x83, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf0, 0xc1, 0xff, 0xff, 0xff, 0xff, 0x03, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0xff, 0xff, 0xff, 0xfe, 0x02, 0x1c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x70, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x47, 0xff, 0xff, 0xc6, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x78, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xff, 0xff, 0xff, 0xfe, 0xc0, 0xfd, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0xf9, 0xfd, 0xff, 0xff, 0xff, 0x3f, 0xf4, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0xf3, 0xff, 0xff, 0xff, 0xbf, 0xcf, 0xe8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xcf, 0xfb, 0xff, 0xff, 0xff, 0xe3, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x24, 0x1f, 0xff, 0xff, 0xff, 0xdf, 0xf8, 0x48, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x37, 0xf8, 0x3f, 0xcc, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xe6, 0x87, 0xf6, 0x5f, 0xc3, 0x4f, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xe8, 0x07, 0xf4, 0x5f, 0xc0, 0x37, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x87, 0xf8, 0x3f, 0xc3, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x07, 0xf0, 0x0f, 0xc0, 0x01, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0xe8, 0x2f, 0xc0, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x07, 0xe8, 0x2f, 0xc0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0xf0, 0x1f, 0xc0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x11, 0xc7, 0xf0, 0x1f, 0xc3, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xf3, 0xc7, 0xd0, 0x17, 0xc7, 0x87, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xe7, 0x87, 0xd0, 0x17, 0xc3, 0xc7, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x07, 0xe0, 0x07, 0xc1, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0xc0, 0x03, 0xe1, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x9f, 0xa0, 0x0b, 0xfb, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xa0, 0x0b, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x80, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x80, 0x01, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const unsigned char sleeping_octopus1_bmp[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xf0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xfc, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe1, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xdf, 0xef, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xbf, 0xbf, 0xf7, 0xf7, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xce, 0x3f, 0xf0, 0x8f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0xff, 0xfc, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xf8, 0x3f, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xe3, 0xcf, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xc0, 0x0f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3f, 0x07, 0xff, 0xe0, 0x0f, 0xff, 0xc1, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0x83, 0xff, 0xef, 0xff, 0xff, 0x83, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf9, 0xc3, 0xff, 0xe7, 0xff, 0xff, 0x87, 0x3e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf0, 0x81, 0xff, 0xc7, 0xff, 0xff, 0x02, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0xff, 0xc7, 0xff, 0xfe, 0x02, 0x1d, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x70, 0x00, 0x3f, 0xff, 0xff, 0xf8, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x63, 0xff, 0xff, 0x8c, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7c, 0x01, 0xff, 0xff, 0xff, 0xff, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xff, 0xff, 0xff, 0xfe, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0f, 0xfb, 0xfd, 0xff, 0xff, 0x7f, 0xbf, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x37, 0xe7, 0xfb, 0xff, 0xff, 0xbf, 0xcf, 0xd0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x2f, 0x8f, 0xfb, 0xff, 0xff, 0xbf, 0xe3, 0xe8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xdf, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf7, 0xff, 0xff, 0xdf, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x27, 0xf8, 0x3f, 0xc8, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xe7, 0x87, 0xf4, 0x5f, 0xc3, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x87, 0xf0, 0x5f, 0xc0, 0x37, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x98, 0x07, 0xf8, 0x3f, 0xc0, 0x32, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0xe0, 0x0f, 0xc0, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0xe8, 0x2f, 0xc0, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x07, 0xe8, 0x2f, 0xc0, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0xf0, 0x1f, 0xc0, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x21, 0xc7, 0xe0, 0x0f, 0xc7, 0x08, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xe3, 0xc7, 0xd0, 0x17, 0xc7, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xc7, 0x87, 0xd0, 0x17, 0xc3, 0xc7, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0xe0, 0x0f, 0xc1, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0f, 0x80, 0x03, 0xe1, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xa0, 0x0b, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x01, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x80, 0x02, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x01, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const unsigned char annoyed_octopus_bmp[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x1f, 0xf0, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0x1f, 0xf0, 0x67, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x3f, 0xf8, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0xff, 0xfe, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3f, 0x83, 0xff, 0x80, 0x01, 0xff, 0xc1, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xff, 0xbf, 0xfd, 0xff, 0x83, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf8, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x7f, 0xff, 0xff, 0xfe, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x63, 0xff, 0xff, 0xe6, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7c, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x3e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xbf, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xfd, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3f, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0xf3, 0xfd, 0xff, 0xff, 0xbf, 0xcf, 0xe8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x27, 0xc7, 0xff, 0xff, 0xff, 0xdf, 0xe3, 0xe4, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x36, 0x1f, 0xfb, 0xff, 0xff, 0xdf, 0xf8, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfb, 0xff, 0xff, 0xdf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x33, 0xfc, 0x3f, 0xcc, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xe2, 0xc7, 0xfa, 0x5f, 0xe3, 0x47, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xe8, 0x07, 0xfa, 0x7f, 0xe0, 0x17, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x40, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x03, 0xf0, 0x0f, 0xe0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x03, 0xe8, 0x17, 0xe0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x03, 0xe0, 0x17, 0xe0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x03, 0xf8, 0x1f, 0xc0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x90, 0xc3, 0xe0, 0x07, 0xc3, 0x84, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xf3, 0xe3, 0xe8, 0x17, 0xc7, 0xc7, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xe7, 0x83, 0xe8, 0x1f, 0xc1, 0xe3, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x87, 0xe0, 0x07, 0xe0, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x87, 0xc0, 0x03, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0xd0, 0x0f, 0xf9, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xc0, 0x03, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xc0, 0x01, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x40, 0x01, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x80, 0x01, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const unsigned char sleeping_octopus2_bmp[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfe, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x80, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xdf, 0xef, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xbf, 0xbf, 0xf7, 0xf7, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xce, 0x3f, 0xf0, 0x8f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0xff, 0xf8, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xf8, 0x3f, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xfb, 0xbf, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3f, 0x07, 0xff, 0xfb, 0xbf, 0xff, 0xc1, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0x83, 0xff, 0xfb, 0xbf, 0xff, 0x83, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf9, 0xc3, 0xff, 0xfc, 0x7f, 0xff, 0x87, 0x3e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf0, 0x81, 0xff, 0xff, 0xff, 0xff, 0x02, 0x3e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0xff, 0xff, 0xff, 0xfe, 0x02, 0x1d, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x70, 0x00, 0x3f, 0xff, 0xff, 0xf8, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x63, 0xff, 0xff, 0x8c, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7c, 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xff, 0xff, 0xff, 0xfe, 0xc0, 0xfa, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0f, 0xfb, 0xfd, 0xff, 0xff, 0x7f, 0xbf, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0xe7, 0xfb, 0xff, 0xff, 0xbf, 0xcf, 0xd0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x2f, 0x8f, 0xfb, 0xff, 0xff, 0xbf, 0xe3, 0xc8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xdf, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf7, 0xff, 0xff, 0xdf, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x27, 0xf8, 0x3f, 0xc8, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xe7, 0x87, 0xf4, 0x5f, 0xc3, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x87, 0xf0, 0x5f, 0xc0, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0xf8, 0x3f, 0xc0, 0x02, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0xe0, 0x0f, 0xc0, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0xe8, 0x2f, 0xc0, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x07, 0xe8, 0x2f, 0xc0, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0xf0, 0x1f, 0xc0, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x21, 0xc7, 0xe0, 0x0f, 0xc7, 0x08, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xe3, 0xc7, 0xd0, 0x17, 0xc7, 0x8f, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xc7, 0x87, 0xd0, 0x17, 0xc3, 0xc7, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0xe0, 0x0f, 0xc1, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0f, 0x80, 0x03, 0xe1, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xa0, 0x0b, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xc0, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x01, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x80, 0x02, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x01, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const unsigned char angry_octopus2_bmp[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfb, 0xff, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x7f, 0xfe, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x3f, 0xf8, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf8, 0xcb, 0xa6, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0xc3, 0xc6, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x0f, 0xe0, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x0f, 0xf0, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x3f, 0xf8, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x07, 0xff, 0xfc, 0x7f, 0xff, 0xc1, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0x83, 0xff, 0xf9, 0xbf, 0xff, 0x83, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0x81, 0xff, 0xf7, 0xdf, 0xff, 0x83, 0xbe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf0, 0x80, 0xff, 0xff, 0xff, 0xff, 0x03, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0xff, 0xff, 0xff, 0xfe, 0x01, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x70, 0x00, 0x3f, 0xff, 0xff, 0xf8, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x67, 0xff, 0xff, 0xce, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7c, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xff, 0xff, 0xff, 0xfe, 0xc0, 0xfd, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0f, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf4, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0xe3, 0xff, 0xff, 0xff, 0xbf, 0xcf, 0xe8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x27, 0x8f, 0xfb, 0xff, 0xff, 0xbf, 0xe3, 0xe4, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfb, 0xff, 0xff, 0xdf, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x37, 0xf8, 0x3f, 0xcc, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xe2, 0x87, 0xf6, 0x5f, 0xc3, 0x4f, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xe8, 0x07, 0xf4, 0x5f, 0xc0, 0x17, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0xf8, 0x3f, 0xc0, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0xf0, 0x0f, 0xc0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0xe8, 0x2f, 0xc0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0xe8, 0x2f, 0xc0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x03, 0xf0, 0x1f, 0xc0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x11, 0xc3, 0xf0, 0x1f, 0xc3, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xf3, 0xe3, 0xc0, 0x17, 0xc7, 0x87, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xe7, 0x83, 0xd0, 0x17, 0xc1, 0xc7, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0xe0, 0x0f, 0xc1, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0xc0, 0x03, 0xe1, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0xa0, 0x0b, 0xfb, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xc0, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x80, 0x01, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x80, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x80, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const unsigned char annoyed_octopus2_bmp[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x1f, 0xf0, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3f, 0x83, 0xff, 0x80, 0x01, 0xff, 0xc1, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xff, 0xbf, 0xfd, 0xff, 0x83, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf8, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x7f, 0xff, 0xff, 0xfe, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x63, 0xff, 0xff, 0xe6, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7c, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x3e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xbf, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xfd, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3f, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0xf3, 0xfd, 0xff, 0xff, 0xbf, 0xcf, 0xe8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x27, 0xc7, 0xff, 0xff, 0xff, 0xdf, 0xe3, 0xe4, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x36, 0x1f, 0xfb, 0xff, 0xff, 0xdf, 0xf8, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfb, 0xff, 0xff, 0xdf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x33, 0xfc, 0x3f, 0xcc, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xe2, 0xc7, 0xfa, 0x5f, 0xe3, 0x47, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xe8, 0x07, 0xfa, 0x7f, 0xe0, 0x17, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x40, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x03, 0xf0, 0x0f, 0xe0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x03, 0xe8, 0x17, 0xe0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x03, 0xe0, 0x17, 0xe0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x03, 0xf8, 0x1f, 0xc0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x90, 0xc3, 0xe0, 0x07, 0xc3, 0x84, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xf3, 0xe3, 0xe8, 0x17, 0xc7, 0xc7, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xe7, 0x83, 0xe8, 0x1f, 0xc1, 0xe3, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x87, 0xe0, 0x07, 0xe0, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x87, 0xc0, 0x03, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0xd0, 0x0f, 0xf9, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xc0, 0x03, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xc0, 0x01, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x40, 0x01, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x80, 0x01, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// STATE VARIABLES
int x_pos = 0;
int x_direction = 1;
int speed = 2;
unsigned long stateStartTime;
int OLED_mood = 1; // 0: Time, 1: Happy, 2: Angry, 3: Peeking, 4: Sleeping, 5: Annoyed
int saved_OLED_mood = 1;
unsigned long last_interaction_time = 0;
unsigned long last_servo_move_time = 0;
unsigned long last_rage_decay_time = 0;
unsigned long last_peek_time = 0;
unsigned long timetomotionpeek = 0;
unsigned long changed_display_time = 0;
unsigned long time_display_period = 2000; // HOW LONG TIME MUST BE DISPLAYED
unsigned long image_display_period = 5000; // HOW LONG IMAGE MUST STAY ON
bool can_block = false;
bool manual_peek_trigger = false;
bool manual_block_trigger = false;
float current_v = 0.0;
bool is_charging = false;
int randomly_annoyed = 1;
unsigned long annoyed_end_time = 0;
Servo doorServo, handServo;
// PRE-DECLARED VOID LOOPS
void setPixelColor(uint8_t r, uint8_t g, uint8_t b);
bool wakeServos();
void sleepServos();
float getVoltage();
void DoorOpen(int o, int s);
void DoorClose(int o, int s);
void HandToPin(int o, int s);
void HandToHide(int o, int s);
void executeMove(int moveNum);
void handleTantrum();
void executeRageVibe(int level, bool isTantrum);
void peek();
void updateHankColor();
void MOVE1(), MOVE2(), MOVE3(), MOVE4(), MOVE5(), MOVE6(), MOVE7(), MOVE8(), MOVE9(), MOVE10(), MOVE11(), MOVE12();
void softPWM(int pin, int dutyCycle, int durationMs);
void checkSerialCommands();
void breatheGreen(int speed, int minInt, int maxInt);
void breatheRed(int speed, int minInt, int maxInt);
void setup() {
pixel.begin();
Serial.begin(9600);
Wire.begin(21, 22);
if (debug_mode == false) {
setPixelColor(0, 0, 255);
delay(500);
setPixelColor(0, 0, 0);
}
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;)
;
}
pinMode(switch_pin, INPUT_PULLUP);
pinMode(motion_sensor_pin, INPUT_PULLDOWN);
pinMode(vibration_motor_pin, OUTPUT);
pinMode(Servo_power_pin, OUTPUT);
pinMode(battery_pin, INPUT);
digitalWrite(Servo_power_pin, LOW);
last_interaction_time = millis();
last_rage_decay_time = millis();
setPixelColor(255, 255, 255);
delay(500);
setPixelColor(0, 0, 0);
if (wakeServos()) {
HandToHide(0, 8);
delay(200);
DoorClose(0, 8);
sleepServos();
}
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(10, 20);
display.println("Connecting WiFi...");
display.display();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Connected");
// Sync NTP Time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
pinMode(detectPin, INPUT);
stateStartTime = millis();
delay(1000);
}
//MAIN LOOP
void loop() {
checkSerialCommands();
unsigned long current_millis = millis();
display.clearDisplay();
// READ INPUTS
current_v = getVoltage();
int is_charging = digitalRead(detectPin);
bool motion_detected = digitalRead(motion_sensor_pin);
timetomotionpeek = current_millis - last_peek_time;
// LED PRIORITY CHAIN
if (serial_led_override) {
breatheRed(1000, 0, 255);
} else if (current_v < LID_OPEN_BATTERY_LEVEL) {
breatheRed(1000, 0, 255); // Red breathing priority
} else if (motion_detected == HIGH && constant_motion_detect == HIGH) {
setPixelColor(255, 100, 0); // Solid Orange
} else if (is_charging) {
breatheGreen(1000, 0, 255);
} else if (current_v > FULL_BATTERY_LEVEL - 0.05 && rage_level == 0) {
breatheGreen(3000, 10, 50);
} else {
// Check for rage logic color update, otherwise off
if (rage_level > 0) updateHankColor();
else setPixelColor(0, 0, 0);
}
// SWAP TO TIME SCREEN
if (digitalRead(switch_pin) == HIGH) {
// Clock cycle logic
if (current_millis - changed_display_time > time_display_period && OLED_mood != 0) {
changed_display_time = current_millis;
saved_OLED_mood = OLED_mood;
OLED_mood = 0;
}
else if (current_millis - changed_display_time > image_display_period && OLED_mood == 0) {
changed_display_time = current_millis;
//BASED ON RANDOMLY ANNOYED
if (randomly_annoyed == 0 && current_millis > annoyed_duration + annoyed_end_time && (selected_move > 5 || random_mode == HIGH)){
annoyed_end_time = current_millis;
randomly_annoyed = 5;
OLED_mood = 5;
}
//BASED ON RAGE LEVEL
else if (rage_level <= 6) {
OLED_mood = 1;
} else if (rage_level <= 14) {
OLED_mood = 5;
} else {
OLED_mood = 2;
}
}
}
else {
// Box is OPEN/ACTIVE (switch_pin == LOW)
// If we were showing the clock, wake up immediately
if (OLED_mood == 0) {
OLED_mood = (saved_OLED_mood != 0) ? saved_OLED_mood : 1;
changed_display_time = current_millis; // Reset timer so clock doesn't pop back up
}
}
// MOTION DETECTION
if (motion_detected == HIGH && (current_millis - last_servo_move_time >= motion_blind_time)) {
if (current_v >= CRITICAL_BATTERY_LEVEL) {
if (current_millis - last_peek_time > PEEK_THRESHOLD_M * 60 * 1000 || manual_peek_trigger) {
saved_OLED_mood = OLED_mood;
OLED_mood = 3;
setPixelColor(255, 100, 0); // <--- ADD THIS HERE (Orange only when peeking)
delay(200);
if (debug_mode) Serial.println("[SENTRY] Peeking...");
manual_peek_trigger = false;
if (wakeServos()) {
setPixelColor(255, 255, 255);
peek();
setPixelColor(0, 0, 0);
sleepServos();
last_peek_time = millis();
last_servo_move_time = millis();
}
OLED_mood = saved_OLED_mood;
} else if ((random_mode && can_block) || manual_block_trigger) {
saved_OLED_mood = OLED_mood;
if (debug_mode) Serial.println("[SENTRY] Blocking Motion!");
OLED_mood = 5;
setPixelColor(255, 100, 0); // <--- ADD THIS HERE (Orange only when peeking)
delay(200);
manual_block_trigger = false;
can_block = false;
if (wakeServos()) {
updateHankColor();
DoorOpen(25, 8);
HandToPin(0, 8);
delay(random(2000, 4000));
HandToHide(0, 8);
DoorClose(0, 8);
setPixelColor(0, 0, 0);
last_servo_move_time = millis();
sleepServos();
}
OLED_mood = saved_OLED_mood;
}
}
}
// DECAY
if (rage_level > 0 && (current_millis - last_rage_decay_time > RAGE_DECAY_TIME * 1000 * 60)) {
rage_level--;
last_rage_decay_time = current_millis;
if (debug_mode) {
Serial.print("[RAGE] Decay. Current Level: ");
Serial.println(rage_level);
}
}
// SWITCH ACTION
if (digitalRead(switch_pin) == LOW) {
if (current_millis - last_interaction_time > DEBOUNCE_TIME) {
last_interaction_time = current_millis;
randomly_annoyed = random(0,3);
changed_display_time = millis();
if (debug_mode) {
Serial.println("--- SWITCH TRIGGERED ---");
Serial.print("Battery Voltage: ");
Serial.print(current_v);
Serial.println("V");
Serial.print("Current Rage: ");
Serial.println(rage_level);
Serial.print("Random Mode: ");
Serial.println(random_mode ? "ACTIVE" : "INACTIVE");
}
if (wakeServos()) {
int move_to_execute;
// --- MOOD-AWARE MOVE SELECTION ---
if (!random_mode) {
selected_move++;
move_to_execute = selected_move;
if (selected_move >= 12) random_mode = true;
} else {
rage_level = min(rage_level + 1, MAX_RAGE_STEPS);
can_block = true;
// Hank picks moves based on how mad he is
if (rage_level <= 6) {
move_to_execute = random(1, 5); // Level 1: Cautious/Playful
} else if (rage_level <= 14) {
move_to_execute = random(5, 10); // Level 2: Annoyed/Reluctant
} else {
move_to_execute = random(10, 13); // Level 3: FULL RAGE
}
}
if (debug_mode) {
Serial.print("Executing Move: ");
Serial.println(move_to_execute);
}
if (random_mode) handleTantrum();
if (current_v < LID_OPEN_BATTERY_LEVEL) setPixelColor(200, 150, 0);
else updateHankColor();
executeMove(move_to_execute);
HandToHide(0, 8);
delay(350);
if (current_v > LID_OPEN_BATTERY_LEVEL) DoorClose(0, 8);
setPixelColor(0, 0, 0);
last_servo_move_time = millis();
sleepServos();
}
}
}
// SLEEP
if (current_millis - last_interaction_time > DEEP_SLEEP_H * 3600000UL && is_charging == false) {
if (debug_mode) Serial.println("[SYSTEM] Entering Deep Sleep...");
setPixelColor(0, 0, 0);
sleepServos();
esp_sleep_enable_ext0_wakeup((gpio_num_t)switch_pin, 0);
esp_deep_sleep_start();
}
// DRAWING LOGIC
if (OLED_mood != 0) {
const unsigned char* currentBmp = happy_octopus_bmp; // Declare and provide default
int shakeX = 0;
int shakeY = 0;
if (OLED_mood == 1) {
currentBmp = happy_octopus_bmp;
// Only move/glide if Happy
x_pos += (x_direction * speed);
if (x_pos >= 25 || x_pos <= -25) x_direction *= -1;
} else if (OLED_mood == 2) {
unsigned long elapsedInState = current_millis - stateStartTime;
if (elapsedInState < angryShakeTime) {
currentBmp = angry_octopus_bmp;
shakeX = random(-3, 4);
shakeY = random(-3, 4);
} else {
if ((current_millis / angryFrameRate) % 2 == 0) {
currentBmp = angry_octopus_bmp;
} else {
currentBmp = angry_octopus2_bmp;
}
}
} else if (OLED_mood == 3) {
currentBmp = peeking_octopus_bmp;
} else if (OLED_mood == 4) {
if ((current_millis / sleepFrameRate) % 2 == 0) {
currentBmp = sleeping_octopus1_bmp;
} else {
currentBmp = sleeping_octopus2_bmp;
}
} else if (OLED_mood == 5) {
if ((current_millis % random(1000, 2000)) < annoyedBlinkFrameRate) {
currentBmp = annoyed_octopus2_bmp;
} else {
currentBmp = annoyed_octopus_bmp;
}
}
// Draw the bitmap using the variable updated in the logic above
display.drawBitmap(x_pos + shakeX, shakeY, currentBmp, 128, 64, WHITE);
} else {
// Time & Date Mode
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
display.setCursor(20, 25);
display.println("Waiting for Time...");
} else {
display.setTextSize(2);
display.setCursor(15, 5);
display.println(&timeinfo, "%H:%M:%S");
display.setTextSize(1);
display.setCursor(10, 30);
display.println(&timeinfo, "%A");
display.setCursor(10, 42);
display.println(&timeinfo, "%B %d, %Y");
display.drawLine(0, 53, 128, 53, WHITE);
display.setCursor(0, 56);
display.printf("B:%.2fV", current_v);
if (is_charging == true) {
display.setCursor(50, 56);
display.print("CHARGING");
}
}
}
display.display();
delay(30);
}
//UTILITIES
float getVoltage() {
long sum = 0;
for (int i = 0; i < 15; i++) {
sum += analogRead(battery_pin);
}
return (sum / 15.0 / 4095.0) * 3.3 * 2.0;
}
void checkSerialCommands() {
if (Serial.available() > 0) {
if (!debug_mode) {
debug_mode = true;
Serial.println("\n[SYSTEM] HUMAN DETECTED. DEBUG MODE ENABLED.");
Serial.println("Type 'status' for full report.");
Serial.println("Type 'command' for list of commands.");
setPixelColor(0, 0, 255);
delay(500);
setPixelColor(0, 0, 0);
delay(500);
setPixelColor(0, 0, 255);
delay(500);
setPixelColor(0, 0, 0);
}
String input = Serial.readStringUntil('\n');
input.trim();
input.toLowerCase();
if (input == "motion") {
constant_motion_detect = !constant_motion_detect;
Serial.print("motion set to: ");
Serial.println(constant_motion_detect);
} else if (input.startsWith("m")) {
int moveNum = input.substring(1).toInt();
if (moveNum >= 1 && moveNum <= 12) {
Serial.print("[TEST] Manually triggering Move: ");
Serial.println(moveNum);
if (wakeServos()) {
executeMove(moveNum);
HandToHide(0, 8);
delay(350);
DoorClose(0, 8);
sleepServos();
}
}
} else if (input == "random") {
random_mode = !random_mode;
Serial.print("[TEST] Random Mode: ");
Serial.println(random_mode ? "ON" : "OFF");
} else if (input.startsWith("rage")) {
rage_level = input.substring(4).toInt();
Serial.print("[TEST] Rage Level set to: ");
Serial.println(rage_level);
} else if (input == "combo") {
Serial.println("[TEST] Triggering LightsAndVibeCombo...");
LightsAndVibeCombo();
} else if (input == " peek") {
if (wakeServos()) {
peek();
sleepServos();
}
} else if (input == "red") {
serial_led_override = true;
} else if (input == "green") {
serial_led_override = false;
} else if (input == "status") {
Serial.println("--- HANK STATUS ---");
Serial.print("Voltage: ");
Serial.println(current_v);
Serial.print("Rage: ");
Serial.println(rage_level);
Serial.print("Random Mode: ");
Serial.println(random_mode);
Serial.print("Last Move: ");
Serial.println(selected_move);
Serial.print(" peek Armed: ");
Serial.println(manual_peek_trigger);
Serial.print("Block Armed: ");
Serial.println(manual_block_trigger);
Serial.print("Deep sleep after: ");
Serial.print(DEEP_SLEEP_H);
Serial.println(" Hours");
Serial.print(" peek after: ");
Serial.print(PEEK_THRESHOLD_M);
Serial.println(" Minutes");
Serial.print(" peek Ready in: ");
Serial.print(((PEEK_THRESHOLD_M * 60 * 1000) - timetomotionpeek) / 1000 / 60);
Serial.print(" minutes (");
Serial.print((((PEEK_THRESHOLD_M * 60 * 1000) - timetomotionpeek) / 1000) % 60);
Serial.println(" seconds)");
Serial.print("Reduce rage after: ");
Serial.print(RAGE_DECAY_TIME);
Serial.println(" Minutes");
Serial.print("Servo Rail Power: ");
Serial.println(digitalRead(Servo_power_pin) == HIGH ? "ON" : "OFF");
Serial.print("Charging: ");
Serial.println(is_charging);
Serial.print("motion detector indicator: ");
Serial.println(constant_motion_detect);
Serial.print("Current state: ");
Serial.println(OLED_mood);
} else if (input == "command") {
Serial.println("m7 — Runs Move 7 instantly. (1-12)");
Serial.println("rage15 — Sets the rage level to 15 (great for testing the color logic)");
Serial.println("random — Toggles random mode on or off.");
Serial.println("combo — Runs your new chaotic vibration/light function.");
Serial.println("open - opens the lid");
Serial.println("close - closes the lid");
Serial.println("sleep - force enter deep sleep");
Serial.println(" peek - run a peek move");
Serial.println("green - set to breathe green");
Serial.println("red - set to breathe red");
Serial.println("motion - toggle motion detector indicator");
} else if (input == "open") {
if (wakeServos()) {
DoorOpen(20, 4);
sleepServos();
}
} else if (input == "close") {
if (wakeServos()) {
DoorClose(0, 4);
sleepServos();
}
} else if (input == "testpeek") {
manual_peek_trigger = true;
Serial.println("[TEST] peek Timer Bypassed. Wave at the sensor now!");
} else if (input == "testblock") {
manual_block_trigger = true;
Serial.println("[TEST] Blocking Logic Primed. Wave at the sensor!");
} else if (input == "sleep") {
esp_sleep_enable_ext0_wakeup((gpio_num_t)switch_pin, 0);
esp_deep_sleep_start();
}
}
}
void updateHankColor() {
if (!random_mode) {
setPixelColor(255, 255, 255);
} else {
int r = map(rage_level, 0, MAX_RAGE_STEPS, 150, 255);
int b = map(rage_level, 0, MAX_RAGE_STEPS, 255, 0);
if (rage_level >= 15) {
for (int i = 0; i < 3; i++) {
setPixelColor(r, 0, b);
delay(100);
setPixelColor(r / 2, 0, b / 2);
delay(100);
}
}
setPixelColor(r, 0, b);
}
}
void setPixelColor(uint8_t r, uint8_t g, uint8_t b) {
for (int i = 0; i < NUM_PIXELS; i++) pixel.setPixelColor(i, pixel.Color(r, g, b));
pixel.show();
}
bool wakeServos() {
if (current_v < CRITICAL_BATTERY_LEVEL) {
if (debug_mode) {
Serial.print("[WAKE] Denied. Low Voltage: ");
Serial.println(current_v);
}
return false;
}
digitalWrite(Servo_power_pin, HIGH);
delay(300);
doorServo.attach(door_pin, 500, 2400);
handServo.attach(hand_pin, 500, 2400);
return true;
}
void sleepServos() {
if (doorServo.attached()) doorServo.write(AktDoorpos);
if (handServo.attached()) handServo.write(AktHandpos);
delay(250);
doorServo.detach();
handServo.detach();
digitalWrite(Servo_power_pin, LOW);
}
void softPWM(int pin, int dutyCycle, int durationMs) {
unsigned long startTime = millis();
while (millis() - startTime < durationMs) {
if (dutyCycle > 0) {
digitalWrite(pin, HIGH);
delayMicroseconds(dutyCycle * 100);
}
if (dutyCycle < 100) {
digitalWrite(pin, LOW);
delayMicroseconds((100 - dutyCycle) * 100);
}
}
digitalWrite(pin, LOW);
}
void executeRageVibe(int level, bool isTantrum) {
int duty = map(level, 0, MAX_RAGE_STEPS, 50, 100);
softPWM(vibration_motor_pin, duty, 150);
LightsAndVibeCombo();
}
void handleTantrum() {
DoorOpen(60, 8);
if (random(0, 20) < rage_level) executeRageVibe(rage_level, true);
}
void peek() {
saved_OLED_mood = OLED_mood;
OLED_mood = 3;
DoorOpen(80, 1);
delay(1500);
DoorClose(0, 1);
}
void executeMove(int m) {
switch (m) {
case 1: MOVE1(); break;
case 2: MOVE2(); break;
case 3: MOVE3(); break;
case 4: MOVE4(); break;
case 5: MOVE5(); break;
case 6: MOVE6(); break;
case 7: MOVE7(); break;
case 8: MOVE8(); break;
case 9: MOVE9(); break;
case 10: MOVE10(); break;
case 11: MOVE11(); break;
case 12: MOVE12(); break;
default: MOVE10(); break;
}
}
//MOVES
void MOVE1() {
DoorOpen(90, 1);
delay(random(2000, 3000));
DoorOpen(60, 2);
HandToPin(-3, 5);
delay(random(500, 1000));
HandToHide(0, 2);
DoorClose(0, 2);
}
void MOVE2() {
DoorOpen(60, 8);
delay(random(500, 2000));
DoorClose(0, 8);
delay(random(500, 2000));
DoorOpen(20, 8);
delay(100);
HandToPin(0, 8);
}
void MOVE3() {
DoorOpen(20, 8);
delay(random(500, 2000));
HandToPin(30, 8);
delay(random(500, 2000));
HandToPin(0, 8);
}
void MOVE4() {
DoorOpen(20, 8);
HandToPin(0, 8);
delay(random(500, 2000));
HandToHide(0, 8);
DoorClose(0, 8);
delay(random(1000, 3000));
DoorOpen(40, 8);
delay(random(500, 2000));
}
void MOVE5() {
DoorOpen(20, 8);
HandToPin(0, 8);
for (int i = 0; i < 2; i++) {
DoorClose(-60, 8);
delay(200);
DoorOpen(20, 8);
delay(200);
}
}
void MOVE6() {
DoorOpen(10, 8);
HandToPin(20, 8);
delay(random(100, 2000));
HandToPin(0, 8);
DoorOpen(60, 8);
HandToPin(0, 8);
}
void MOVE7() {
DoorOpen(10, 8);
HandToPin(0, 8);
delay(random(100, 2000));
for (int i = 0; i < 3; i++) {
DoorClose(-60, 8);
delay(200);
DoorOpen(10, 8);
}
}
void MOVE8() {
DoorOpen(10, 8);
HandToPin(70, 8);
delay(random(500, 2000));
HandToHide(0, 8);
delay(random(500, 2000));
HandToPin(0, 8);
}
void MOVE9() {
delay(random(100, 2000));
DoorOpen(80, 8);
delay(random(1000, 2000));
DoorClose(0, 8);
delay(random(500, 2000));
DoorOpen(20, 8);
HandToPin(0, 8);
}
void MOVE10() {
DoorOpen(20, 8);
HandToPin(0, 8);
}
void MOVE11() {
DoorOpen(20, 8);
delay(random(500, 2000));
DoorClose(0, 8);
delay(400);
DoorOpen(20, 8);
HandToPin(0, 8);
}
void MOVE12() {
int armswingcount = random(1, 10);
DoorOpen(20, 8);
delay(random(100, 1000));
while (armswingcount != 0) {
armswingcount--;
HandToPin(0, 4);
delay(50);
HandToHide(-80, 4);
delay(50);
}
}
//DOOR ACTION
void DoorOpen(int o, int s) {
int t = door_max + o;
for (int p = AktDoorpos; p >= t; p -= s) {
doorServo.write(p);
delay(15);
AktDoorpos = p;
}
doorServo.write(t);
AktDoorpos = t;
}
void DoorClose(int o, int s) {
int t = door_min + o;
for (int p = AktDoorpos; p <= t; p += s) {
doorServo.write(p);
delay(15);
AktDoorpos = p;
}
doorServo.write(t);
AktDoorpos = t;
}
//HAND ACTION
void HandToPin(int o, int s) {
int t = hand_max + o;
for (int p = AktHandpos; p >= t; p -= s) {
handServo.write(p);
if (s <= 4) delay(15);
else delay(10);
AktHandpos = p;
}
handServo.write(t);
AktHandpos = t;
delay(100);
}
void HandToHide(int o, int s) {
int t = hand_min + o;
for (int p = AktHandpos; p <= t; p += s) {
handServo.write(p);
if (s <= 4) delay(15);
else delay(10);
AktHandpos = p;
}
handServo.write(t);
AktHandpos = t;
}
//LIGHTS AND VIBRATION
void FlashingLights() {
unsigned long LTimeDuration = 2000;
unsigned long FLTimer = millis();
while (millis() - FLTimer < LTimeDuration) {
setPixelColor(255, 0, 0);
delay(random(10, 100));
setPixelColor(0, 0, 0);
delay(random(10, 100));
}
setPixelColor(255, 0, 0);
}
void VibrationPulses() {
unsigned long VTimeDuration = rage_level * 150;
unsigned long VTimer = millis();
while (millis() - VTimer < VTimeDuration) {
softPWM(vibration_motor_pin, random(20, 100), random(50, 500));
delay(random(10, 100));
softPWM(vibration_motor_pin, random(20, 100), random(50, 500));
delay(random(10, 100));
}
softPWM(vibration_motor_pin, 0, 0);
}
void LightsAndVibeCombo() {
unsigned long duration = map(rage_level, 0, MAX_RAGE_STEPS, 1000, 3000);
unsigned long start = millis();
unsigned long nextLightToggle = 0;
unsigned long nextVibeCycle = 0;
unsigned long stopVibeTime = 0;
bool vibeActive = false;
while (millis() - start < duration) {
unsigned long now = millis();
if (now >= nextLightToggle) {
nextLightToggle = now + random(15, 100);
static bool toggle = false;
toggle = !toggle;
if (toggle) setPixelColor(255, 0, 0);
else setPixelColor(0, 0, 0);
}
if (!vibeActive && now >= nextVibeCycle) {
vibeActive = true;
stopVibeTime = now + random(50, 600);
digitalWrite(vibration_motor_pin, HIGH);
}
if (vibeActive && now >= stopVibeTime) {
vibeActive = false;
digitalWrite(vibration_motor_pin, LOW);
nextVibeCycle = now + random(50, 400);
}
yield();
}
digitalWrite(vibration_motor_pin, LOW);
}
void breatheGreen(int speed, int minInt, int maxInt) {
float rawIntensity = (exp(sin(millis() / (float)speed * PI)) - 0.36787944) / (2.71828 - 0.36787944);
int finalIntensity = minInt + (rawIntensity * (maxInt - minInt));
for (int i = 0; i < NUM_PIXELS; i++) {
pixel.setPixelColor(i, pixel.Color(0, finalIntensity, 0));
}
pixel.show();
}
void breatheRed(int speed, int minInt, int maxInt) {
float rawIntensity = (exp(sin(millis() / (float)speed * PI)) - 0.36787944) / (2.71828 - 0.36787944);
int finalIntensity = minInt + (rawIntensity * (maxInt - minInt));
for (int i = 0; i < NUM_PIXELS; i++) {
pixel.setPixelColor(i, pixel.Color(finalIntensity, 0, 0));
}
pixel.show();
}2N222 Transistor or similar - cuts power to the servos to save servos and power
VIBRATION
DOOR
HAND
CHARGING