displaying on SSD1306, 128x64 pixels OLED

Dependencies:   microbit

Committer:
bvirk
Date:
Thu Feb 13 02:51:37 2020 +0000
Revision:
2:2a1c370a638f
Parent:
1:ad7869e467a8
Child:
3:f36427797fd7
after fixing screensize and lefshift chipadress with one it works.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bvirk 0:950ea6fc2190 1
bvirk 0:950ea6fc2190 2 #include "MicroBit.h"
bvirk 1:ad7869e467a8 3 #include "MicroBitI2C.h"
bvirk 1:ad7869e467a8 4
bvirk 2:2a1c370a638f 5 int val_x100( float val ) {
bvirk 2:2a1c370a638f 6 int i = (int)(val * 1000) ;
bvirk 2:2a1c370a638f 7 if( i % 10 >= 5 )
bvirk 2:2a1c370a638f 8 i = (i / 10) + 1 ;
bvirk 2:2a1c370a638f 9 else if( i % 10 <= -5 )
bvirk 2:2a1c370a638f 10 i = (i / 10) - 1 ;
bvirk 2:2a1c370a638f 11 else
bvirk 2:2a1c370a638f 12 i /= 10 ;
bvirk 2:2a1c370a638f 13 return i ;
bvirk 2:2a1c370a638f 14 }
bvirk 2:2a1c370a638f 15
bvirk 2:2a1c370a638f 16 ManagedString ftos(float val) {
bvirk 2:2a1c370a638f 17 int val100 = val_x100(val);
bvirk 2:2a1c370a638f 18 ManagedString commaLess(val_x100(val));
bvirk 2:2a1c370a638f 19 ManagedString befCom = commaLess.substring(0,commaLess.length()-2);
bvirk 2:2a1c370a638f 20 ManagedString afterCom = commaLess.substring(commaLess.length()-2,2);
bvirk 2:2a1c370a638f 21 if (val100 % 100 == 0)
bvirk 2:2a1c370a638f 22 return befCom;
bvirk 2:2a1c370a638f 23 else
bvirk 2:2a1c370a638f 24 if (val100 % 10 == 0) {
bvirk 2:2a1c370a638f 25 return befCom + ManagedString(".") + afterCom.substring(0,1);
bvirk 2:2a1c370a638f 26 } else
bvirk 2:2a1c370a638f 27 return befCom + ManagedString(".") + afterCom;
bvirk 2:2a1c370a638f 28 }
bvirk 2:2a1c370a638f 29
bvirk 2:2a1c370a638f 30
bvirk 1:ad7869e467a8 31
bvirk 2:2a1c370a638f 32 static const unsigned char font[][5] = {
bvirk 2:2a1c370a638f 33 {0x00,0x00,0x00,0x00,0x00},
bvirk 2:2a1c370a638f 34 {0x3E,0x5B,0x4F,0x5B,0x3E},
bvirk 2:2a1c370a638f 35 {0x3E,0x6B,0x4F,0x6B,0x3E},
bvirk 2:2a1c370a638f 36 {0x1C,0x3E,0x7C,0x3E,0x1C},
bvirk 2:2a1c370a638f 37 {0x18,0x3C,0x7E,0x3C,0x18},
bvirk 2:2a1c370a638f 38 {0x1C,0x57,0x7D,0x57,0x1C},
bvirk 2:2a1c370a638f 39 {0x1C,0x5E,0x7F,0x5E,0x1C},
bvirk 2:2a1c370a638f 40 {0x00,0x18,0x3C,0x18,0x00},
bvirk 2:2a1c370a638f 41 {0xFF,0xE7,0xC3,0xE7,0xFF},
bvirk 2:2a1c370a638f 42 {0x00,0x18,0x24,0x18,0x00},
bvirk 2:2a1c370a638f 43 {0xFF,0xE7,0xDB,0xE7,0xFF},
bvirk 2:2a1c370a638f 44 {0x30,0x48,0x3A,0x06,0x0E},
bvirk 2:2a1c370a638f 45 {0x26,0x29,0x79,0x29,0x26},
bvirk 2:2a1c370a638f 46 {0x40,0x7F,0x05,0x05,0x07},
bvirk 2:2a1c370a638f 47 {0x40,0x7F,0x05,0x25,0x3F},
bvirk 2:2a1c370a638f 48 {0x5A,0x3C,0xE7,0x3C,0x5A},
bvirk 2:2a1c370a638f 49 {0x7F,0x3E,0x1C,0x1C,0x08},
bvirk 2:2a1c370a638f 50 {0x08,0x1C,0x1C,0x3E,0x7F},
bvirk 2:2a1c370a638f 51 {0x14,0x22,0x7F,0x22,0x14},
bvirk 2:2a1c370a638f 52 {0x5F,0x5F,0x00,0x5F,0x5F},
bvirk 2:2a1c370a638f 53 {0x06,0x09,0x7F,0x01,0x7F},
bvirk 2:2a1c370a638f 54 {0x00,0x66,0x89,0x95,0x6A},
bvirk 2:2a1c370a638f 55 {0x60,0x60,0x60,0x60,0x60},
bvirk 2:2a1c370a638f 56 {0x94,0xA2,0xFF,0xA2,0x94},
bvirk 2:2a1c370a638f 57 {0x08,0x04,0x7E,0x04,0x08},
bvirk 2:2a1c370a638f 58 {0x10,0x20,0x7E,0x20,0x10},
bvirk 2:2a1c370a638f 59 {0x08,0x08,0x2A,0x1C,0x08},
bvirk 2:2a1c370a638f 60 {0x08,0x1C,0x2A,0x08,0x08},
bvirk 2:2a1c370a638f 61 {0x1E,0x10,0x10,0x10,0x10},
bvirk 2:2a1c370a638f 62 {0x0C,0x1E,0x0C,0x1E,0x0C},
bvirk 2:2a1c370a638f 63 {0x30,0x38,0x3E,0x38,0x30},
bvirk 2:2a1c370a638f 64 {0x06,0x0E,0x3E,0x0E,0x06},
bvirk 2:2a1c370a638f 65 {0x00,0x00,0x00,0x00,0x00},
bvirk 2:2a1c370a638f 66 {0x00,0x00,0x5F,0x00,0x00},
bvirk 2:2a1c370a638f 67 {0x00,0x07,0x00,0x07,0x00},
bvirk 2:2a1c370a638f 68 {0x14,0x7F,0x14,0x7F,0x14},
bvirk 2:2a1c370a638f 69 {0x24,0x2A,0x7F,0x2A,0x12},
bvirk 2:2a1c370a638f 70 {0x23,0x13,0x08,0x64,0x62},
bvirk 2:2a1c370a638f 71 {0x36,0x49,0x56,0x20,0x50},
bvirk 2:2a1c370a638f 72 {0x00,0x08,0x07,0x03,0x00},
bvirk 2:2a1c370a638f 73 {0x00,0x1C,0x22,0x41,0x00},
bvirk 2:2a1c370a638f 74 {0x00,0x41,0x22,0x1C,0x00},
bvirk 2:2a1c370a638f 75 {0x2A,0x1C,0x7F,0x1C,0x2A},
bvirk 2:2a1c370a638f 76 {0x08,0x08,0x3E,0x08,0x08},
bvirk 2:2a1c370a638f 77 {0x00,0x80,0x70,0x30,0x00},
bvirk 2:2a1c370a638f 78 {0x08,0x08,0x08,0x08,0x08},
bvirk 2:2a1c370a638f 79 {0x00,0x00,0x60,0x60,0x00},
bvirk 2:2a1c370a638f 80 {0x20,0x10,0x08,0x04,0x02},
bvirk 2:2a1c370a638f 81 {0x3E,0x51,0x49,0x45,0x3E},
bvirk 2:2a1c370a638f 82 {0x00,0x42,0x7F,0x40,0x00},
bvirk 2:2a1c370a638f 83 {0x72,0x49,0x49,0x49,0x46},
bvirk 2:2a1c370a638f 84 {0x21,0x41,0x49,0x4D,0x33},
bvirk 2:2a1c370a638f 85 {0x18,0x14,0x12,0x7F,0x10},
bvirk 2:2a1c370a638f 86 {0x27,0x45,0x45,0x45,0x39},
bvirk 2:2a1c370a638f 87 {0x3C,0x4A,0x49,0x49,0x31},
bvirk 2:2a1c370a638f 88 {0x41,0x21,0x11,0x09,0x07},
bvirk 2:2a1c370a638f 89 {0x36,0x49,0x49,0x49,0x36},
bvirk 2:2a1c370a638f 90 {0x46,0x49,0x49,0x29,0x1E},
bvirk 2:2a1c370a638f 91 {0x00,0x00,0x14,0x00,0x00},
bvirk 2:2a1c370a638f 92 {0x00,0x40,0x34,0x00,0x00},
bvirk 2:2a1c370a638f 93 {0x00,0x08,0x14,0x22,0x41},
bvirk 2:2a1c370a638f 94 {0x14,0x14,0x14,0x14,0x14},
bvirk 2:2a1c370a638f 95 {0x00,0x41,0x22,0x14,0x08},
bvirk 2:2a1c370a638f 96 {0x02,0x01,0x59,0x09,0x06},
bvirk 2:2a1c370a638f 97 {0x3E,0x41,0x5D,0x59,0x4E},
bvirk 2:2a1c370a638f 98 {0x7C,0x12,0x11,0x12,0x7C},
bvirk 2:2a1c370a638f 99 {0x7F,0x49,0x49,0x49,0x36},
bvirk 2:2a1c370a638f 100 {0x3E,0x41,0x41,0x41,0x22},
bvirk 2:2a1c370a638f 101 {0x7F,0x41,0x41,0x41,0x3E},
bvirk 2:2a1c370a638f 102 {0x7F,0x49,0x49,0x49,0x41},
bvirk 2:2a1c370a638f 103 {0x7F,0x09,0x09,0x09,0x01},
bvirk 2:2a1c370a638f 104 {0x3E,0x41,0x41,0x51,0x73},
bvirk 2:2a1c370a638f 105 {0x7F,0x08,0x08,0x08,0x7F},
bvirk 2:2a1c370a638f 106 {0x00,0x41,0x7F,0x41,0x00},
bvirk 2:2a1c370a638f 107 {0x20,0x40,0x41,0x3F,0x01},
bvirk 2:2a1c370a638f 108 {0x7F,0x08,0x14,0x22,0x41},
bvirk 2:2a1c370a638f 109 {0x7F,0x40,0x40,0x40,0x40},
bvirk 2:2a1c370a638f 110 {0x7F,0x02,0x1C,0x02,0x7F},
bvirk 2:2a1c370a638f 111 {0x7F,0x04,0x08,0x10,0x7F},
bvirk 2:2a1c370a638f 112 {0x3E,0x41,0x41,0x41,0x3E},
bvirk 2:2a1c370a638f 113 {0x7F,0x09,0x09,0x09,0x06},
bvirk 2:2a1c370a638f 114 {0x3E,0x41,0x51,0x21,0x5E},
bvirk 2:2a1c370a638f 115 {0x7F,0x09,0x19,0x29,0x46},
bvirk 2:2a1c370a638f 116 {0x26,0x49,0x49,0x49,0x32},
bvirk 2:2a1c370a638f 117 {0x03,0x01,0x7F,0x01,0x03},
bvirk 2:2a1c370a638f 118 {0x3F,0x40,0x40,0x40,0x3F},
bvirk 2:2a1c370a638f 119 {0x1F,0x20,0x40,0x20,0x1F},
bvirk 2:2a1c370a638f 120 {0x3F,0x40,0x38,0x40,0x3F},
bvirk 2:2a1c370a638f 121 {0x63,0x14,0x08,0x14,0x63},
bvirk 2:2a1c370a638f 122 {0x03,0x04,0x78,0x04,0x03},
bvirk 2:2a1c370a638f 123 {0x61,0x59,0x49,0x4D,0x43},
bvirk 2:2a1c370a638f 124 {0x00,0x7F,0x41,0x41,0x41},
bvirk 2:2a1c370a638f 125 {0x02,0x04,0x08,0x10,0x20},
bvirk 2:2a1c370a638f 126 {0x00,0x41,0x41,0x41,0x7F},
bvirk 2:2a1c370a638f 127 {0x04,0x02,0x01,0x02,0x04},
bvirk 2:2a1c370a638f 128 {0x40,0x40,0x40,0x40,0x40},
bvirk 2:2a1c370a638f 129 {0x00,0x03,0x07,0x08,0x00},
bvirk 2:2a1c370a638f 130 {0x20,0x54,0x54,0x78,0x40},
bvirk 2:2a1c370a638f 131 {0x7F,0x28,0x44,0x44,0x38},
bvirk 2:2a1c370a638f 132 {0x38,0x44,0x44,0x44,0x28},
bvirk 2:2a1c370a638f 133 {0x38,0x44,0x44,0x28,0x7F},
bvirk 2:2a1c370a638f 134 {0x38,0x54,0x54,0x54,0x18},
bvirk 2:2a1c370a638f 135 {0x00,0x08,0x7E,0x09,0x02},
bvirk 2:2a1c370a638f 136 {0x18,0xA4,0xA4,0x9C,0x78},
bvirk 2:2a1c370a638f 137 {0x7F,0x08,0x04,0x04,0x78},
bvirk 2:2a1c370a638f 138 {0x00,0x44,0x7D,0x40,0x00},
bvirk 2:2a1c370a638f 139 {0x20,0x40,0x40,0x3D,0x00},
bvirk 2:2a1c370a638f 140 {0x7F,0x10,0x28,0x44,0x00},
bvirk 2:2a1c370a638f 141 {0x00,0x41,0x7F,0x40,0x00},
bvirk 2:2a1c370a638f 142 {0x7C,0x04,0x78,0x04,0x78},
bvirk 2:2a1c370a638f 143 {0x7C,0x08,0x04,0x04,0x78},
bvirk 2:2a1c370a638f 144 {0x38,0x44,0x44,0x44,0x38},
bvirk 2:2a1c370a638f 145 {0xFC,0x18,0x24,0x24,0x18},
bvirk 2:2a1c370a638f 146 {0x18,0x24,0x24,0x18,0xFC},
bvirk 2:2a1c370a638f 147 {0x7C,0x08,0x04,0x04,0x08},
bvirk 2:2a1c370a638f 148 {0x48,0x54,0x54,0x54,0x24},
bvirk 2:2a1c370a638f 149 {0x04,0x04,0x3F,0x44,0x24},
bvirk 2:2a1c370a638f 150 {0x3C,0x40,0x40,0x20,0x7C},
bvirk 2:2a1c370a638f 151 {0x1C,0x20,0x40,0x20,0x1C},
bvirk 2:2a1c370a638f 152 {0x3C,0x40,0x30,0x40,0x3C},
bvirk 2:2a1c370a638f 153 {0x44,0x28,0x10,0x28,0x44},
bvirk 2:2a1c370a638f 154 {0x4C,0x90,0x90,0x90,0x7C},
bvirk 2:2a1c370a638f 155 {0x44,0x64,0x54,0x4C,0x44},
bvirk 2:2a1c370a638f 156 {0x00,0x08,0x36,0x41,0x00},
bvirk 2:2a1c370a638f 157 {0x00,0x00,0x77,0x00,0x00},
bvirk 2:2a1c370a638f 158 {0x00,0x41,0x36,0x08,0x00},
bvirk 2:2a1c370a638f 159 {0x02,0x01,0x02,0x04,0x02},
bvirk 2:2a1c370a638f 160 {0x3C,0x26,0x23,0x26,0x3C},
bvirk 2:2a1c370a638f 161 {0x1E,0xA1,0xA1,0x61,0x12},
bvirk 2:2a1c370a638f 162 {0x3A,0x40,0x40,0x20,0x7A},
bvirk 2:2a1c370a638f 163 {0x38,0x54,0x54,0x55,0x59},
bvirk 2:2a1c370a638f 164 {0x21,0x55,0x55,0x79,0x41},
bvirk 2:2a1c370a638f 165 {0x21,0x54,0x54,0x78,0x41},
bvirk 2:2a1c370a638f 166 {0x21,0x55,0x54,0x78,0x40},
bvirk 2:2a1c370a638f 167 {0x20,0x54,0x55,0x79,0x40},
bvirk 2:2a1c370a638f 168 {0x0C,0x1E,0x52,0x72,0x12},
bvirk 2:2a1c370a638f 169 {0x39,0x55,0x55,0x55,0x59},
bvirk 2:2a1c370a638f 170 {0x39,0x54,0x54,0x54,0x59},
bvirk 2:2a1c370a638f 171 {0x39,0x55,0x54,0x54,0x58},
bvirk 2:2a1c370a638f 172 {0x00,0x00,0x45,0x7C,0x41},
bvirk 2:2a1c370a638f 173 {0x00,0x02,0x45,0x7D,0x42},
bvirk 2:2a1c370a638f 174 {0x00,0x01,0x45,0x7C,0x40},
bvirk 2:2a1c370a638f 175 {0xF0,0x29,0x24,0x29,0xF0},
bvirk 2:2a1c370a638f 176 {0xF0,0x28,0x25,0x28,0xF0},
bvirk 2:2a1c370a638f 177 {0x7C,0x54,0x55,0x45,0x00},
bvirk 2:2a1c370a638f 178 {0x20,0x54,0x54,0x7C,0x54},
bvirk 2:2a1c370a638f 179 {0x7C,0x0A,0x09,0x7F,0x49},
bvirk 2:2a1c370a638f 180 {0x32,0x49,0x49,0x49,0x32},
bvirk 2:2a1c370a638f 181 {0x32,0x48,0x48,0x48,0x32},
bvirk 2:2a1c370a638f 182 {0x32,0x4A,0x48,0x48,0x30},
bvirk 2:2a1c370a638f 183 {0x3A,0x41,0x41,0x21,0x7A},
bvirk 2:2a1c370a638f 184 {0x3A,0x42,0x40,0x20,0x78},
bvirk 2:2a1c370a638f 185 {0x00,0x9D,0xA0,0xA0,0x7D},
bvirk 2:2a1c370a638f 186 {0x39,0x44,0x44,0x44,0x39},
bvirk 2:2a1c370a638f 187 {0x3D,0x40,0x40,0x40,0x3D},
bvirk 2:2a1c370a638f 188 {0x3C,0x24,0xFF,0x24,0x24},
bvirk 2:2a1c370a638f 189 {0x48,0x7E,0x49,0x43,0x66},
bvirk 2:2a1c370a638f 190 {0x2B,0x2F,0xFC,0x2F,0x2B},
bvirk 2:2a1c370a638f 191 {0xFF,0x09,0x29,0xF6,0x20},
bvirk 2:2a1c370a638f 192 {0xC0,0x88,0x7E,0x09,0x03},
bvirk 2:2a1c370a638f 193 {0x20,0x54,0x54,0x79,0x41},
bvirk 2:2a1c370a638f 194 {0x00,0x00,0x44,0x7D,0x41},
bvirk 2:2a1c370a638f 195 {0x30,0x48,0x48,0x4A,0x32},
bvirk 2:2a1c370a638f 196 {0x38,0x40,0x40,0x22,0x7A},
bvirk 2:2a1c370a638f 197 {0x00,0x7A,0x0A,0x0A,0x72},
bvirk 2:2a1c370a638f 198 {0x7D,0x0D,0x19,0x31,0x7D},
bvirk 2:2a1c370a638f 199 {0x26,0x29,0x29,0x2F,0x28},
bvirk 2:2a1c370a638f 200 {0x26,0x29,0x29,0x29,0x26},
bvirk 2:2a1c370a638f 201 {0x30,0x48,0x4D,0x40,0x20},
bvirk 2:2a1c370a638f 202 {0x38,0x08,0x08,0x08,0x08},
bvirk 2:2a1c370a638f 203 {0x08,0x08,0x08,0x08,0x38},
bvirk 2:2a1c370a638f 204 {0x2F,0x10,0xC8,0xAC,0xBA},
bvirk 2:2a1c370a638f 205 {0x2F,0x10,0x28,0x34,0xFA},
bvirk 2:2a1c370a638f 206 {0x00,0x00,0x7B,0x00,0x00},
bvirk 2:2a1c370a638f 207 {0x08,0x14,0x2A,0x14,0x22},
bvirk 2:2a1c370a638f 208 {0x22,0x14,0x2A,0x14,0x08},
bvirk 2:2a1c370a638f 209 {0xAA,0x00,0x55,0x00,0xAA},
bvirk 2:2a1c370a638f 210 {0xAA,0x55,0xAA,0x55,0xAA},
bvirk 2:2a1c370a638f 211 {0x00,0x00,0x00,0xFF,0x00},
bvirk 2:2a1c370a638f 212 {0x10,0x10,0x10,0xFF,0x00},
bvirk 2:2a1c370a638f 213 {0x14,0x14,0x14,0xFF,0x00},
bvirk 2:2a1c370a638f 214 {0x10,0x10,0xFF,0x00,0xFF},
bvirk 2:2a1c370a638f 215 {0x10,0x10,0xF0,0x10,0xF0},
bvirk 2:2a1c370a638f 216 {0x14,0x14,0x14,0xFC,0x00},
bvirk 2:2a1c370a638f 217 {0x14,0x14,0xF7,0x00,0xFF},
bvirk 2:2a1c370a638f 218 {0x00,0x00,0xFF,0x00,0xFF},
bvirk 2:2a1c370a638f 219 {0x14,0x14,0xF4,0x04,0xFC},
bvirk 2:2a1c370a638f 220 {0x14,0x14,0x17,0x10,0x1F},
bvirk 2:2a1c370a638f 221 {0x10,0x10,0x1F,0x10,0x1F},
bvirk 2:2a1c370a638f 222 {0x14,0x14,0x14,0x1F,0x00},
bvirk 2:2a1c370a638f 223 {0x10,0x10,0x10,0xF0,0x00},
bvirk 2:2a1c370a638f 224 {0x00,0x00,0x00,0x1F,0x10},
bvirk 2:2a1c370a638f 225 {0x10,0x10,0x10,0x1F,0x10},
bvirk 2:2a1c370a638f 226 {0x10,0x10,0x10,0xF0,0x10},
bvirk 2:2a1c370a638f 227 {0x00,0x00,0x00,0xFF,0x10},
bvirk 2:2a1c370a638f 228 {0x10,0x10,0x10,0x10,0x10},
bvirk 2:2a1c370a638f 229 {0x10,0x10,0x10,0xFF,0x10},
bvirk 2:2a1c370a638f 230 {0x00,0x00,0x00,0xFF,0x14},
bvirk 2:2a1c370a638f 231 {0x00,0x00,0xFF,0x00,0xFF},
bvirk 2:2a1c370a638f 232 {0x00,0x00,0x1F,0x10,0x17},
bvirk 2:2a1c370a638f 233 {0x00,0x00,0xFC,0x04,0xF4},
bvirk 2:2a1c370a638f 234 {0x14,0x14,0x17,0x10,0x17},
bvirk 2:2a1c370a638f 235 {0x14,0x14,0xF4,0x04,0xF4},
bvirk 2:2a1c370a638f 236 {0x00,0x00,0xFF,0x00,0xF7},
bvirk 2:2a1c370a638f 237 {0x14,0x14,0x14,0x14,0x14},
bvirk 2:2a1c370a638f 238 {0x14,0x14,0xF7,0x00,0xF7},
bvirk 2:2a1c370a638f 239 {0x14,0x14,0x14,0x17,0x14},
bvirk 2:2a1c370a638f 240 {0x10,0x10,0x1F,0x10,0x1F},
bvirk 2:2a1c370a638f 241 {0x14,0x14,0x14,0xF4,0x14},
bvirk 2:2a1c370a638f 242 {0x10,0x10,0xF0,0x10,0xF0},
bvirk 2:2a1c370a638f 243 {0x00,0x00,0x1F,0x10,0x1F},
bvirk 2:2a1c370a638f 244 {0x00,0x00,0x00,0x1F,0x14},
bvirk 2:2a1c370a638f 245 {0x00,0x00,0x00,0xFC,0x14},
bvirk 2:2a1c370a638f 246 {0x00,0x00,0xF0,0x10,0xF0},
bvirk 2:2a1c370a638f 247 {0x10,0x10,0xFF,0x10,0xFF},
bvirk 2:2a1c370a638f 248 {0x14,0x14,0x14,0xFF,0x14},
bvirk 2:2a1c370a638f 249 {0x10,0x10,0x10,0x1F,0x00},
bvirk 2:2a1c370a638f 250 {0x00,0x00,0x00,0xF0,0x10},
bvirk 2:2a1c370a638f 251 {0xFF,0xFF,0xFF,0xFF,0xFF},
bvirk 2:2a1c370a638f 252 {0xF0,0xF0,0xF0,0xF0,0xF0},
bvirk 2:2a1c370a638f 253 {0xFF,0xFF,0xFF,0x00,0x00},
bvirk 2:2a1c370a638f 254 {0x00,0x00,0x00,0xFF,0xFF},
bvirk 2:2a1c370a638f 255 {0x0F,0x0F,0x0F,0x0F,0x0F},
bvirk 2:2a1c370a638f 256 {0x38,0x44,0x44,0x38,0x44},
bvirk 2:2a1c370a638f 257 {0x7C,0x2A,0x2A,0x3E,0x14},
bvirk 2:2a1c370a638f 258 {0x7E,0x02,0x02,0x06,0x06},
bvirk 2:2a1c370a638f 259 {0x02,0x7E,0x02,0x7E,0x02},
bvirk 2:2a1c370a638f 260 {0x63,0x55,0x49,0x41,0x63},
bvirk 2:2a1c370a638f 261 {0x38,0x44,0x44,0x3C,0x04},
bvirk 2:2a1c370a638f 262 {0x40,0x7E,0x20,0x1E,0x20},
bvirk 2:2a1c370a638f 263 {0x06,0x02,0x7E,0x02,0x02},
bvirk 2:2a1c370a638f 264 {0x99,0xA5,0xE7,0xA5,0x99},
bvirk 2:2a1c370a638f 265 {0x1C,0x2A,0x49,0x2A,0x1C},
bvirk 2:2a1c370a638f 266 {0x4C,0x72,0x01,0x72,0x4C},
bvirk 2:2a1c370a638f 267 {0x30,0x4A,0x4D,0x4D,0x30},
bvirk 2:2a1c370a638f 268 {0x30,0x48,0x78,0x48,0x30},
bvirk 2:2a1c370a638f 269 {0xBC,0x62,0x5A,0x46,0x3D},
bvirk 2:2a1c370a638f 270 {0x3E,0x49,0x49,0x49,0x00},
bvirk 2:2a1c370a638f 271 {0x7E,0x01,0x01,0x01,0x7E},
bvirk 2:2a1c370a638f 272 {0x2A,0x2A,0x2A,0x2A,0x2A},
bvirk 2:2a1c370a638f 273 {0x44,0x44,0x5F,0x44,0x44},
bvirk 2:2a1c370a638f 274 {0x40,0x51,0x4A,0x44,0x40},
bvirk 2:2a1c370a638f 275 {0x40,0x44,0x4A,0x51,0x40},
bvirk 2:2a1c370a638f 276 {0x00,0x00,0xFF,0x01,0x03},
bvirk 2:2a1c370a638f 277 {0xE0,0x80,0xFF,0x00,0x00},
bvirk 2:2a1c370a638f 278 {0x08,0x08,0x6B,0x6B,0x08},
bvirk 2:2a1c370a638f 279 {0x36,0x12,0x36,0x24,0x36},
bvirk 2:2a1c370a638f 280 {0x06,0x0F,0x09,0x0F,0x06},
bvirk 2:2a1c370a638f 281 {0x00,0x00,0x18,0x18,0x00},
bvirk 2:2a1c370a638f 282 {0x00,0x00,0x10,0x10,0x00},
bvirk 2:2a1c370a638f 283 {0x30,0x40,0xFF,0x01,0x01},
bvirk 2:2a1c370a638f 284 {0x00,0x1F,0x01,0x01,0x1E},
bvirk 2:2a1c370a638f 285 {0x00,0x19,0x1D,0x17,0x12},
bvirk 2:2a1c370a638f 286 {0x00,0x3C,0x3C,0x3C,0x3C},
bvirk 2:2a1c370a638f 287 {0x00,0x00,0x00,0x00,0x00}};
bvirk 2:2a1c370a638f 288
bvirk 1:ad7869e467a8 289
bvirk 1:ad7869e467a8 290 class OLED {
bvirk 1:ad7869e467a8 291 static const uint8_t SSD1306_SETCONTRAST = 0x81;
bvirk 1:ad7869e467a8 292 static const uint8_t SSD1306_SETCOLUMNADRESS = 0x21;
bvirk 1:ad7869e467a8 293 static const uint8_t SSD1306_SETPAGEADRESS = 0x22;
bvirk 1:ad7869e467a8 294 static const uint8_t SSD1306_DISPLAYALLON_RESUME = 0xA4;
bvirk 1:ad7869e467a8 295 static const uint8_t SSD1306_DISPLAYALLON = 0xA5;
bvirk 1:ad7869e467a8 296 static const uint8_t SSD1306_NORMALDISPLAY = 0xA6;
bvirk 1:ad7869e467a8 297 static const uint8_t SSD1306_INVERTDISPLAY = 0xA7;
bvirk 1:ad7869e467a8 298 static const uint8_t SSD1306_DISPLAYOFF = 0xAE;
bvirk 1:ad7869e467a8 299 static const uint8_t SSD1306_DISPLAYON = 0xAF;
bvirk 1:ad7869e467a8 300 static const uint8_t SSD1306_SETDISPLAYOFFSET = 0xD3;
bvirk 1:ad7869e467a8 301 static const uint8_t SSD1306_SETCOMPINS = 0xDA;
bvirk 1:ad7869e467a8 302 static const uint8_t SSD1306_SETVCOMDETECT = 0xDB;
bvirk 1:ad7869e467a8 303 static const uint8_t SSD1306_SETDISPLAYCLOCKDIV = 0xD5;
bvirk 1:ad7869e467a8 304 static const uint8_t SSD1306_SETPRECHARGE = 0xD9;
bvirk 1:ad7869e467a8 305 static const uint8_t SSD1306_SETMULTIPLEX = 0xA8;
bvirk 1:ad7869e467a8 306 static const uint8_t SSD1306_SETLOWCOLUMN = 0x00;
bvirk 1:ad7869e467a8 307 static const uint8_t SSD1306_SETHIGHCOLUMN = 0x10;
bvirk 1:ad7869e467a8 308 static const uint8_t SSD1306_SETSTARTLINE = 0x40;
bvirk 1:ad7869e467a8 309 static const uint8_t SSD1306_MEMORYMODE = 0x20;
bvirk 1:ad7869e467a8 310 static const uint8_t SSD1306_COMSCANINC = 0xC0;
bvirk 1:ad7869e467a8 311 static const uint8_t SSD1306_COMSCANDEC = 0xC8;
bvirk 1:ad7869e467a8 312 static const uint8_t SSD1306_SEGREMAP = 0xA0;
bvirk 1:ad7869e467a8 313 static const uint8_t SSD1306_CHARGEPUMP = 0x8D;
bvirk 2:2a1c370a638f 314 static const uint8_t chipAdress = 0x78; //0x3C;
bvirk 1:ad7869e467a8 315 static const uint8_t xOffset = 0;
bvirk 1:ad7869e467a8 316 static const uint8_t yOffset = 0;
bvirk 1:ad7869e467a8 317
bvirk 1:ad7869e467a8 318 uint8_t charX;
bvirk 1:ad7869e467a8 319 uint8_t charY;
bvirk 1:ad7869e467a8 320 uint8_t displayWidth;
bvirk 1:ad7869e467a8 321 uint8_t displayHeight;
bvirk 2:2a1c370a638f 322 uint16_t screenSize;
bvirk 1:ad7869e467a8 323 bool loadStarted;
bvirk 1:ad7869e467a8 324 float loadPercent;
bvirk 2:2a1c370a638f 325
bvirk 1:ad7869e467a8 326 MicroBitI2C i2c;
bvirk 1:ad7869e467a8 327
bvirk 1:ad7869e467a8 328 public:
bvirk 2:2a1c370a638f 329 int numClr;
bvirk 1:ad7869e467a8 330 OLED() :
bvirk 1:ad7869e467a8 331 i2c(I2C_SDA0,I2C_SCL0)
bvirk 1:ad7869e467a8 332 ,charX(0)
bvirk 1:ad7869e467a8 333 ,charY(0)
bvirk 1:ad7869e467a8 334 ,displayWidth(128)
bvirk 1:ad7869e467a8 335 ,displayHeight(64 / 8)
bvirk 1:ad7869e467a8 336 ,screenSize(0)
bvirk 2:2a1c370a638f 337 ,numClr(0)
bvirk 1:ad7869e467a8 338 {
bvirk 1:ad7869e467a8 339 }
bvirk 1:ad7869e467a8 340 void command(uint8_t cmd) {
bvirk 1:ad7869e467a8 341 char buf[2];
bvirk 1:ad7869e467a8 342 buf[0] = '\0';
bvirk 1:ad7869e467a8 343 buf[1] = cmd;
bvirk 1:ad7869e467a8 344 i2c.write(chipAdress,buf,2);
bvirk 1:ad7869e467a8 345 }
bvirk 1:ad7869e467a8 346
bvirk 1:ad7869e467a8 347 void init(uint8_t width, uint8_t height) {
bvirk 1:ad7869e467a8 348 command(SSD1306_DISPLAYOFF);
bvirk 1:ad7869e467a8 349 command(SSD1306_SETDISPLAYCLOCKDIV);
bvirk 1:ad7869e467a8 350 command(0x80); // the suggested ratio 0x80
bvirk 1:ad7869e467a8 351 command(SSD1306_SETMULTIPLEX);
bvirk 1:ad7869e467a8 352 command(0x3F);
bvirk 1:ad7869e467a8 353 command(SSD1306_SETDISPLAYOFFSET);
bvirk 1:ad7869e467a8 354 command(0x0); // no offset
bvirk 1:ad7869e467a8 355 command(SSD1306_SETSTARTLINE | 0x0); // line #0
bvirk 1:ad7869e467a8 356 command(SSD1306_CHARGEPUMP);
bvirk 1:ad7869e467a8 357 command(0x14);
bvirk 1:ad7869e467a8 358 command(SSD1306_MEMORYMODE);
bvirk 1:ad7869e467a8 359 command(0x00); // 0x0 act like ks0108
bvirk 1:ad7869e467a8 360 command(SSD1306_SEGREMAP | 0x1);
bvirk 1:ad7869e467a8 361 command(SSD1306_COMSCANDEC);
bvirk 1:ad7869e467a8 362 command(SSD1306_SETCOMPINS);
bvirk 1:ad7869e467a8 363 command(0x12);
bvirk 1:ad7869e467a8 364 command(SSD1306_SETCONTRAST);
bvirk 1:ad7869e467a8 365 command(0xCF);
bvirk 1:ad7869e467a8 366 command(SSD1306_SETPRECHARGE);
bvirk 1:ad7869e467a8 367 command(0xF1);
bvirk 1:ad7869e467a8 368 command(SSD1306_SETVCOMDETECT);
bvirk 1:ad7869e467a8 369 command(0x40);
bvirk 1:ad7869e467a8 370 command(SSD1306_DISPLAYALLON_RESUME);
bvirk 1:ad7869e467a8 371 command(SSD1306_NORMALDISPLAY);
bvirk 1:ad7869e467a8 372 command(SSD1306_DISPLAYON);
bvirk 1:ad7869e467a8 373 displayWidth = width;
bvirk 1:ad7869e467a8 374 displayHeight = height / 8;
bvirk 1:ad7869e467a8 375 screenSize = displayWidth * displayHeight;
bvirk 2:2a1c370a638f 376 numClr=screenSize;
bvirk 1:ad7869e467a8 377 charX = xOffset;
bvirk 1:ad7869e467a8 378 charY = yOffset;
bvirk 1:ad7869e467a8 379 loadStarted = false;
bvirk 1:ad7869e467a8 380 loadPercent = 0;
bvirk 1:ad7869e467a8 381 clear();
bvirk 1:ad7869e467a8 382 }
bvirk 1:ad7869e467a8 383
bvirk 1:ad7869e467a8 384 void clear() {
bvirk 1:ad7869e467a8 385 loadStarted = false;
bvirk 1:ad7869e467a8 386 loadPercent = 0;
bvirk 1:ad7869e467a8 387 command(SSD1306_SETCOLUMNADRESS);
bvirk 1:ad7869e467a8 388 command(0x00);
bvirk 1:ad7869e467a8 389 command(displayWidth - 1);
bvirk 1:ad7869e467a8 390 command(SSD1306_SETPAGEADRESS);
bvirk 1:ad7869e467a8 391 command(0x00);
bvirk 1:ad7869e467a8 392 command(displayHeight - 1);
bvirk 1:ad7869e467a8 393 char data[17];
bvirk 1:ad7869e467a8 394 data[0] = 0x40; // Data Mode;
bvirk 1:ad7869e467a8 395 for (int8_t i = 1; i < 17; i++)
bvirk 1:ad7869e467a8 396 data[i] = 0x00;
bvirk 1:ad7869e467a8 397 // send display buffer in 16 byte chunks;
bvirk 2:2a1c370a638f 398 //numClr = screenSize;
bvirk 2:2a1c370a638f 399 for (int16_t i = 0; i < screenSize; i += 16) {
bvirk 2:2a1c370a638f 400 i2c.write(chipAdress, data, 17,false);
bvirk 2:2a1c370a638f 401 }
bvirk 1:ad7869e467a8 402 charX = xOffset;
bvirk 1:ad7869e467a8 403 charY = yOffset;
bvirk 1:ad7869e467a8 404 }
bvirk 1:ad7869e467a8 405
bvirk 1:ad7869e467a8 406 void newLine() {
bvirk 1:ad7869e467a8 407 charY++;
bvirk 1:ad7869e467a8 408 charX = xOffset;
bvirk 1:ad7869e467a8 409 }
bvirk 1:ad7869e467a8 410
bvirk 2:2a1c370a638f 411 void setCharTable(unsigned int chr, unsigned char *tegnbits) {
bvirk 2:2a1c370a638f 412 for (int8_t p=0; p<5; p++)
bvirk 2:2a1c370a638f 413 tegnbits[p] = font[chr][p];
bvirk 2:2a1c370a638f 414 }
bvirk 2:2a1c370a638f 415
bvirk 1:ad7869e467a8 416 void drawChar(uint8_t x, uint8_t y, uint8_t chr ) {
bvirk 1:ad7869e467a8 417 command(SSD1306_SETCOLUMNADRESS);
bvirk 1:ad7869e467a8 418 command(x);
bvirk 1:ad7869e467a8 419 command(x + 5);
bvirk 1:ad7869e467a8 420 command(SSD1306_SETPAGEADRESS);
bvirk 1:ad7869e467a8 421 command(y);
bvirk 1:ad7869e467a8 422 command(y + 1);
bvirk 1:ad7869e467a8 423 char line[2];
bvirk 1:ad7869e467a8 424 line[0] = 0x40;
bvirk 1:ad7869e467a8 425 for (int8_t i = 0; i < 6; i++) {
bvirk 1:ad7869e467a8 426 if (i == 5)
bvirk 1:ad7869e467a8 427 line[1] = 0x00;
bvirk 2:2a1c370a638f 428 else
bvirk 2:2a1c370a638f 429 line[1] = font[chr][i];
bvirk 1:ad7869e467a8 430 i2c.write(chipAdress, line, 2, false);
bvirk 1:ad7869e467a8 431 }
bvirk 1:ad7869e467a8 432 }
bvirk 1:ad7869e467a8 433
bvirk 1:ad7869e467a8 434 void writeString(ManagedString str) {
bvirk 1:ad7869e467a8 435 for (uint16_t i = 0; i < str.length(); i++) {
bvirk 1:ad7869e467a8 436 if (charX > displayWidth - 6)
bvirk 1:ad7869e467a8 437 newLine();
bvirk 1:ad7869e467a8 438 drawChar(charX, charY, (uint8_t)str.charAt(i));
bvirk 1:ad7869e467a8 439 charX += 6;
bvirk 1:ad7869e467a8 440 }
bvirk 2:2a1c370a638f 441 }
bvirk 2:2a1c370a638f 442 void writeStringNewLine(ManagedString str) {
bvirk 2:2a1c370a638f 443 writeString(str);
bvirk 2:2a1c370a638f 444 newLine();
bvirk 2:2a1c370a638f 445 }
bvirk 2:2a1c370a638f 446
bvirk 2:2a1c370a638f 447 void writeNum(float number, bool useNewLine=false) {
bvirk 2:2a1c370a638f 448 writeString(ftos(number));
bvirk 2:2a1c370a638f 449 if (useNewLine)
bvirk 2:2a1c370a638f 450 newLine();
bvirk 2:2a1c370a638f 451 }
bvirk 2:2a1c370a638f 452 //void writeNum(int number) {
bvirk 2:2a1c370a638f 453 // writeNum((float)number);
bvirk 2:2a1c370a638f 454 //}
bvirk 2:2a1c370a638f 455 //void writeNumNewLine(int number) {
bvirk 2:2a1c370a638f 456 // writeNum((float)number,true);
bvirk 2:2a1c370a638f 457 //}
bvirk 2:2a1c370a638f 458 void writeNumNewLine(float number) {
bvirk 2:2a1c370a638f 459 writeNum(number,true);
bvirk 2:2a1c370a638f 460 }
bvirk 2:2a1c370a638f 461
bvirk 2:2a1c370a638f 462
bvirk 1:ad7869e467a8 463
bvirk 1:ad7869e467a8 464 }; // end of class OLED
bvirk 0:950ea6fc2190 465
bvirk 2:2a1c370a638f 466
bvirk 2:2a1c370a638f 467
bvirk 2:2a1c370a638f 468
bvirk 0:950ea6fc2190 469 MicroBit uBit;
bvirk 1:ad7869e467a8 470 OLED oled;
bvirk 2:2a1c370a638f 471
bvirk 2:2a1c370a638f 472
bvirk 2:2a1c370a638f 473 void testOLED() {
bvirk 2:2a1c370a638f 474 oled.init(128, 64);
bvirk 2:2a1c370a638f 475 oled.clear();
bvirk 2:2a1c370a638f 476 oled.writeStringNewLine("the quick brown fox jumped over the lazy dog?");
bvirk 2:2a1c370a638f 477 uBit.sleep(2000);
bvirk 2:2a1c370a638f 478 oled.clear();
bvirk 2:2a1c370a638f 479 oled.writeStringNewLine("THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG!");
bvirk 2:2a1c370a638f 480 uBit.sleep(2000);
bvirk 2:2a1c370a638f 481 oled.clear();
bvirk 2:2a1c370a638f 482 oled.writeString("Your magic number is ");
bvirk 2:2a1c370a638f 483 oled.writeNum(23 * 3);
bvirk 2:2a1c370a638f 484 oled.writeStringNewLine("!");
bvirk 2:2a1c370a638f 485 oled.writeNum(1.4);
bvirk 2:2a1c370a638f 486 oled.writeNumNewLine(12);
bvirk 2:2a1c370a638f 487 uBit.sleep(2000);
bvirk 2:2a1c370a638f 488 oled.writeNumNewLine(2.1);
bvirk 2:2a1c370a638f 489 uBit.sleep(2000);
bvirk 2:2a1c370a638f 490 oled.writeNumNewLine(3);
bvirk 2:2a1c370a638f 491 /*
bvirk 2:2a1c370a638f 492 basic.pause(1000)
bvirk 2:2a1c370a638f 493 for (let i = 0; i < 100; i++) {
bvirk 2:2a1c370a638f 494 oled.drawLoading(i)
bvirk 2:2a1c370a638f 495 }
bvirk 2:2a1c370a638f 496 basic.pause(1000)
bvirk 2:2a1c370a638f 497 oled.clear()
bvirk 2:2a1c370a638f 498 oled.drawRectangle(10, 10, 60, 60)
bvirk 2:2a1c370a638f 499 oled.drawLine(0, 0, 128, 64)
bvirk 2:2a1c370a638f 500 oled.drawLine(0, 64, 128, 0)
bvirk 2:2a1c370a638f 501 */
bvirk 2:2a1c370a638f 502 }
bvirk 2:2a1c370a638f 503
bvirk 0:950ea6fc2190 504 int main()
bvirk 0:950ea6fc2190 505 {
bvirk 1:ad7869e467a8 506 // Initialise the micro:bit runtime.
bvirk 0:950ea6fc2190 507 uBit.init();
bvirk 2:2a1c370a638f 508 testOLED();
bvirk 1:ad7869e467a8 509
bvirk 2:2a1c370a638f 510 uBit.display.print(oled.numClr);
bvirk 2:2a1c370a638f 511 return 0;
bvirk 1:ad7869e467a8 512
bvirk 2:2a1c370a638f 513 unsigned char tegnmap[5];
bvirk 2:2a1c370a638f 514
bvirk 2:2a1c370a638f 515 unsigned char test[] = "KNAP HAR MAN LUKKET";
bvirk 2:2a1c370a638f 516 for (int8_t i=0; i< sizeof(test)-1;i++) {
bvirk 2:2a1c370a638f 517 oled.setCharTable(test[i],tegnmap);
bvirk 2:2a1c370a638f 518 for (int16_t y=0; y<5;y++) {
bvirk 2:2a1c370a638f 519 for (int16_t x=0; x<5; x++)
bvirk 2:2a1c370a638f 520 uBit.display.image.setPixelValue(x,y,
bvirk 2:2a1c370a638f 521 (tegnmap[x] & (1<<y)) >> y ? 1 : 0);
bvirk 2:2a1c370a638f 522 }
bvirk 2:2a1c370a638f 523 uBit.sleep(1000);
bvirk 2:2a1c370a638f 524 }
bvirk 1:ad7869e467a8 525 while(true) uBit.sleep(1000);
bvirk 1:ad7869e467a8 526 // release_fiber();
bvirk 1:ad7869e467a8 527 }