displaying on SSD1306, 128x64 pixels OLED

Dependencies:   microbit

Committer:
bvirk
Date:
Mon Feb 24 18:31:22 2020 +0000
Revision:
8:5972683a7190
Parent:
6:c69f08f464b5
Child:
10:8bf77efd1579
class header doc copied to cpp files

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bvirk 3:f36427797fd7 1 #include "MicroBit.h"
bvirk 4:19da6ea94042 2 #include <vector>
bvirk 6:c69f08f464b5 3 #include "stdarg.h"
bvirk 4:19da6ea94042 4 #include "cppNorm.h"
bvirk 6:c69f08f464b5 5
bvirk 4:19da6ea94042 6 #ifndef microbitOLED_OLED
bvirk 4:19da6ea94042 7 #define microbitOLED_OLED
bvirk 3:f36427797fd7 8
bvirk 8:5972683a7190 9 #define SSD1306_CHARGEPUMP 0x8D
bvirk 8:5972683a7190 10 #define SSD1306_COMSCANDEC 0xC8
bvirk 8:5972683a7190 11 #define SSD1306_COMSCANINC 0xC0
bvirk 8:5972683a7190 12 #define SSD1306_DISPLAYALLON 0xA5
bvirk 8:5972683a7190 13 #define SSD1306_DISPLAYALLON_RESUME 0xA4
bvirk 8:5972683a7190 14 #define SSD1306_DISPLAYON 0xAF
bvirk 8:5972683a7190 15 #define SSD1306_DISPLAYOFF 0xAE
bvirk 8:5972683a7190 16 #define SSD1306_MEMORYMODE 0x20
bvirk 8:5972683a7190 17 #define SSD1306_NORMALDISPLAY 0xA6
bvirk 8:5972683a7190 18 #define SSD1306_INVERTDISPLAY 0xA7
bvirk 8:5972683a7190 19 #define SSD1306_SEGREMAP 0xA0
bvirk 8:5972683a7190 20 #define SSD1306_SETCONTRAST 0x81
bvirk 8:5972683a7190 21 #define SSD1306_SETCOLUMNADRESS 0x21
bvirk 8:5972683a7190 22 #define SSD1306_SETVCOMDETECT 0xDB
bvirk 8:5972683a7190 23 #define SSD1306_SETCOMPINS 0xDA
bvirk 8:5972683a7190 24 #define SSD1306_SETDISPLAYOFFSET 0xD3
bvirk 8:5972683a7190 25 #define SSD1306_SETHIGHCOLUMN 0x10
bvirk 8:5972683a7190 26 #define SSD1306_SETLOWCOLUMN 0x00
bvirk 8:5972683a7190 27 #define SSD1306_SETPAGEADRESS 0x22
bvirk 8:5972683a7190 28 #define SSD1306_SETDISPLAYCLOCKDIV 0xD5
bvirk 8:5972683a7190 29 #define SSD1306_SETMULTIPLEX 0xA8
bvirk 8:5972683a7190 30 #define SSD1306_SETPRECHARGE 0xD9
bvirk 8:5972683a7190 31 #define SSD1306_SETSTARTLINE 0x40
bvirk 6:c69f08f464b5 32
bvirk 4:19da6ea94042 33 /**
bvirk 4:19da6ea94042 34 * Access to bit 0-7, named by0 or x, and bit 8-15, named by1 or y
bvirk 4:19da6ea94042 35 * of 16 bit named that16. Can be consructed with either two uint8_t or
bvirk 4:19da6ea94042 36 * a uint16_t
bvirk 4:19da6ea94042 37 */
bvirk 4:19da6ea94042 38 union uint16 {
bvirk 4:19da6ea94042 39 struct {
bvirk 4:19da6ea94042 40 uint8_t by0;
bvirk 4:19da6ea94042 41 uint8_t by1;
bvirk 4:19da6ea94042 42 };
bvirk 4:19da6ea94042 43 struct {
bvirk 4:19da6ea94042 44 uint8_t x;
bvirk 4:19da6ea94042 45 uint8_t y;
bvirk 4:19da6ea94042 46 };
bvirk 4:19da6ea94042 47 uint16_t that16;
bvirk 4:19da6ea94042 48 uint16(uint16_t all) : that16(all) {}
bvirk 4:19da6ea94042 49 uint16(uint8_t byte1,uint8_t byte0) : by1(byte1),by0(byte0) {}
bvirk 4:19da6ea94042 50 };
bvirk 4:19da6ea94042 51
bvirk 8:5972683a7190 52 const unsigned char font[][5] = {
bvirk 8:5972683a7190 53 {0x00,0x00,0x00,0x00,0x00},
bvirk 8:5972683a7190 54 {0x3E,0x5B,0x4F,0x5B,0x3E},
bvirk 8:5972683a7190 55 {0x3E,0x6B,0x4F,0x6B,0x3E},
bvirk 8:5972683a7190 56 {0x1C,0x3E,0x7C,0x3E,0x1C},
bvirk 8:5972683a7190 57 {0x18,0x3C,0x7E,0x3C,0x18},
bvirk 8:5972683a7190 58 {0x1C,0x57,0x7D,0x57,0x1C},
bvirk 8:5972683a7190 59 {0x1C,0x5E,0x7F,0x5E,0x1C},
bvirk 8:5972683a7190 60 {0x00,0x18,0x3C,0x18,0x00},
bvirk 8:5972683a7190 61 {0xFF,0xE7,0xC3,0xE7,0xFF},
bvirk 8:5972683a7190 62 {0x00,0x18,0x24,0x18,0x00},
bvirk 8:5972683a7190 63 {0xFF,0xE7,0xDB,0xE7,0xFF},
bvirk 8:5972683a7190 64 {0x30,0x48,0x3A,0x06,0x0E},
bvirk 8:5972683a7190 65 {0x26,0x29,0x79,0x29,0x26},
bvirk 8:5972683a7190 66 {0x40,0x7F,0x05,0x05,0x07},
bvirk 8:5972683a7190 67 {0x40,0x7F,0x05,0x25,0x3F},
bvirk 8:5972683a7190 68 {0x5A,0x3C,0xE7,0x3C,0x5A},
bvirk 8:5972683a7190 69 {0x7F,0x3E,0x1C,0x1C,0x08},
bvirk 8:5972683a7190 70 {0x08,0x1C,0x1C,0x3E,0x7F},
bvirk 8:5972683a7190 71 {0x14,0x22,0x7F,0x22,0x14},
bvirk 8:5972683a7190 72 {0x5F,0x5F,0x00,0x5F,0x5F},
bvirk 8:5972683a7190 73 {0x06,0x09,0x7F,0x01,0x7F},
bvirk 8:5972683a7190 74 {0x00,0x66,0x89,0x95,0x6A},
bvirk 8:5972683a7190 75 {0x60,0x60,0x60,0x60,0x60},
bvirk 8:5972683a7190 76 {0x94,0xA2,0xFF,0xA2,0x94},
bvirk 8:5972683a7190 77 {0x08,0x04,0x7E,0x04,0x08},
bvirk 8:5972683a7190 78 {0x10,0x20,0x7E,0x20,0x10},
bvirk 8:5972683a7190 79 {0x08,0x08,0x2A,0x1C,0x08},
bvirk 8:5972683a7190 80 {0x08,0x1C,0x2A,0x08,0x08},
bvirk 8:5972683a7190 81 {0x1E,0x10,0x10,0x10,0x10},
bvirk 8:5972683a7190 82 {0x0C,0x1E,0x0C,0x1E,0x0C},
bvirk 8:5972683a7190 83 {0x30,0x38,0x3E,0x38,0x30},
bvirk 8:5972683a7190 84 {0x06,0x0E,0x3E,0x0E,0x06},
bvirk 8:5972683a7190 85 {0x00,0x00,0x00,0x00,0x00},
bvirk 8:5972683a7190 86 {0x00,0x00,0x5F,0x00,0x00},
bvirk 8:5972683a7190 87 {0x00,0x07,0x00,0x07,0x00},
bvirk 8:5972683a7190 88 {0x14,0x7F,0x14,0x7F,0x14},
bvirk 8:5972683a7190 89 {0x24,0x2A,0x7F,0x2A,0x12},
bvirk 8:5972683a7190 90 {0x23,0x13,0x08,0x64,0x62},
bvirk 8:5972683a7190 91 {0x36,0x49,0x56,0x20,0x50},
bvirk 8:5972683a7190 92 {0x00,0x08,0x07,0x03,0x00},
bvirk 8:5972683a7190 93 {0x00,0x1C,0x22,0x41,0x00},
bvirk 8:5972683a7190 94 {0x00,0x41,0x22,0x1C,0x00},
bvirk 8:5972683a7190 95 {0x2A,0x1C,0x7F,0x1C,0x2A},
bvirk 8:5972683a7190 96 {0x08,0x08,0x3E,0x08,0x08},
bvirk 8:5972683a7190 97 {0x00,0x80,0x70,0x30,0x00},
bvirk 8:5972683a7190 98 {0x08,0x08,0x08,0x08,0x08},
bvirk 8:5972683a7190 99 {0x00,0x00,0x60,0x60,0x00},
bvirk 8:5972683a7190 100 {0x20,0x10,0x08,0x04,0x02},
bvirk 8:5972683a7190 101 {0x3E,0x51,0x49,0x45,0x3E},
bvirk 8:5972683a7190 102 {0x00,0x42,0x7F,0x40,0x00},
bvirk 8:5972683a7190 103 {0x72,0x49,0x49,0x49,0x46},
bvirk 8:5972683a7190 104 {0x21,0x41,0x49,0x4D,0x33},
bvirk 8:5972683a7190 105 {0x18,0x14,0x12,0x7F,0x10},
bvirk 8:5972683a7190 106 {0x27,0x45,0x45,0x45,0x39},
bvirk 8:5972683a7190 107 {0x3C,0x4A,0x49,0x49,0x31},
bvirk 8:5972683a7190 108 {0x41,0x21,0x11,0x09,0x07},
bvirk 8:5972683a7190 109 {0x36,0x49,0x49,0x49,0x36},
bvirk 8:5972683a7190 110 {0x46,0x49,0x49,0x29,0x1E},
bvirk 8:5972683a7190 111 {0x00,0x00,0x14,0x00,0x00},
bvirk 8:5972683a7190 112 {0x00,0x40,0x34,0x00,0x00},
bvirk 8:5972683a7190 113 {0x00,0x08,0x14,0x22,0x41},
bvirk 8:5972683a7190 114 {0x14,0x14,0x14,0x14,0x14},
bvirk 8:5972683a7190 115 {0x00,0x41,0x22,0x14,0x08},
bvirk 8:5972683a7190 116 {0x02,0x01,0x59,0x09,0x06},
bvirk 8:5972683a7190 117 {0x3E,0x41,0x5D,0x59,0x4E},
bvirk 8:5972683a7190 118 {0x7C,0x12,0x11,0x12,0x7C},
bvirk 8:5972683a7190 119 {0x7F,0x49,0x49,0x49,0x36},
bvirk 8:5972683a7190 120 {0x3E,0x41,0x41,0x41,0x22},
bvirk 8:5972683a7190 121 {0x7F,0x41,0x41,0x41,0x3E},
bvirk 8:5972683a7190 122 {0x7F,0x49,0x49,0x49,0x41},
bvirk 8:5972683a7190 123 {0x7F,0x09,0x09,0x09,0x01},
bvirk 8:5972683a7190 124 {0x3E,0x41,0x41,0x51,0x73},
bvirk 8:5972683a7190 125 {0x7F,0x08,0x08,0x08,0x7F},
bvirk 8:5972683a7190 126 {0x00,0x41,0x7F,0x41,0x00},
bvirk 8:5972683a7190 127 {0x20,0x40,0x41,0x3F,0x01},
bvirk 8:5972683a7190 128 {0x7F,0x08,0x14,0x22,0x41},
bvirk 8:5972683a7190 129 {0x7F,0x40,0x40,0x40,0x40},
bvirk 8:5972683a7190 130 {0x7F,0x02,0x1C,0x02,0x7F},
bvirk 8:5972683a7190 131 {0x7F,0x04,0x08,0x10,0x7F},
bvirk 8:5972683a7190 132 {0x3E,0x41,0x41,0x41,0x3E},
bvirk 8:5972683a7190 133 {0x7F,0x09,0x09,0x09,0x06},
bvirk 8:5972683a7190 134 {0x3E,0x41,0x51,0x21,0x5E},
bvirk 8:5972683a7190 135 {0x7F,0x09,0x19,0x29,0x46},
bvirk 8:5972683a7190 136 {0x26,0x49,0x49,0x49,0x32},
bvirk 8:5972683a7190 137 {0x03,0x01,0x7F,0x01,0x03},
bvirk 8:5972683a7190 138 {0x3F,0x40,0x40,0x40,0x3F},
bvirk 8:5972683a7190 139 {0x1F,0x20,0x40,0x20,0x1F},
bvirk 8:5972683a7190 140 {0x3F,0x40,0x38,0x40,0x3F},
bvirk 8:5972683a7190 141 {0x63,0x14,0x08,0x14,0x63},
bvirk 8:5972683a7190 142 {0x03,0x04,0x78,0x04,0x03},
bvirk 8:5972683a7190 143 {0x61,0x59,0x49,0x4D,0x43},
bvirk 8:5972683a7190 144 {0x00,0x7F,0x41,0x41,0x41},
bvirk 8:5972683a7190 145 {0x02,0x04,0x08,0x10,0x20},
bvirk 8:5972683a7190 146 {0x00,0x41,0x41,0x41,0x7F},
bvirk 8:5972683a7190 147 {0x04,0x02,0x01,0x02,0x04},
bvirk 8:5972683a7190 148 {0x40,0x40,0x40,0x40,0x40},
bvirk 8:5972683a7190 149 {0x00,0x03,0x07,0x08,0x00},
bvirk 8:5972683a7190 150 {0x20,0x54,0x54,0x78,0x40},
bvirk 8:5972683a7190 151 {0x7F,0x28,0x44,0x44,0x38},
bvirk 8:5972683a7190 152 {0x38,0x44,0x44,0x44,0x28},
bvirk 8:5972683a7190 153 {0x38,0x44,0x44,0x28,0x7F},
bvirk 8:5972683a7190 154 {0x38,0x54,0x54,0x54,0x18},
bvirk 8:5972683a7190 155 {0x00,0x08,0x7E,0x09,0x02},
bvirk 8:5972683a7190 156 {0x18,0xA4,0xA4,0x9C,0x78},
bvirk 8:5972683a7190 157 {0x7F,0x08,0x04,0x04,0x78},
bvirk 8:5972683a7190 158 {0x00,0x44,0x7D,0x40,0x00},
bvirk 8:5972683a7190 159 {0x20,0x40,0x40,0x3D,0x00},
bvirk 8:5972683a7190 160 {0x7F,0x10,0x28,0x44,0x00},
bvirk 8:5972683a7190 161 {0x00,0x41,0x7F,0x40,0x00},
bvirk 8:5972683a7190 162 {0x7C,0x04,0x78,0x04,0x78},
bvirk 8:5972683a7190 163 {0x7C,0x08,0x04,0x04,0x78},
bvirk 8:5972683a7190 164 {0x38,0x44,0x44,0x44,0x38},
bvirk 8:5972683a7190 165 {0xFC,0x18,0x24,0x24,0x18},
bvirk 8:5972683a7190 166 {0x18,0x24,0x24,0x18,0xFC},
bvirk 8:5972683a7190 167 {0x7C,0x08,0x04,0x04,0x08},
bvirk 8:5972683a7190 168 {0x48,0x54,0x54,0x54,0x24},
bvirk 8:5972683a7190 169 {0x04,0x04,0x3F,0x44,0x24},
bvirk 8:5972683a7190 170 {0x3C,0x40,0x40,0x20,0x7C},
bvirk 8:5972683a7190 171 {0x1C,0x20,0x40,0x20,0x1C},
bvirk 8:5972683a7190 172 {0x3C,0x40,0x30,0x40,0x3C},
bvirk 8:5972683a7190 173 {0x44,0x28,0x10,0x28,0x44},
bvirk 8:5972683a7190 174 {0x4C,0x90,0x90,0x90,0x7C},
bvirk 8:5972683a7190 175 {0x44,0x64,0x54,0x4C,0x44},
bvirk 8:5972683a7190 176 {0x00,0x08,0x36,0x41,0x00},
bvirk 8:5972683a7190 177 {0x00,0x00,0x77,0x00,0x00},
bvirk 8:5972683a7190 178 {0x00,0x41,0x36,0x08,0x00},
bvirk 8:5972683a7190 179 {0x02,0x01,0x02,0x04,0x02},
bvirk 8:5972683a7190 180 {0x3C,0x26,0x23,0x26,0x3C},
bvirk 8:5972683a7190 181 {0x1E,0xA1,0xA1,0x61,0x12},
bvirk 8:5972683a7190 182 {0x3A,0x40,0x40,0x20,0x7A},
bvirk 8:5972683a7190 183 {0x38,0x54,0x54,0x55,0x59},
bvirk 8:5972683a7190 184 {0x21,0x55,0x55,0x79,0x41},
bvirk 8:5972683a7190 185 {0x21,0x54,0x54,0x78,0x41},
bvirk 8:5972683a7190 186 {0x21,0x55,0x54,0x78,0x40},
bvirk 8:5972683a7190 187 {0x20,0x54,0x55,0x79,0x40},
bvirk 8:5972683a7190 188 {0x0C,0x1E,0x52,0x72,0x12},
bvirk 8:5972683a7190 189 {0x39,0x55,0x55,0x55,0x59},
bvirk 8:5972683a7190 190 {0x39,0x54,0x54,0x54,0x59},
bvirk 8:5972683a7190 191 {0x39,0x55,0x54,0x54,0x58},
bvirk 8:5972683a7190 192 {0x00,0x00,0x45,0x7C,0x41},
bvirk 8:5972683a7190 193 {0x00,0x02,0x45,0x7D,0x42},
bvirk 8:5972683a7190 194 {0x00,0x01,0x45,0x7C,0x40},
bvirk 8:5972683a7190 195 {0xF0,0x29,0x24,0x29,0xF0},
bvirk 8:5972683a7190 196 {0xF0,0x28,0x25,0x28,0xF0},
bvirk 8:5972683a7190 197 {0x7C,0x54,0x55,0x45,0x00},
bvirk 8:5972683a7190 198 {0x20,0x54,0x54,0x7C,0x54},
bvirk 8:5972683a7190 199 {0x7C,0x0A,0x09,0x7F,0x49},
bvirk 8:5972683a7190 200 {0x32,0x49,0x49,0x49,0x32},
bvirk 8:5972683a7190 201 {0x32,0x48,0x48,0x48,0x32},
bvirk 8:5972683a7190 202 {0x32,0x4A,0x48,0x48,0x30},
bvirk 8:5972683a7190 203 {0x3A,0x41,0x41,0x21,0x7A},
bvirk 8:5972683a7190 204 {0x3A,0x42,0x40,0x20,0x78},
bvirk 8:5972683a7190 205 {0x00,0x9D,0xA0,0xA0,0x7D},
bvirk 8:5972683a7190 206 {0x39,0x44,0x44,0x44,0x39},
bvirk 8:5972683a7190 207 {0x3D,0x40,0x40,0x40,0x3D},
bvirk 8:5972683a7190 208 {0x3C,0x24,0xFF,0x24,0x24},
bvirk 8:5972683a7190 209 {0x48,0x7E,0x49,0x43,0x66},
bvirk 8:5972683a7190 210 {0x2B,0x2F,0xFC,0x2F,0x2B},
bvirk 8:5972683a7190 211 {0xFF,0x09,0x29,0xF6,0x20},
bvirk 8:5972683a7190 212 {0xC0,0x88,0x7E,0x09,0x03},
bvirk 8:5972683a7190 213 {0x20,0x54,0x54,0x79,0x41},
bvirk 8:5972683a7190 214 {0x00,0x00,0x44,0x7D,0x41},
bvirk 8:5972683a7190 215 {0x30,0x48,0x48,0x4A,0x32},
bvirk 8:5972683a7190 216 {0x38,0x40,0x40,0x22,0x7A},
bvirk 8:5972683a7190 217 {0x00,0x7A,0x0A,0x0A,0x72},
bvirk 8:5972683a7190 218 {0x7D,0x0D,0x19,0x31,0x7D},
bvirk 8:5972683a7190 219 {0x26,0x29,0x29,0x2F,0x28},
bvirk 8:5972683a7190 220 {0x26,0x29,0x29,0x29,0x26},
bvirk 8:5972683a7190 221 {0x30,0x48,0x4D,0x40,0x20},
bvirk 8:5972683a7190 222 {0x38,0x08,0x08,0x08,0x08},
bvirk 8:5972683a7190 223 {0x08,0x08,0x08,0x08,0x38},
bvirk 8:5972683a7190 224 {0x2F,0x10,0xC8,0xAC,0xBA},
bvirk 8:5972683a7190 225 {0x2F,0x10,0x28,0x34,0xFA},
bvirk 8:5972683a7190 226 {0x00,0x00,0x7B,0x00,0x00},
bvirk 8:5972683a7190 227 {0x08,0x14,0x2A,0x14,0x22},
bvirk 8:5972683a7190 228 {0x22,0x14,0x2A,0x14,0x08},
bvirk 8:5972683a7190 229 {0xAA,0x00,0x55,0x00,0xAA},
bvirk 8:5972683a7190 230 {0xAA,0x55,0xAA,0x55,0xAA},
bvirk 8:5972683a7190 231 {0x00,0x00,0x00,0xFF,0x00},
bvirk 8:5972683a7190 232 {0x10,0x10,0x10,0xFF,0x00},
bvirk 8:5972683a7190 233 {0x14,0x14,0x14,0xFF,0x00},
bvirk 8:5972683a7190 234 {0x10,0x10,0xFF,0x00,0xFF},
bvirk 8:5972683a7190 235 {0x10,0x10,0xF0,0x10,0xF0},
bvirk 8:5972683a7190 236 {0x14,0x14,0x14,0xFC,0x00},
bvirk 8:5972683a7190 237 {0x14,0x14,0xF7,0x00,0xFF},
bvirk 8:5972683a7190 238 {0x00,0x00,0xFF,0x00,0xFF},
bvirk 8:5972683a7190 239 {0x14,0x14,0xF4,0x04,0xFC},
bvirk 8:5972683a7190 240 {0x14,0x14,0x17,0x10,0x1F},
bvirk 8:5972683a7190 241 {0x10,0x10,0x1F,0x10,0x1F},
bvirk 8:5972683a7190 242 {0x14,0x14,0x14,0x1F,0x00},
bvirk 8:5972683a7190 243 {0x10,0x10,0x10,0xF0,0x00},
bvirk 8:5972683a7190 244 {0x00,0x00,0x00,0x1F,0x10},
bvirk 8:5972683a7190 245 {0x10,0x10,0x10,0x1F,0x10},
bvirk 8:5972683a7190 246 {0x10,0x10,0x10,0xF0,0x10},
bvirk 8:5972683a7190 247 {0x00,0x00,0x00,0xFF,0x10},
bvirk 8:5972683a7190 248 {0x10,0x10,0x10,0x10,0x10},
bvirk 8:5972683a7190 249 {0x10,0x10,0x10,0xFF,0x10},
bvirk 8:5972683a7190 250 {0x00,0x00,0x00,0xFF,0x14},
bvirk 8:5972683a7190 251 {0x00,0x00,0xFF,0x00,0xFF},
bvirk 8:5972683a7190 252 {0x00,0x00,0x1F,0x10,0x17},
bvirk 8:5972683a7190 253 {0x00,0x00,0xFC,0x04,0xF4},
bvirk 8:5972683a7190 254 {0x14,0x14,0x17,0x10,0x17},
bvirk 8:5972683a7190 255 {0x14,0x14,0xF4,0x04,0xF4},
bvirk 8:5972683a7190 256 {0x00,0x00,0xFF,0x00,0xF7},
bvirk 8:5972683a7190 257 {0x14,0x14,0x14,0x14,0x14},
bvirk 8:5972683a7190 258 {0x14,0x14,0xF7,0x00,0xF7},
bvirk 8:5972683a7190 259 {0x14,0x14,0x14,0x17,0x14},
bvirk 8:5972683a7190 260 {0x10,0x10,0x1F,0x10,0x1F},
bvirk 8:5972683a7190 261 {0x14,0x14,0x14,0xF4,0x14},
bvirk 8:5972683a7190 262 {0x10,0x10,0xF0,0x10,0xF0},
bvirk 8:5972683a7190 263 {0x00,0x00,0x1F,0x10,0x1F},
bvirk 8:5972683a7190 264 {0x00,0x00,0x00,0x1F,0x14},
bvirk 8:5972683a7190 265 {0x00,0x00,0x00,0xFC,0x14},
bvirk 8:5972683a7190 266 {0x00,0x00,0xF0,0x10,0xF0},
bvirk 8:5972683a7190 267 {0x10,0x10,0xFF,0x10,0xFF},
bvirk 8:5972683a7190 268 {0x14,0x14,0x14,0xFF,0x14},
bvirk 8:5972683a7190 269 {0x10,0x10,0x10,0x1F,0x00},
bvirk 8:5972683a7190 270 {0x00,0x00,0x00,0xF0,0x10},
bvirk 8:5972683a7190 271 {0xFF,0xFF,0xFF,0xFF,0xFF},
bvirk 8:5972683a7190 272 {0xF0,0xF0,0xF0,0xF0,0xF0},
bvirk 8:5972683a7190 273 {0xFF,0xFF,0xFF,0x00,0x00},
bvirk 8:5972683a7190 274 {0x00,0x00,0x00,0xFF,0xFF},
bvirk 8:5972683a7190 275 {0x0F,0x0F,0x0F,0x0F,0x0F},
bvirk 8:5972683a7190 276 {0x38,0x44,0x44,0x38,0x44},
bvirk 8:5972683a7190 277 {0x7C,0x2A,0x2A,0x3E,0x14},
bvirk 8:5972683a7190 278 {0x7E,0x02,0x02,0x06,0x06},
bvirk 8:5972683a7190 279 {0x02,0x7E,0x02,0x7E,0x02},
bvirk 8:5972683a7190 280 {0x63,0x55,0x49,0x41,0x63},
bvirk 8:5972683a7190 281 {0x38,0x44,0x44,0x3C,0x04},
bvirk 8:5972683a7190 282 {0x40,0x7E,0x20,0x1E,0x20},
bvirk 8:5972683a7190 283 {0x06,0x02,0x7E,0x02,0x02},
bvirk 8:5972683a7190 284 {0x99,0xA5,0xE7,0xA5,0x99},
bvirk 8:5972683a7190 285 {0x1C,0x2A,0x49,0x2A,0x1C},
bvirk 8:5972683a7190 286 {0x4C,0x72,0x01,0x72,0x4C},
bvirk 8:5972683a7190 287 {0x30,0x4A,0x4D,0x4D,0x30},
bvirk 8:5972683a7190 288 {0x30,0x48,0x78,0x48,0x30},
bvirk 8:5972683a7190 289 {0xBC,0x62,0x5A,0x46,0x3D},
bvirk 8:5972683a7190 290 {0x3E,0x49,0x49,0x49,0x00},
bvirk 8:5972683a7190 291 {0x7E,0x01,0x01,0x01,0x7E},
bvirk 8:5972683a7190 292 {0x2A,0x2A,0x2A,0x2A,0x2A},
bvirk 8:5972683a7190 293 {0x44,0x44,0x5F,0x44,0x44},
bvirk 8:5972683a7190 294 {0x40,0x51,0x4A,0x44,0x40},
bvirk 8:5972683a7190 295 {0x40,0x44,0x4A,0x51,0x40},
bvirk 8:5972683a7190 296 {0x00,0x00,0xFF,0x01,0x03},
bvirk 8:5972683a7190 297 {0xE0,0x80,0xFF,0x00,0x00},
bvirk 8:5972683a7190 298 {0x08,0x08,0x6B,0x6B,0x08},
bvirk 8:5972683a7190 299 {0x36,0x12,0x36,0x24,0x36},
bvirk 8:5972683a7190 300 {0x06,0x0F,0x09,0x0F,0x06},
bvirk 8:5972683a7190 301 {0x00,0x00,0x18,0x18,0x00},
bvirk 8:5972683a7190 302 {0x00,0x00,0x10,0x10,0x00},
bvirk 8:5972683a7190 303 {0x30,0x40,0xFF,0x01,0x01},
bvirk 8:5972683a7190 304 {0x00,0x1F,0x01,0x01,0x1E},
bvirk 8:5972683a7190 305 {0x00,0x19,0x1D,0x17,0x12},
bvirk 8:5972683a7190 306 {0x00,0x3C,0x3C,0x3C,0x3C},
bvirk 8:5972683a7190 307 {0x00,0x00,0x00,0x00,0x00}};
bvirk 8:5972683a7190 308
bvirk 4:19da6ea94042 309 /**
bvirk 4:19da6ea94042 310 * Representation of a 128x64 pixels, SSD1306 compatibel OLED display
bvirk 4:19da6ea94042 311 */
bvirk 3:f36427797fd7 312 class OLED {
bvirk 8:5972683a7190 313
bvirk 3:f36427797fd7 314 static const uint8_t chipAdress = 0x78;
bvirk 3:f36427797fd7 315 static const uint8_t xOffset = 0;
bvirk 3:f36427797fd7 316 static const uint8_t yOffset = 0;
bvirk 3:f36427797fd7 317
bvirk 8:5972683a7190 318 const uint8_t printf_textSize=0x3f;
bvirk 8:5972683a7190 319 char printf_text[0x40];
bvirk 8:5972683a7190 320
bvirk 4:19da6ea94042 321 unsigned char textArea[22][9];
bvirk 3:f36427797fd7 322 uint8_t charX;
bvirk 3:f36427797fd7 323 uint8_t charY;
bvirk 3:f36427797fd7 324 uint8_t displayWidth;
bvirk 3:f36427797fd7 325 uint8_t displayHeight;
bvirk 3:f36427797fd7 326 uint16_t screenSize;
bvirk 3:f36427797fd7 327 bool loadStarted;
bvirk 3:f36427797fd7 328 float loadPercent;
bvirk 4:19da6ea94042 329 bool pendingNewline;
bvirk 3:f36427797fd7 330
bvirk 3:f36427797fd7 331 MicroBitI2C i2c;
bvirk 3:f36427797fd7 332
bvirk 4:19da6ea94042 333 void init(uint8_t width, uint8_t height);
bvirk 3:f36427797fd7 334 void command(uint8_t cmd);
bvirk 4:19da6ea94042 335 void setTextArea(uint8_t chr, bool setLine8);
bvirk 4:19da6ea94042 336
bvirk 4:19da6ea94042 337
bvirk 4:19da6ea94042 338 public:
bvirk 4:19da6ea94042 339
bvirk 4:19da6ea94042 340 /**
bvirk 4:19da6ea94042 341 * ssd1306 compatible device of 128x64 pixels OLED display.
bvirk 4:19da6ea94042 342 * Init() must be called after construction.
bvirk 8:5972683a7190 343 * Works for some untraced circumstances not in fibers
bvirk 4:19da6ea94042 344 */
bvirk 4:19da6ea94042 345 OLED();
bvirk 4:19da6ea94042 346
bvirk 4:19da6ea94042 347 /**
bvirk 4:19da6ea94042 348 * Initialisere display and clears it. A buffer representing charaters are
bvirk 4:19da6ea94042 349 * filled with space characters
bvirk 4:19da6ea94042 350 */
bvirk 4:19da6ea94042 351 void init();
bvirk 4:19da6ea94042 352
bvirk 4:19da6ea94042 353 /**
bvirk 4:19da6ea94042 354 * clears the display
bvirk 4:19da6ea94042 355 */
bvirk 3:f36427797fd7 356 void clear();
bvirk 4:19da6ea94042 357
bvirk 4:19da6ea94042 358 /**
bvirk 4:19da6ea94042 359 * Makes a newline by incrementing charY and assigning xOffset to charX
bvirk 4:19da6ea94042 360 * if charY becomes 8 the display screen is scrolled one line and charY
bvirk 4:19da6ea94042 361 * is decremented to 7. pendingNewline=false is done at last.
bvirk 4:19da6ea94042 362 */
bvirk 3:f36427797fd7 363 void newLine();
bvirk 4:19da6ea94042 364
bvirk 4:19da6ea94042 365 /**
bvirk 4:19da6ea94042 366 * Put a char on display. A value in range [0x00,0xFF] i permitted -
bvirk 4:19da6ea94042 367 * 0,0xff and 0x20 are bitpatterns with all null pixels (like space)
bvirk 4:19da6ea94042 368 *
bvirk 4:19da6ea94042 369 * @param x horizontal pixelwise position, range [0,displayWidth - 6]
bvirk 4:19da6ea94042 370 * @param y vertical position, range [0,7]
bvirk 4:19da6ea94042 371 */
bvirk 3:f36427797fd7 372 void drawChar(uint8_t x, uint8_t y, uint8_t chr );
bvirk 4:19da6ea94042 373
bvirk 4:19da6ea94042 374 /**
bvirk 6:c69f08f464b5 375 * Writes a string at charX, charY position. Afterwards are
bvirk 4:19da6ea94042 376 * charX, charY set to the new starting point for writting
bvirk 6:c69f08f464b5 377 * \n and \r is processed - \n includes \r functionality
bvirk 4:19da6ea94042 378 *
bvirk 4:19da6ea94042 379 * @param str to be displayed at (charX, charY).
bvirk 4:19da6ea94042 380 */
bvirk 6:c69f08f464b5 381 void puts(string str);
bvirk 4:19da6ea94042 382
bvirk 4:19da6ea94042 383 /**
bvirk 6:c69f08f464b5 384 * printf - the old clasic but don't use \n or \r in format string
bvirk 6:c69f08f464b5 385 * \n and \r is processed - \n includes \r functionality
bvirk 8:5972683a7190 386 * This function is the main reason to that OLED not works in fibers.
bvirk 4:19da6ea94042 387 */
bvirk 6:c69f08f464b5 388 uint8_t printf(const char * frmt, ...);
bvirk 4:19da6ea94042 389
bvirk 4:19da6ea94042 390 /**
bvirk 4:19da6ea94042 391 * Scroll display one line up. An empty line will arise at bottom.
bvirk 4:19da6ea94042 392 */
bvirk 4:19da6ea94042 393 void scroll();
bvirk 4:19da6ea94042 394
bvirk 3:f36427797fd7 395 };
bvirk 4:19da6ea94042 396 #endif
bvirk 4:19da6ea94042 397