displaying on SSD1306, 128x64 pixels OLED
OLED.h@12:b4d5e007640e, 2020-02-25 (annotated)
- 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?
User | Revision | Line number | New 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 |