ProtoTracer  1.0
Real-time 3D rendering and animation engine
Loading...
Searching...
No Matches
SSD1306.cpp
Go to the documentation of this file.
1#include "SSD1306.h"
2
3#ifdef SH1106
4Adafruit_SH1106 HeadsUpDisplay::display(OLED_RESET);
5#else
6Adafruit_SSD1306 HeadsUpDisplay::display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
7#endif
8
10
11const uint8_t HeadsUpDisplay::CoelaSplash[] = {
120xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0x7F, 0x1F, 0xFF, 0xFF, 0x43, 0x10, 0x00, 0x0F, 0xFF,
130xFF, 0xFF, 0xFF, 0xE1, 0xCF, 0x9F, 0xFF, 0xBB, 0xF7, 0xFF, 0xFE, 0x90, 0x70, 0x00, 0x07, 0xFF,
140xFF, 0xFF, 0xFF, 0x80, 0x3F, 0xBF, 0xFF, 0x97, 0xF9, 0xFF, 0xFE, 0xF8, 0x0E, 0x00, 0x03, 0xFF,
150xFF, 0xFF, 0xFF, 0x00, 0x1F, 0xBF, 0xFF, 0xDF, 0xFE, 0xFF, 0xFF, 0xFE, 0x0C, 0x00, 0x01, 0xFF,
160xFF, 0xFF, 0xFF, 0x01, 0xCC, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0xFF,
170xFF, 0xFF, 0xFE, 0x07, 0xF3, 0xFF, 0xFE, 0xFF, 0xFF, 0xBF, 0xF7, 0xFF, 0xC0, 0x00, 0x00, 0x7F,
180xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xDF, 0xFD, 0xFF, 0xF0, 0x00, 0x00, 0x3F,
190xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xD7, 0xFE, 0x7F, 0xF8, 0x00, 0x00, 0x1F,
200xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xEF, 0xFF, 0x9F, 0xFE, 0x00, 0x00, 0x0F,
210xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xF3, 0xE0, 0x0F, 0xFF, 0x80, 0x00, 0x07,
220xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xF3, 0xC0, 0x01, 0xFF, 0xF0, 0x00, 0x03,
230xFF, 0xFF, 0xFF, 0x7E, 0xF8, 0x7E, 0x00, 0x03, 0xFF, 0xF7, 0x80, 0x00, 0x7F, 0xFC, 0x00, 0x01,
240xFF, 0xFF, 0xFF, 0x7D, 0xF0, 0x3C, 0x00, 0x01, 0xFF, 0xF7, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00,
250xFF, 0xFF, 0xFF, 0x7F, 0xE0, 0x1E, 0x00, 0x01, 0xFF, 0xEC, 0x00, 0x00, 0x30, 0xFF, 0xF8, 0x00,
260xFF, 0xFF, 0xFE, 0xFF, 0xE0, 0x1F, 0x00, 0x01, 0xFF, 0x98, 0x00, 0x00, 0x1F, 0x03, 0xFF, 0xC1,
270xFF, 0xFF, 0xFE, 0xFF, 0xE0, 0x1F, 0x80, 0x00, 0xFE, 0x70, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x1F,
280xFF, 0xFF, 0xFE, 0xFF, 0xC0, 0x1F, 0xC0, 0x00, 0xFD, 0xF0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
290xFF, 0xFF, 0xFE, 0xFF, 0xC0, 0x3E, 0xF0, 0x01, 0xF3, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
300xFF, 0xFF, 0xFE, 0xFF, 0x80, 0x38, 0x3C, 0x01, 0x8F, 0xF0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
310xFF, 0xFF, 0xFE, 0xDF, 0x00, 0x78, 0x0F, 0x80, 0x67, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF,
320xFF, 0xFF, 0xFE, 0xFE, 0x00, 0x70, 0x01, 0xFF, 0xCF, 0xB0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
330xFF, 0xFF, 0xFF, 0x7C, 0x00, 0xE0, 0x00, 0x0F, 0x0F, 0x9C, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xFF,
340xFF, 0xFF, 0xFF, 0x38, 0x03, 0xF0, 0x00, 0x06, 0x1F, 0x9E, 0x40, 0x00, 0x00, 0x03, 0xFF, 0xFF,
350xFF, 0xFF, 0xFF, 0x9F, 0xFE, 0x0C, 0x00, 0x0E, 0x1F, 0xDF, 0x30, 0x00, 0x00, 0x01, 0xFF, 0xFF,
360xFF, 0xFF, 0xFF, 0xE0, 0x3F, 0x62, 0x00, 0x1C, 0x3F, 0xBF, 0x8E, 0x00, 0x00, 0x00, 0xFF, 0xFF,
370xFF, 0xFF, 0xFF, 0xFF, 0xC1, 0xB1, 0x80, 0x7E, 0xFE, 0x7F, 0x83, 0xC0, 0x00, 0x00, 0x7F, 0xFF,
380xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x58, 0x40, 0xFF, 0xF9, 0xFF, 0xC0, 0x78, 0x00, 0x00, 0x7F, 0xFF,
390xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0x20, 0xFF, 0x87, 0xFF, 0xE0, 0xE0, 0x00, 0x00, 0xFF, 0xFF,
400xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x11, 0xFF, 0xBF, 0xFF, 0xF8, 0x3F, 0xFF, 0xC3, 0xFF, 0xFF,
410xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xCF, 0xFF, 0xDF, 0xFF, 0xFE, 0x07, 0xFF, 0x07, 0xFF, 0xFF,
420xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x76, 0x7F, 0xBF, 0xFF, 0xFF, 0x80, 0x00, 0x1F, 0xFF, 0xFF,
430xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x94, 0x3E, 0xFF, 0xFF, 0xFF, 0xFC, 0x02, 0xFF, 0xFF, 0xFF,
440xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE8, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF,
450xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x78, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0x3F, 0xFF, 0xFF,
460xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF9, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x9F, 0xFF, 0xFF,
470xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF7, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xCF, 0xFF, 0xFF,
480xE0, 0x3F, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xC7, 0xFF, 0xFF,
490xCF, 0x9F, 0xFF, 0xEF, 0x3F, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xE0, 0x00, 0xBF, 0xE7, 0xFF, 0xFF,
500xD8, 0xC0, 0x30, 0x03, 0x30, 0x1F, 0xFF, 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0x1F, 0xFF, 0xFF,
510xD8, 0xCF, 0x87, 0xC3, 0x27, 0xCF, 0xFF, 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x60, 0xFF, 0xFF, 0xFF,
520xD8, 0x18, 0xCC, 0x63, 0x2E, 0x6F, 0xFF, 0x7F, 0xFF, 0xFF, 0xF8, 0x02, 0x0F, 0xFF, 0xFF, 0xFF,
530xD8, 0x18, 0xCC, 0x63, 0x20, 0x6F, 0xFF, 0xBF, 0xFF, 0xFF, 0xF0, 0x0D, 0xFF, 0xFF, 0xFF, 0xFF,
540xD8, 0x18, 0xCC, 0x63, 0x30, 0x6F, 0xFF, 0xBF, 0xFF, 0xFF, 0xF8, 0x1B, 0xFF, 0xFF, 0xFF, 0xFF,
550xD8, 0x18, 0xCF, 0xE3, 0x27, 0xEF, 0xFF, 0x9F, 0xFF, 0xFE, 0x40, 0x67, 0xFF, 0xFF, 0xFF, 0xFF,
560xD8, 0xD8, 0xCC, 0x03, 0x2C, 0x6F, 0xFF, 0xDF, 0xFF, 0xFE, 0x01, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF,
570xD8, 0xD8, 0xCC, 0xE3, 0x0C, 0x6F, 0xFF, 0xED, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF,
580xCF, 0x8F, 0x87, 0xCF, 0xC7, 0xEF, 0xFF, 0xE5, 0xFB, 0xFF, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
590xE0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0xFC, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
600xE0, 0x00, 0x00, 0x00, 0x00, 0x67, 0xFF, 0xFD, 0x1E, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
610xEF, 0x80, 0x00, 0x0C, 0x30, 0xF7, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF,
620xCF, 0x80, 0x00, 0x0C, 0x30, 0xF7, 0xC0, 0x01, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xED, 0xFF, 0xFF,
630xD8, 0xC0, 0x00, 0x0C, 0x30, 0xF7, 0xDF, 0xBD, 0xFF, 0xFE, 0xDF, 0xFF, 0xFF, 0xED, 0xFF, 0xFF,
640xD8, 0xCF, 0x8F, 0xC5, 0xFE, 0xF7, 0xD8, 0x0D, 0x80, 0x00, 0xC0, 0x10, 0x00, 0x01, 0x02, 0x07,
650xD8, 0x1C, 0xCC, 0x68, 0x30, 0x67, 0xD8, 0x0D, 0x3C, 0x73, 0xF7, 0xC7, 0x9F, 0x3C, 0x78, 0xF3,
660xD8, 0x00, 0xCC, 0x63, 0xB0, 0x6F, 0xD8, 0x0D, 0x66, 0xC8, 0xC6, 0x6C, 0xD9, 0x8C, 0xCD, 0x9B,
670xD8, 0x0F, 0xCC, 0x6F, 0xB0, 0x6F, 0xDF, 0x0D, 0x66, 0xC8, 0xC6, 0x6C, 0xD9, 0x8C, 0xCD, 0x83,
680xD8, 0x18, 0xCC, 0x6F, 0xB0, 0x6F, 0xD8, 0x0D, 0x7E, 0xC0, 0xC6, 0x0C, 0xD9, 0x8C, 0xC0, 0xF3,
690xD8, 0xD8, 0xCC, 0x6F, 0xB0, 0x0F, 0xD8, 0x0C, 0x60, 0xC8, 0xC6, 0xEC, 0xD9, 0x8C, 0xCC, 0x1B,
700xD8, 0xD8, 0xCC, 0x6F, 0xB0, 0x6F, 0xD8, 0x0C, 0x66, 0xC8, 0xC6, 0xEC, 0xD9, 0x8C, 0xCD, 0x9B,
710xCF, 0x8F, 0xCC, 0x6F, 0x9E, 0x6F, 0xDF, 0xBF, 0x3C, 0x72, 0x76, 0xE7, 0x99, 0xBE, 0x78, 0xF3,
720xE0, 0x20, 0x00, 0x0F, 0xC0, 0x0F, 0xC0, 0x00, 0x01, 0x07, 0x00, 0xF0, 0x00, 0x00, 0x82, 0x07,
730xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
740xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
750xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
76};
77
78const uint8_t HeadsUpDisplay::PrototracerSplash[] = {
790xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
800xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
810xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
820xF8, 0x00, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
830xF0, 0x00, 0x7F, 0xFF, 0xFE, 0x01, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
840xF1, 0xFC, 0x3F, 0xFF, 0xFE, 0x71, 0xFF, 0xF3, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
850xF1, 0xFC, 0x00, 0x00, 0x00, 0x70, 0x00, 0x03, 0x80, 0x01, 0x00, 0x20, 0x08, 0x00, 0x00, 0x7F,
860xF1, 0xC7, 0x00, 0x00, 0x00, 0x70, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
870xF1, 0xC7, 0x7F, 0x87, 0xE3, 0xFE, 0x3F, 0x1F, 0xF3, 0xF8, 0x3F, 0x0F, 0xC1, 0xF8, 0xFE, 0x1F,
880xF1, 0xC7, 0x7F, 0x87, 0xE3, 0xFE, 0x3F, 0x1F, 0xF3, 0xF8, 0x3F, 0x0F, 0xC1, 0xF8, 0xFE, 0x1F,
890xF1, 0xC7, 0x71, 0xCE, 0x38, 0x70, 0x71, 0xC3, 0x83, 0x8E, 0xE3, 0x9C, 0x77, 0x1C, 0xE3, 0x9F,
900xF1, 0xFC, 0x71, 0xCE, 0x38, 0x70, 0x71, 0xC3, 0x83, 0x8E, 0x03, 0x9C, 0x77, 0x1C, 0xE3, 0x9F,
910xF1, 0xFC, 0x71, 0xCE, 0x38, 0x70, 0x71, 0xC3, 0x83, 0x8E, 0x03, 0x9C, 0x77, 0x1C, 0xE3, 0x9F,
920xF1, 0xC0, 0x70, 0x0E, 0x38, 0x70, 0x71, 0xC3, 0x83, 0x80, 0x3F, 0x9C, 0x07, 0xFC, 0xE0, 0x1F,
930xF1, 0xC0, 0x70, 0x0E, 0x38, 0x70, 0x71, 0xC3, 0x83, 0x80, 0xE3, 0x9C, 0x77, 0x00, 0xE0, 0x3F,
940xF1, 0xCE, 0x71, 0x8E, 0x38, 0x70, 0x71, 0xC3, 0x83, 0x9C, 0xE3, 0x9C, 0x77, 0x00, 0xE7, 0xFF,
950xF1, 0xCE, 0x71, 0x8E, 0x38, 0x70, 0x71, 0xC3, 0x83, 0x9C, 0xE3, 0x9C, 0x77, 0x1C, 0xE7, 0xFF,
960xF1, 0xCE, 0x71, 0x87, 0xE0, 0x1E, 0x3F, 0x00, 0xF3, 0x9C, 0x3F, 0x8F, 0xC1, 0xF8, 0xE7, 0xFF,
970xF1, 0xCE, 0x71, 0xC7, 0xE0, 0x1E, 0x3F, 0x00, 0xF3, 0x9C, 0x3F, 0x8F, 0xC1, 0xF8, 0xE7, 0xFF,
980xF8, 0x0E, 0x03, 0xE0, 0x07, 0x80, 0x00, 0x1C, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF,
990xF8, 0x1F, 0x03, 0xF0, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x3F, 0x00, 0x00, 0x08, 0x00, 0x0F, 0xFF,
1000xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1010xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1020xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1030xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF,
1040xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x77,
1050xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF,
1060xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x8F, 0xFB,
1070xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x02, 0x3F, 0xFB,
1080xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0xE7, 0xFE, 0x7F, 0xE6, 0x10, 0x00, 0x08, 0xFF, 0xFB,
1090xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x01, 0xE6, 0x06, 0x60, 0x6E, 0x10, 0x00, 0x11, 0xFF, 0xF7,
1100xE0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x03, 0xEE, 0x06, 0x60, 0x6C, 0x18, 0x00, 0x43, 0xC3, 0xE7,
1110xEF, 0xEF, 0x42, 0x3F, 0xBF, 0xC0, 0x03, 0x6E, 0x0E, 0xE0, 0xEC, 0x38, 0x00, 0x83, 0x03, 0xEF,
1120xE8, 0x21, 0xA1, 0x20, 0xBF, 0xC0, 0x06, 0xCC, 0x0C, 0xC0, 0xCC, 0x38, 0x03, 0x04, 0x07, 0x9F,
1130xEB, 0xA5, 0x53, 0xAE, 0xBF, 0xC0, 0x0C, 0xCC, 0x00, 0xC0, 0xDC, 0x38, 0x04, 0x00, 0x0F, 0x1F,
1140xEB, 0xA3, 0x44, 0xAE, 0xBF, 0x80, 0x18, 0xCC, 0x00, 0xC0, 0xDC, 0x38, 0x08, 0x00, 0x1F, 0xDF,
1150xEB, 0xA3, 0xBF, 0x2E, 0xBF, 0x80, 0x30, 0xDC, 0x01, 0xC1, 0xD8, 0x3C, 0x10, 0x00, 0x3F, 0xFF,
1160xE8, 0x25, 0x06, 0xA0, 0xBF, 0x80, 0x61, 0x98, 0xFD, 0xFF, 0xD8, 0x3C, 0x30, 0x00, 0xFF, 0xDF,
1170xEF, 0xEA, 0xAA, 0xBF, 0xBF, 0x80, 0xFF, 0x98, 0x19, 0xFF, 0x18, 0x3C, 0x60, 0x01, 0xC7, 0xDF,
1180xE0, 0x0C, 0xD8, 0x00, 0x3F, 0x01, 0xFF, 0x98, 0x19, 0x80, 0x38, 0x3C, 0xC0, 0x02, 0x07, 0xBF,
1190xED, 0xA4, 0xAC, 0x20, 0xBF, 0x03, 0x01, 0xB8, 0x19, 0x80, 0x30, 0x1E, 0xC0, 0x00, 0x0F, 0xBF,
1200xE8, 0xC2, 0x33, 0x5B, 0x3F, 0x06, 0x03, 0x38, 0x3B, 0x80, 0x30, 0x1D, 0x80, 0x00, 0x1F, 0x7F,
1210xEB, 0x7C, 0xF2, 0x1A, 0x3F, 0x0C, 0x03, 0x30, 0x33, 0x80, 0x30, 0x1F, 0x80, 0x00, 0x3E, 0xFF,
1220xE7, 0x08, 0x25, 0x74, 0xBF, 0x18, 0x03, 0x3F, 0xF3, 0x00, 0x7F, 0x9B, 0x80, 0x00, 0xFD, 0xFF,
1230xEC, 0xFE, 0x11, 0xB0, 0xBE, 0x30, 0x03, 0x1F, 0xE3, 0x00, 0x7F, 0x9F, 0x80, 0x03, 0xFB, 0xFF,
1240xE1, 0x0A, 0xFA, 0x3F, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x80, 0x0F, 0xE7, 0xFF,
1250xE5, 0x26, 0x73, 0xEA, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x7F, 0xCF, 0xFF,
1260xEE, 0x9A, 0x91, 0x1A, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xBF, 0xFF,
1270xEA, 0xA9, 0xC1, 0xC4, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFE, 0x7F, 0xFF,
1280xEC, 0x95, 0x33, 0x0B, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xF9, 0xFF, 0xFF,
1290xEC, 0x2A, 0xB9, 0x0C, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xE7, 0xFF, 0xFF,
1300xED, 0x03, 0x73, 0x26, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0x9F, 0xFF, 0xFF,
1310xEE, 0xF9, 0x54, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0x7F, 0xFF, 0xFF,
1320xE0, 0x0E, 0xF0, 0x8C, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF,
1330xEF, 0xE7, 0x55, 0xAC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1340xE8, 0x23, 0xCF, 0x89, 0xBF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF,
1350xEB, 0xAB, 0xD3, 0xFD, 0x38, 0x7F, 0xFF, 0xFF, 0xE7, 0xF8, 0x7F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF,
1360xEB, 0xA8, 0x68, 0x40, 0xBB, 0xEC, 0xE7, 0xCC, 0xFF, 0x7B, 0xEC, 0xEF, 0x39, 0xE9, 0xFF, 0xFF,
1370xEB, 0xA1, 0xD2, 0xDB, 0xB8, 0x8A, 0xD7, 0x2B, 0xE8, 0x78, 0x8A, 0x94, 0xA5, 0xA5, 0xFF, 0xFF,
1380xE8, 0x29, 0x10, 0x36, 0xB3, 0xB0, 0x87, 0x49, 0xE9, 0x73, 0xB0, 0x85, 0xAD, 0x2D, 0xFF, 0xFF,
1390xEF, 0xEE, 0x23, 0xA8, 0x37, 0xB3, 0xBE, 0x4C, 0xCB, 0x77, 0xB7, 0xBD, 0x2D, 0x6D, 0xFF, 0xFF,
1400xE0, 0x00, 0x00, 0x00, 0x37, 0xB8, 0x8F, 0x11, 0xDB, 0x77, 0x38, 0x8C, 0x23, 0x69, 0xFF, 0xFF,
1410xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1420xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
143};
144
145const uint8_t HeadsUpDisplay::FaceTemplate[] = {
1460xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1470xC0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x03,
1480xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFD,
1490xA3, 0x62, 0x3F, 0xFF, 0xCC, 0xC6, 0x54, 0x7F, 0xC4, 0x46, 0x44, 0x47, 0xD6, 0x45, 0x44, 0x7D,
1500xAE, 0xAE, 0xFF, 0xFE, 0x55, 0x6D, 0xD6, 0xFE, 0x5D, 0xDD, 0xEF, 0x5E, 0x55, 0xDC, 0x6D, 0xFD,
1510xA6, 0x2E, 0x7F, 0xFF, 0xCC, 0xED, 0x46, 0xFF, 0xCD, 0xCE, 0xEE, 0xCF, 0xD6, 0xCC, 0x6D, 0xFD,
1520xAE, 0xAE, 0xFF, 0xFE, 0x55, 0x6D, 0x56, 0xFE, 0x5D, 0xDF, 0x6D, 0xDE, 0x57, 0x5D, 0x6D, 0xFD,
1530xAE, 0xA2, 0x3F, 0xFF, 0xCD, 0x46, 0x56, 0xFF, 0xDC, 0x44, 0xC4, 0x47, 0xC4, 0xC5, 0x44, 0x7D,
1540xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFD,
1550xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1560xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFD,
1570xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1580xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFD,
1590xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1600xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFD,
1610xD5, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAB,
1620xD5, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAB,
1630xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFD,
1640xA2, 0x22, 0x22, 0x3F, 0xE4, 0xCC, 0x65, 0x46, 0x44, 0x44, 0x45, 0xCF, 0xD6, 0x44, 0xC4, 0x45,
1650xAE, 0xEE, 0xEF, 0x7E, 0x5D, 0x56, 0xDD, 0x6E, 0x5D, 0xDD, 0xD5, 0xD6, 0x55, 0xDD, 0x55, 0x55,
1660xA6, 0x66, 0x6F, 0x7F, 0xEC, 0xCE, 0xD4, 0x6F, 0xCD, 0xCD, 0xD5, 0xCF, 0xD6, 0xCC, 0xD5, 0x45,
1670xAE, 0xEE, 0xEF, 0x7E, 0x75, 0x56, 0xD5, 0x6E, 0x5D, 0xDD, 0xD5, 0xD6, 0x57, 0x5D, 0x55, 0x5D,
1680xA2, 0xEE, 0x23, 0x7F, 0xCC, 0xD4, 0x65, 0x6F, 0xDC, 0x44, 0x44, 0x57, 0xC4, 0xC4, 0xC4, 0x5D,
1690xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFD,
1700xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1710xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFD,
1720xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1730xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFD,
1740xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1750xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFD,
1760xC0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x03,
1770xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1780xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1790xC0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
1800xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1810xAA, 0xA2, 0x26, 0x23, 0xD4, 0x45, 0xD5, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1820xAA, 0xAE, 0xEA, 0xB6, 0x46, 0xDD, 0xD5, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1830xA2, 0xA6, 0x66, 0xB7, 0xC6, 0xDD, 0xD5, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1840xAA, 0xAE, 0xEA, 0xB6, 0x56, 0xDD, 0xD5, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1850xAA, 0x22, 0xEA, 0xB7, 0xD4, 0x44, 0x6C, 0x7E, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1860xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1870xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1880xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1890xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1900xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1910xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1920xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1930xD5, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1940xD5, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1950xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1960xAA, 0xA2, 0x76, 0x2B, 0xC6, 0xC6, 0x44, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1970xAA, 0xAE, 0xAA, 0xEA, 0x5D, 0x55, 0xD5, 0x7E, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1980xA2, 0xA6, 0x6A, 0xE7, 0xCC, 0x56, 0xC5, 0x7E, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
1990xAA, 0xAE, 0xA2, 0xEA, 0x5D, 0x57, 0x5D, 0x7E, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
2000xAA, 0x22, 0x6A, 0x2B, 0xDD, 0x54, 0xDC, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
2010xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
2020xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
2030xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
2040xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
2050xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
2060xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
2070xBF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
2080xC0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
2090xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
210};
211
213 this->faceMin = faceMin;
214 this->faceMax = faceMax;
215}
216
217void HeadsUpDisplay::SetFaceArray(const __FlashStringHelper** faceNames) {
218 this->faceNames = faceNames;
219 useExternalFace = true;
220}
221
223 this->faceMin = faceMin;
224}
225
227 this->faceMax = faceMax;
228}
229
232
233 Wire.setClock(100000);//for longer range transmissions
234 Wire.begin();
235
236 #ifdef WS35
237 Wire.setSDA(19);
238 Wire.setSCL(18);
239 #else
240 Wire.setSDA(18);
241 Wire.setSCL(19);
242 #endif
243
244 Wire.beginTransmission(0x3C);
245 uint8_t error = Wire.endTransmission();
246
247 if(error == 0){// SSD1306 Found
248 #ifdef SH1106
249 display.begin(SH1106_SWITCHCAPVCC, 0x3C);
250 didBegin = true;
251 #else
252 didBegin = display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
253 #endif
254
255 // Initialize the OLED display
256 if (!didBegin) {
257 // Handle initialization failure here
258 }
259
260 display.setFont(&Picopixel);
261
262 // Clear the buffer and display
263 display.clearDisplay();
264 display.invertDisplay(true);
265 display.display();
266 }
267 else {
268 didBegin = false;
269 }
270
271 startMillis = millis();
272
273}
274
276 Wire.end(); // Disable the I2C hardware
277 delay(10); // Wait for the I2C bus to settle
278 Wire.begin(); // Enable the I2C hardware
279}
280
282 if (timeStep.IsReady() && didBegin){
283 if (splashFinished){// Draw the bitmap to the display at the specified top-left coordinate
285 }
286 else if (startMillis + splashTime > millis()){
287 display.clearDisplay();
288 display.drawBitmap(0, 0, CoelaSplash, SCREEN_WIDTH, SCREEN_HEIGHT, 1);
289 }
290 else if (startMillis + (splashTime * 2L) > millis()){
291 display.clearDisplay();
293 }
294 else{
295 splashFinished = true;
296 }
297
298 unsigned long cmdTime = millis();
299
300 display.display();
301
302 if (millis() - cmdTime > 250) {
303 // Timeout occurred
304 ResetI2CBus();
305 }
306
308 }
309}
310
312 subEffect = effect;
313}
314
316 //Actually apply effect
317 subEffect->ApplyEffect(pixelGroup);
318
319 unsigned int pixelCount = pixelGroup->GetPixelCount();
320
321 for (unsigned int i = 0; i < pixelCount; i++){
322 Vector2D pixelLocation = pixelGroup->GetCoordinate(i);
323 RGBColor color = *pixelGroup->GetColor(i);
324
325 if(color.R > 0 || color.G > 0 || color.G > 0){
326 EnableBitFaceRender(pixelLocation.X, pixelLocation.Y);
327 }
328 }
329}
330
332 // Initialize the bitmap array to zero
333 memset(faceBitmap, 0, sizeof(faceBitmap));
334}
335
336void HeadsUpDisplay::EnableBitFaceRender(float xIn, float yIn) {
339
340 if (x >= 0 && x < 64 && y >= 0 && y < 32) {
341 int byteIndex = y * 8 + (x / 8);
342 int bitIndex = 7 - (x % 8);
343
344 faceBitmap[byteIndex] |= (1 << bitIndex);
345 }
346}
347
349 display.clearDisplay();
350
351 display.drawBitmap(0, 0, FaceTemplate, 128, 64, 1);
352
353 display.setTextColor(0); // Draw white text
354 display.setTextSize(1); // Normal 1:1 pixel scale
355
356 //ROW 1
359
360 CheckInvertPrintText(34, 13, 1, percentArray[Menu::GetBrightness()]);//Brightness
361 CheckInvertPrintText(66, 13, 7, percentArray[Menu::GetFaceSize()]);//Face Size
362 CheckInvertPrintText(98, 13, 3, onOffArray[Menu::UseMicrophone()]);//Use Microphone
363
364 //ROW 2
366 CheckInvertPrintText(34, 28, 2, percentArray[Menu::GetAccentBrightness()]);//Side Brightness
367 CheckInvertPrintText(66, 28, 8, colorArray[Menu::GetFaceColor()]);//Face Color
368 CheckInvertPrintText(98, 28, 5, onOffArray[Menu::UseBoopSensor()]);//Use Boop
369
370 //ROW 3
371 CheckInvertPrintText(3, 45, 9, hueArray[Menu::GetHueF()]);//Hue front
372 CheckInvertPrintText(34, 45, 4, percentArray[Menu::GetMicLevel()]);//Mic level
373
374 //ROW 4
375 CheckInvertPrintText(3, 60, 10, hueArray[Menu::GetHueB()]);//Hue back
376 CheckInvertPrintText(34, 60, 12, percentArray[Menu::GetFanSpeed()]);//Mirror spectrum analyzer
377
378 display.drawBitmap(66, 35, faceBitmap, 64, 32, 0);
379}
380
381
382void HeadsUpDisplay::CheckInvertPrintText(int16_t x, int16_t y, uint8_t menu, const String &str){
383 int16_t x1, y1;
384 uint16_t w, h;
385
386 if (Menu::GetCurrentMenu() == menu && millis() % 500 > 250){
387 display.getTextBounds(str, x, y, &x1, &y1, &w, &h);
388
389 //display.setCursor(x, y + h);
390 display.fillRect(x, y - h + 1, w, h, 0);
391
392 display.setTextColor(1);
393 }
394
395 display.setCursor(x, y);
396 display.println(str);
397
398 display.setTextColor(0);
399}
400
Declares the HeadsUpDisplay class for rendering and displaying information on SSD1306/SH1106 displays...
Abstract base class for applying visual effects to pixel groups.
Definition Effect.h:26
virtual void ApplyEffect(IPixelGroup *pixelGroup)=0
Pure virtual method for applying the effect to a pixel group.
void SetEffect(Effect *effect)
Sets the sub-effect to be applied to the display.
Definition SSD1306.cpp:311
static const uint8_t faceYMaxPosition
Maximum Y position for face rendering.
Definition SSD1306.h:47
static const uint16_t SCREEN_HEIGHT
Height of the OLED screen.
Definition SSD1306.h:42
static const uint8_t faceXMinPosition
Minimum X position for face rendering.
Definition SSD1306.h:44
void ApplyEffect(IPixelGroup *pixelGroup)
Applies the effect to the specified pixel group.
Definition SSD1306.cpp:315
void UpdateFaceInformation()
Updates face rendering information.
Definition SSD1306.cpp:348
const __FlashStringHelper * hueArray[10]
Hue options.
Definition SSD1306.h:55
bool useExternalFace
To decide if it uses faceArray or faceNames for the face.
Definition SSD1306.h:59
static uint8_t faceBitmap[bufferSize]
Background template for displaying the grids.
Definition SSD1306.h:74
static const uint8_t faceYMinPosition
Minimum Y position for face rendering.
Definition SSD1306.h:46
bool splashFinished
True when the splash startup screen is finished.
Definition SSD1306.h:64
const __FlashStringHelper * colorArray[10]
Definition SSD1306.h:53
const __FlashStringHelper * faceArray[10]
Face names.
Definition SSD1306.h:56
TimeStep timeStep
Limits the display to update 5 times per second.
Definition SSD1306.h:62
const __FlashStringHelper * effectArray[10]
Definition SSD1306.h:52
static const uint16_t SCREEN_WIDTH
Width of the OLED screen.
Definition SSD1306.h:41
void SetFaceMin(Vector2D faceMin)
Sets the minimum face rendering coordinates.
Definition SSD1306.cpp:222
void Initialize()
Initializes the display and related components.
Definition SSD1306.cpp:230
Effect * subEffect
Used to capture the complete rendered frame.
Definition SSD1306.h:61
static const uint8_t CoelaSplash[]
Definition SSD1306.h:11
static const uint8_t faceXMaxPosition
Maximum X position for face rendering.
Definition SSD1306.h:45
void EnableBitFaceRender(float xIn, float yIn)
Enables rendering for a bitmap face within specified coordinates.
Definition SSD1306.cpp:336
const __FlashStringHelper ** faceNames
Names of each face to be displayed on the screen.
Definition SSD1306.h:58
void SetFaceMax(Vector2D faceMax)
Sets the maximum face rendering coordinates.
Definition SSD1306.cpp:226
static Adafruit_SSD1306 display
Definition SSD1306.h:72
static const uint8_t FaceTemplate[]
Definition SSD1306.h:145
const __FlashStringHelper * onOffArray[2]
Online/Offline statuses.
Definition SSD1306.h:54
void CheckInvertPrintText(int16_t x, int16_t y, uint8_t menu, const String &str)
Prints text conditionally inverted based on menu selection.
Definition SSD1306.cpp:382
uint32_t startMillis
Start time of the display for the splash screen.
Definition SSD1306.h:67
Vector2D faceMax
Maximum coordinate for face on display.
Definition SSD1306.h:66
static const uint32_t splashTime
Duration for splash screen in milliseconds.
Definition SSD1306.h:48
void ResetDisplayBuffer()
Resets the display buffer to a blank state.
Definition SSD1306.cpp:331
void ResetI2CBus()
Resets the I2C bus in case of communication errors.
Definition SSD1306.cpp:275
const __FlashStringHelper * percentArray[10]
Battery percentages.
Definition SSD1306.h:51
static const uint8_t PrototracerSplash[]
Definition SSD1306.h:78
bool didBegin
True if the I2C interface started correctly.
Definition SSD1306.h:63
Vector2D faceMin
Minimum coordinate for face on display.
Definition SSD1306.h:65
void Update()
Updates the display content based on the current state.
Definition SSD1306.cpp:281
HeadsUpDisplay(Vector2D faceMin, Vector2D faceMax)
Constructs a HeadsUpDisplay with face rendering boundaries.
Definition SSD1306.cpp:212
void SetFaceArray(const __FlashStringHelper **faceNames)
Sets the array of face names.
Definition SSD1306.cpp:217
Interface for managing and interacting with a collection of pixels.
Definition IPixelGroup.h:25
virtual Vector2D GetCoordinate(uint16_t count)=0
Retrieves the coordinate of a specific pixel.
virtual RGBColor * GetColor(uint16_t count)=0
Retrieves the color of a specific pixel.
virtual uint16_t GetPixelCount()=0
Retrieves the total number of pixels in the group.
static T ConstrainMap(T value, T inLow, T inMax, T outMin, T outMax)
Combines Constrain and Map in one step: first maps value from [inLow, inMax] to [outMin,...
static uint8_t GetFaceState()
Retrieves the current face state. In hardware mode, it is read from the MenuHandler.
Definition Menu.cpp:381
static uint8_t GetEffectS()
Gets the currently selected effect index.
Definition Menu.cpp:480
static uint8_t GetFaceColor()
Gets the current face color index.
Definition Menu.cpp:453
static uint8_t GetMicLevel()
Gets the current microphone level.
Definition Menu.cpp:417
static uint8_t GetFanSpeed()
Gets the current fan speed index.
Definition Menu.cpp:489
static uint8_t GetFaceSize()
Gets the current face size.
Definition Menu.cpp:444
static uint8_t GetHueF()
Gets the front hue value.
Definition Menu.cpp:462
static uint8_t GetCurrentMenu()
Gets the currently selected menu index from the MenuHandler (if in hardware mode).
Definition Menu.cpp:196
static uint8_t UseMicrophone()
Checks if the microphone usage is toggled on or off.
Definition Menu.cpp:408
static uint8_t UseBoopSensor()
Checks if the boop sensor usage is toggled on or off.
Definition Menu.cpp:426
static uint8_t GetHueB()
Gets the back hue value.
Definition Menu.cpp:471
static uint8_t GetBrightness()
Gets the current brightness level. In hardware mode, it is read from the MenuHandler.
Definition Menu.cpp:390
static uint8_t GetAccentBrightness()
Gets the current accent brightness level.
Definition Menu.cpp:399
Represents an RGB color and provides methods for manipulation.
Definition RGBColor.h:23
uint8_t G
Green component of the color (0-255).
Definition RGBColor.h:26
uint8_t R
Red component of the color (0-255).
Definition RGBColor.h:25
bool IsReady()
Checks if the specified time interval has elapsed.
Definition TimeStep.cpp:11
Represents a 2D vector (X, Y) and provides methods for vector arithmetic.
Definition Vector2D.h:27
float X
The X-component of the 2D vector.
Definition Vector2D.h:29
float Y
The Y-component of the 2D vector.
Definition Vector2D.h:30