#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "U8glib.h"
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST); // Fast I2C / TWI
// 'Pit Stop Menu-01', 128x64px
const unsigned char epd_Menu_01 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x98,
0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec,
0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
0x3f, 0xff, 0x80, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
0x3f, 0xfe, 0x7f, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
0x3f, 0xfd, 0xff, 0xcf, 0xff, 0x04, 0x10, 0x41, 0x0f, 0x80, 0x82, 0x08, 0x0f, 0xff, 0xff, 0xf4,
0x3f, 0xfb, 0xff, 0xf7, 0xff, 0x7d, 0x97, 0xcf, 0x37, 0xf7, 0xbe, 0x7f, 0x7f, 0xff, 0xff, 0xf4,
0x3f, 0xf7, 0xff, 0xfb, 0xff, 0x0c, 0x10, 0x41, 0x37, 0xf7, 0x82, 0x0f, 0x7f, 0xff, 0xff, 0xf4,
0x3f, 0xe7, 0xff, 0xb9, 0xff, 0x04, 0x30, 0xc1, 0x37, 0xf7, 0x87, 0x0f, 0x7f, 0xff, 0xff, 0xf4,
0x3f, 0xef, 0xff, 0x3d, 0xff, 0xe5, 0xf7, 0xcf, 0x37, 0xf7, 0xbf, 0xef, 0x7f, 0xff, 0xff, 0xf4,
0x3f, 0xcf, 0xfe, 0x7d, 0xff, 0xe5, 0xf3, 0xcf, 0x37, 0xf7, 0x9f, 0xcf, 0x7f, 0xff, 0xff, 0xf4,
0x3f, 0xdf, 0xfc, 0xfe, 0xff, 0x05, 0xf0, 0x41, 0x0f, 0xf7, 0x82, 0x0f, 0x7f, 0xff, 0xff, 0xf4,
0x3f, 0xdf, 0xf9, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
0x2f, 0xdf, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
0x37, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec,
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x20, 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x00, 0x3e, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x3e, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x3e, 0x00, 0x10, 0x00, 0x8c, 0xe7, 0xe3, 0x1e, 0x0f, 0x3c, 0xf8, 0xc4, 0xc0, 0xd3, 0x00,
0x00, 0x3e, 0x00, 0x17, 0x80, 0xdd, 0x30, 0x84, 0xd3, 0x09, 0xb2, 0xc1, 0x35, 0x80, 0xdb, 0x00,
0x00, 0x3e, 0x00, 0x17, 0x80, 0xbd, 0x30, 0x84, 0xde, 0x0f, 0x3c, 0xf9, 0x37, 0x1e, 0xd7, 0x00,
0x00, 0x3e, 0x00, 0x17, 0x80, 0x8d, 0x30, 0x84, 0xde, 0x0f, 0x3e, 0xf9, 0xf7, 0x0c, 0xd3, 0x00,
0x00, 0x3e, 0x00, 0x17, 0x80, 0x8d, 0x30, 0x84, 0xd3, 0x09, 0xb2, 0xc1, 0xf4, 0x80, 0xd3, 0x00,
0x00, 0x3e, 0x00, 0x10, 0x00, 0x8d, 0xb0, 0x84, 0x93, 0x0d, 0xb2, 0xc1, 0x34, 0xc0, 0xd3, 0x00,
0x00, 0x3e, 0x00, 0x30, 0x00, 0x8c, 0xe0, 0x83, 0x13, 0x0f, 0x32, 0xf9, 0x34, 0xc0, 0xd3, 0x00,
0x00, 0x3e, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x20, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x00, 0x02, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0e, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0xc0, 0x00, 0x00, 0xe3, 0x8f, 0x9c, 0xc8, 0x0b, 0x21, 0xf3, 0xef, 0xd9, 0x7c, 0x00,
0x00, 0x03, 0x9c, 0x00, 0x00, 0x9a, 0x68, 0x32, 0xd0, 0x0b, 0xa1, 0x82, 0x03, 0x19, 0x64, 0x00,
0x00, 0x00, 0x36, 0x00, 0x00, 0xf3, 0xcf, 0xb2, 0xe1, 0xcb, 0x61, 0xf3, 0xc3, 0x19, 0x7c, 0x00,
0x00, 0x0f, 0xe3, 0xfc, 0x00, 0xf3, 0xcf, 0x3e, 0xf1, 0xcb, 0x60, 0xf3, 0xc3, 0x19, 0x7c, 0x00,
0x00, 0x00, 0x36, 0x00, 0x00, 0x9a, 0x68, 0x3e, 0xd8, 0x0b, 0x20, 0x12, 0x03, 0x19, 0x60, 0x00,
0x00, 0x00, 0x1c, 0x60, 0x00, 0x92, 0x6c, 0x32, 0xc8, 0x0b, 0x20, 0x12, 0x03, 0x1b, 0x60, 0x00,
0x00, 0x00, 0x00, 0xf0, 0x00, 0xe2, 0x6f, 0xb2, 0xc8, 0x0b, 0x21, 0xf3, 0xe3, 0x0e, 0x60, 0x00,
0x00, 0x0f, 0xff, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'PS-Logo', 43x33px
const unsigned char NL_PS_Logo [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x8f, 0xf1, 0xf8, 0x3f, 0x00, 0x61, 0x8f, 0xf1, 0xf8,
0x3f, 0x00, 0x79, 0x8c, 0x01, 0x86, 0x30, 0xc0, 0x79, 0x8c, 0x01, 0x86, 0x30, 0xc0, 0x67, 0x8f,
0xf1, 0xf8, 0x30, 0xc0, 0x67, 0x8f, 0xf1, 0xf8, 0x30, 0xc0, 0x61, 0x8c, 0x01, 0x86, 0x30, 0xc0,
0x61, 0x8c, 0x01, 0x86, 0x30, 0xc0, 0x61, 0x8c, 0x01, 0x86, 0x30, 0xc0, 0x61, 0x8c, 0x01, 0x86,
0x30, 0xc0, 0x61, 0x8f, 0xf1, 0x86, 0x3f, 0x00, 0x61, 0x8f, 0xf1, 0x86, 0x3f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x70, 0x00, 0x3e, 0x03, 0xfe, 0x00, 0x70, 0x00, 0x3e, 0x03, 0xff, 0x00, 0x70, 0x01, 0xff, 0xc3,
0xff, 0x80, 0x70, 0x01, 0xc1, 0xc3, 0x83, 0x80, 0x70, 0x01, 0xc1, 0xc3, 0x83, 0x80, 0x70, 0x01,
0xc1, 0xc3, 0xff, 0x00, 0x70, 0x01, 0xc1, 0xc3, 0xfe, 0x00, 0x70, 0x01, 0xc1, 0xc3, 0xff, 0x00,
0x70, 0x01, 0xff, 0xc3, 0x83, 0x80, 0x70, 0x01, 0xff, 0xc3, 0x81, 0xc0, 0x70, 0x01, 0xff, 0xc3,
0x81, 0xc0, 0x70, 0x01, 0xc1, 0xc3, 0x81, 0xc0, 0x70, 0x01, 0xc1, 0xc3, 0x83, 0xc0, 0x7f, 0xe1,
0xc1, 0xc3, 0xff, 0x80, 0x7f, 0xe1, 0xc1, 0xc3, 0xff, 0x00, 0x7f, 0xe1, 0xc1, 0xc3, 0xfe, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'PS-Select-S', 126x20px
const unsigned char NL_PS_Select_S [] PROGMEM = {
0x3f, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x40, 0x00, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x40, 0x00, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x3f, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc
};
// 'PS-Select-L', 126x20px
const unsigned char NL_PS_Select_L [] PROGMEM = {
0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0
};
// 'PS-I-03', 16x16px
const unsigned char NL_PS_I_03 [] PROGMEM = {
0x38, 0x00, 0x44, 0x00, 0xc7, 0xff, 0x44, 0x00, 0x38, 0x00, 0x01, 0xc0, 0x02, 0x20, 0xfe, 0x3f,
0x02, 0x20, 0x01, 0xc0, 0x00, 0x1c, 0x00, 0x22, 0xff, 0xe3, 0x00, 0x22, 0x00, 0x1c, 0x00, 0x00
};
// 'PS-I-01', 16x16px
const unsigned char NL_PS_I_01 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x78, 0x18, 0x78, 0x08, 0x78, 0x09, 0xf8, 0x0f,
0x78, 0x09, 0x78, 0x08, 0x78, 0x18, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'PS-I-02', 16x16px
const unsigned char NL_PS_I_02 [] PROGMEM = {
0x00, 0x00, 0x0f, 0xf0, 0x18, 0x18, 0x32, 0x4c, 0x60, 0x06, 0xc8, 0x1b, 0x80, 0x31, 0xa0, 0x61,
0x80, 0xc5, 0x81, 0x81, 0x00, 0x00, 0x33, 0x28, 0x2a, 0xb8, 0x33, 0x28, 0x2a, 0x28, 0x00, 0x00
};
// Array of all bitmaps for convenience. (Total bytes used to store images in PROGMEM = 144)
const int NL_allArray_LEN = 3;
const unsigned char* NL_allArray[3] = {
NL_PS_I_01,
NL_PS_I_02,
NL_PS_I_03
};
// ------------------ end generated bitmaps from image2cpp ---------------------------------
const int NUM_ITEMS = 3; // number of items in the list and also the number of screenshots and screenshots with QR codes (other screens)
const int MAX_ITEM_LENGTH = 15; // maximum characters for the item name
char menu_items [NUM_ITEMS] [MAX_ITEM_LENGTH] = { // array with item names
{ "Speed Test" },
{ "Motor Break-In" },
{ "Break-In Setup" },
};
#define ENCODER_CLK 2 //KY-040 CLK
#define ENCODER_DT 3 //KY-040 DT
#define ENCODER_BTN 4 //KY-040 Button
int lastClk = HIGH;
int item_selected = 0; // which item in the menu is selected
int item_sel_previous; // previous item - used in the menu screen to draw the item before the selected one
int item_sel_next; // next item - used in the menu screen to draw next item after the selected one
int current_screen = 0; // 0 = menu, 1 = screenshot, 2 = qr
void setup() {
// Oled Setup
Serial.begin(9600);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
u8g.setFont(u8g_font_tpssb);
u8g.setColorIndex(1); // set the color to white
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
pinMode(ENCODER_BTN, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
}
}
void loop() {
if (current_screen == 0) { // MENU SCREEN
if (digitalRead(ENCODER_BTN) == LOW) { //When Click Button
Serial.println("Click");
digitalWrite(LED_BUILTIN, HIGH);
} else {
digitalWrite(LED_BUILTIN, LOW);
}
int newClk = digitalRead(ENCODER_CLK);
if (newClk != lastClk) {
// There was a change on the CLK pin
lastClk = newClk;
int dtValue = digitalRead(ENCODER_DT);
if (newClk == LOW && dtValue == HIGH) {
Serial.println("CW");
}
if (newClk == LOW && dtValue == LOW) {
Serial.println("CCW");
}
}
}
/*
u8g.firstPage();
do {
u8g.drawBitmapP( 0, 0, 128/8, 64, epd_Menu_01);
} while ( u8g.nextPage() );
if (digitalRead(ENCODER_SW) == LOW && millis() - modeLastChanged > 300) {
modeLastChanged = millis();
nextMode();
updateDisplay();
}
int newClk = digitalRead(ENCODER_CLK);
if (newClk != lastClk) {
// There was a change on the CLK pin
lastClk = newClk;
int dtValue = digitalRead(ENCODER_DT);
if (newClk == LOW && dtValue == HIGH) {
Serial.println("Rotated clockwise ⏩");
}
if (newClk == LOW && dtValue == LOW) {
Serial.println("Rotated counterclockwise ⏪");
}
}
*/
}