displaying on SSD1306, 128x64 pixels OLED

Dependencies:   microbit

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