We connected an OLED to I2C of weather:bit.

Dependencies:   BME280 SSD1308_128x64_I2C microbit

Fork of mbed_oled by Wim Huiskamp

/media/uploads/kanpapa/img_20171215_224649.jpg

Committer:
wim
Date:
Tue Jan 29 21:17:34 2013 +0000
Revision:
6:44256b0b5d18
Parent:
5:dff410a009c5
Child:
7:ae282775cbcc
Updated progress scales

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 1:00053cb70ac5 1 /* mbed Seeed 128x64 OLED Test
wim 1:00053cb70ac5 2 * http://www.seeedstudio.com/depot/grove-oled-display-12864-p-781.html?cPath=163_167
wim 1:00053cb70ac5 3 *
wim 1:00053cb70ac5 4 * Copyright (c) 2012 Wim Huiskamp
wim 1:00053cb70ac5 5 * Released under the MIT License: http://mbed.org/license/mit
wim 1:00053cb70ac5 6 *
wim 1:00053cb70ac5 7 * version 0.2 Initial Release
wim 1:00053cb70ac5 8 */
wim 1:00053cb70ac5 9 #include "mbed.h"
wim 1:00053cb70ac5 10 #include "mbed_logo.h"
wim 1:00053cb70ac5 11 #include "SSD1308.h"
wim 1:00053cb70ac5 12
wim 1:00053cb70ac5 13
wim 1:00053cb70ac5 14 //Pin Defines for I2C Bus
wim 1:00053cb70ac5 15 //#define D_SDA p9
wim 1:00053cb70ac5 16 //#define D_SCL p10
wim 1:00053cb70ac5 17 #define D_SDA p28
wim 1:00053cb70ac5 18 #define D_SCL p27
wim 1:00053cb70ac5 19 I2C i2c(D_SDA, D_SCL);
wim 1:00053cb70ac5 20
wim 1:00053cb70ac5 21 //Host PC Baudrate (Virtual Com Port on USB)
wim 1:00053cb70ac5 22 #define D_BAUDRATE 9600
wim 1:00053cb70ac5 23 //#define D_BAUDRATE 57600
wim 1:00053cb70ac5 24
wim 1:00053cb70ac5 25 // mbed Interface Hardware definitions
wim 1:00053cb70ac5 26 DigitalOut myled1(LED1);
wim 1:00053cb70ac5 27 DigitalOut myled2(LED2);
wim 1:00053cb70ac5 28 DigitalOut myled3(LED3);
wim 1:00053cb70ac5 29 DigitalOut heartbeatLED(LED4);
wim 1:00053cb70ac5 30
wim 1:00053cb70ac5 31 // Host PC Communication channels
wim 1:00053cb70ac5 32 Serial pc(USBTX, USBRX); // tx, rx
wim 1:00053cb70ac5 33
wim 1:00053cb70ac5 34 // Instantiate OLED
wim 1:00053cb70ac5 35 SSD1308 oled = SSD1308(i2c, SSD1308_SA0);
wim 1:00053cb70ac5 36
wim 1:00053cb70ac5 37 void show_menu() {
wim 3:1337e3d65ed0 38 pc.printf("0: Exit\r");
wim 3:1337e3d65ed0 39 pc.printf("1: Show Menu\r");
wim 3:1337e3d65ed0 40 pc.printf("2: Send Message\r");
wim 3:1337e3d65ed0 41 pc.printf("3: Fill Display\r");
wim 3:1337e3d65ed0 42 pc.printf("4: Display cleared\r");
wim 3:1337e3d65ed0 43 pc.printf("5: Display off\r");
wim 3:1337e3d65ed0 44 pc.printf("6: Display on\r");
wim 3:1337e3d65ed0 45 pc.printf("7: Display Invert\r");
wim 3:1337e3d65ed0 46 pc.printf("8: Display Normal\r");
wim 3:1337e3d65ed0 47 pc.printf("9: Display Bitmap\r");
wim 3:1337e3d65ed0 48 pc.printf("A: Brightness Ramp\r");
wim 3:1337e3d65ed0 49 pc.printf("B: Send Inverted Message\r");
wim 3:1337e3d65ed0 50 pc.printf("C: Flip and Mirror\r");
wim 3:1337e3d65ed0 51 pc.printf("D: Blink\r");
wim 3:1337e3d65ed0 52 pc.printf("E: Big Chars\r");
wim 5:dff410a009c5 53 pc.printf("F: Progress Scale\r");
wim 6:44256b0b5d18 54 pc.printf("G: Scroll\r");
wim 6:44256b0b5d18 55 pc.printf("H: Hor Scroll\r");
wim 6:44256b0b5d18 56 pc.printf("V: Ver and Hor Scroll\r");
wim 1:00053cb70ac5 57 // pc.printf("\n\r");
wim 1:00053cb70ac5 58
wim 1:00053cb70ac5 59 }
wim 1:00053cb70ac5 60
wim 1:00053cb70ac5 61
wim 1:00053cb70ac5 62 void oled_Test() {
wim 1:00053cb70ac5 63 pc.printf("OLED test start\r");
wim 1:00053cb70ac5 64
wim 6:44256b0b5d18 65 // oled.writeString(0, 0, 13, "Hello World !");
wim 6:44256b0b5d18 66 oled.writeString(0, 0, "Hello World !");
wim 6:44256b0b5d18 67 pc.printf("Printed something\r");
wim 1:00053cb70ac5 68 wait(3);
wim 1:00053cb70ac5 69
wim 6:44256b0b5d18 70 // oled.writeString(1, 0, 8, "baz quux");
wim 6:44256b0b5d18 71 oled.writeString(1, 0, "baz quux");
wim 6:44256b0b5d18 72 pc.printf("Printed something\r");
wim 1:00053cb70ac5 73 wait(3);
wim 1:00053cb70ac5 74
wim 1:00053cb70ac5 75 // oled.writeString(4, 0, 272, "a long, rather lengthy, extended string passage thing, eh, that just goes on, and on, and on, and on, and on, and on, and on, yes, further, continuing, extending, expanding beyond all reason or sanity!!!!! and yet, there's more! so much more! for ever and ever, oh yeah");
wim 6:44256b0b5d18 76 // pc.printf("Printed something\r");
wim 1:00053cb70ac5 77 // wait(3);
wim 1:00053cb70ac5 78
wim 1:00053cb70ac5 79 oled.fillDisplay(0xAA);
wim 6:44256b0b5d18 80 pc.printf("Display filled\r");
wim 1:00053cb70ac5 81 wait(3);
wim 1:00053cb70ac5 82
wim 1:00053cb70ac5 83 oled.setDisplayOff();
wim 6:44256b0b5d18 84 pc.printf("Display off\r");
wim 1:00053cb70ac5 85 wait(0.5);
wim 1:00053cb70ac5 86
wim 1:00053cb70ac5 87 oled.setDisplayOn();
wim 6:44256b0b5d18 88 pc.printf("Display on\r");
wim 1:00053cb70ac5 89 wait(0.5);
wim 1:00053cb70ac5 90
wim 1:00053cb70ac5 91 oled.clearDisplay();
wim 6:44256b0b5d18 92 pc.printf("Display cleared\r");
wim 1:00053cb70ac5 93 wait(0.5);
wim 1:00053cb70ac5 94
wim 6:44256b0b5d18 95 // oled.writeString(0, 0, 11, "Bye World !");
wim 6:44256b0b5d18 96 oled.writeString(0, 0, "Bye World !");
wim 6:44256b0b5d18 97 pc.printf("Printed something\r");
wim 1:00053cb70ac5 98 wait(3);
wim 1:00053cb70ac5 99
wim 6:44256b0b5d18 100 pc.printf("OLED test done\r");
wim 1:00053cb70ac5 101 }
wim 1:00053cb70ac5 102
wim 1:00053cb70ac5 103 // Variables for Heartbeat and Status monitoring
wim 1:00053cb70ac5 104 Ticker heartbeat;
wim 1:00053cb70ac5 105 bool heartbeatflag=false;
wim 1:00053cb70ac5 106
wim 1:00053cb70ac5 107 // Local functions
wim 1:00053cb70ac5 108 void clear_screen() {
wim 1:00053cb70ac5 109 //ANSI Terminal Commands
wim 1:00053cb70ac5 110 pc.printf("\x1B[2J");
wim 1:00053cb70ac5 111 pc.printf("\x1B[H");
wim 1:00053cb70ac5 112 }
wim 1:00053cb70ac5 113
wim 1:00053cb70ac5 114
wim 1:00053cb70ac5 115 void init_interfaces() {
wim 1:00053cb70ac5 116 // Init Host PC communication, default is 9600
wim 1:00053cb70ac5 117 pc.baud(D_BAUDRATE);
wim 1:00053cb70ac5 118
wim 1:00053cb70ac5 119 // Init I/F hardware
wim 1:00053cb70ac5 120 // i2c.frequency(100000);
wim 1:00053cb70ac5 121 i2c.frequency(400000); // according to the spec the max bitrate for the SSD1308 is 400 kbit/s
wim 1:00053cb70ac5 122 }
wim 1:00053cb70ac5 123
wim 1:00053cb70ac5 124
wim 1:00053cb70ac5 125 // Heartbeat monitor
wim 1:00053cb70ac5 126 void pulse() {
wim 1:00053cb70ac5 127 heartbeatLED = !heartbeatLED;
wim 1:00053cb70ac5 128 }
wim 1:00053cb70ac5 129
wim 1:00053cb70ac5 130 void heartbeat_start() {
wim 1:00053cb70ac5 131 heartbeat.attach(&pulse, 0.5);
wim 1:00053cb70ac5 132 }
wim 1:00053cb70ac5 133
wim 1:00053cb70ac5 134 void heartbeat_stop() {
wim 1:00053cb70ac5 135 heartbeat.detach();
wim 1:00053cb70ac5 136 }
wim 1:00053cb70ac5 137
wim 1:00053cb70ac5 138
wim 1:00053cb70ac5 139 int main() {
wim 1:00053cb70ac5 140 bool running=true;
wim 2:d86478c0f5da 141 bool left = true;
wim 2:d86478c0f5da 142 bool down = true;
wim 2:d86478c0f5da 143
wim 1:00053cb70ac5 144 char command;
wim 1:00053cb70ac5 145
wim 1:00053cb70ac5 146 init_interfaces();
wim 1:00053cb70ac5 147
wim 1:00053cb70ac5 148 heartbeat_start();
wim 1:00053cb70ac5 149
wim 1:00053cb70ac5 150 clear_screen();
wim 1:00053cb70ac5 151
wim 6:44256b0b5d18 152 pc.printf("Hello World!\r");
wim 1:00053cb70ac5 153
wim 1:00053cb70ac5 154 #if(0)
wim 1:00053cb70ac5 155 // Quick test
wim 1:00053cb70ac5 156 oled_Test();
wim 1:00053cb70ac5 157
wim 1:00053cb70ac5 158 while(1) {
wim 1:00053cb70ac5 159 myled1 = 1;
wim 1:00053cb70ac5 160 wait(0.2);
wim 1:00053cb70ac5 161
wim 1:00053cb70ac5 162 myled1 = 0;
wim 1:00053cb70ac5 163 wait(0.2);
wim 1:00053cb70ac5 164 pc.printf("*");
wim 1:00053cb70ac5 165 }
wim 1:00053cb70ac5 166 #else
wim 1:00053cb70ac5 167 // Interactive Test
wim 1:00053cb70ac5 168 show_menu();
wim 1:00053cb70ac5 169
wim 1:00053cb70ac5 170 while(running) {
wim 1:00053cb70ac5 171
wim 1:00053cb70ac5 172 if(pc.readable()) {
wim 1:00053cb70ac5 173 command = pc.getc();
wim 3:1337e3d65ed0 174 //pc.printf("command= %c \n\r", command);
wim 3:1337e3d65ed0 175 pc.printf("\r");
wim 3:1337e3d65ed0 176
wim 1:00053cb70ac5 177 switch (command) {
wim 1:00053cb70ac5 178 case '0' :
wim 6:44256b0b5d18 179 pc.printf("Done\r");
wim 1:00053cb70ac5 180 running = false;
wim 1:00053cb70ac5 181 break;
wim 1:00053cb70ac5 182
wim 1:00053cb70ac5 183 case '1' :
wim 1:00053cb70ac5 184 show_menu();
wim 1:00053cb70ac5 185 break;
wim 1:00053cb70ac5 186
wim 1:00053cb70ac5 187 case '2' :
wim 6:44256b0b5d18 188 pc.printf("Hello World!\r");
wim 6:44256b0b5d18 189 oled.writeString(0, 0, "Hello World !");
wim 1:00053cb70ac5 190 break;
wim 1:00053cb70ac5 191
wim 1:00053cb70ac5 192 case '3' :
wim 6:44256b0b5d18 193 pc.printf("Fill part of Display 0xA5\r");
wim 3:1337e3d65ed0 194 // oled.fillDisplay(0xA5);
wim 3:1337e3d65ed0 195
wim 3:1337e3d65ed0 196 oled.fillDisplay(0xA5, 2, 5, 0, 63);
wim 1:00053cb70ac5 197 break;
wim 1:00053cb70ac5 198
wim 1:00053cb70ac5 199 case '4' :
wim 6:44256b0b5d18 200 pc.printf("Display cleared\r");
wim 1:00053cb70ac5 201 oled.clearDisplay();
wim 1:00053cb70ac5 202 break;
wim 1:00053cb70ac5 203
wim 1:00053cb70ac5 204 case '5' :
wim 6:44256b0b5d18 205 pc.printf("Display off\r");
wim 1:00053cb70ac5 206 oled.setDisplayOff();
wim 1:00053cb70ac5 207 break;
wim 1:00053cb70ac5 208 case '6' :
wim 6:44256b0b5d18 209 pc.printf("Display on\r");
wim 1:00053cb70ac5 210 oled.setDisplayOn();
wim 1:00053cb70ac5 211 break;
wim 1:00053cb70ac5 212
wim 1:00053cb70ac5 213 case '7' :
wim 6:44256b0b5d18 214 pc.printf("Display Invert\r");
wim 1:00053cb70ac5 215 oled.setDisplayInverse();
wim 1:00053cb70ac5 216 break;
wim 1:00053cb70ac5 217
wim 1:00053cb70ac5 218 case '8' :
wim 6:44256b0b5d18 219 pc.printf("Display Normal\r");
wim 1:00053cb70ac5 220 oled.setDisplayNormal();
wim 1:00053cb70ac5 221 break;
wim 1:00053cb70ac5 222
wim 1:00053cb70ac5 223 case '9' :
wim 6:44256b0b5d18 224 pc.printf("Display bitmap\r");
wim 3:1337e3d65ed0 225 oled.writeBitmap((uint8_t*) mbed_logo);
wim 3:1337e3d65ed0 226
wim 1:00053cb70ac5 227 break;
wim 1:00053cb70ac5 228
wim 1:00053cb70ac5 229 case 'A' :
wim 6:44256b0b5d18 230 pc.printf("Brightness Ramp Down\r");
wim 3:1337e3d65ed0 231 for (int contrast=0x7F; contrast >= 0x10; contrast--) {
wim 2:d86478c0f5da 232 oled.setContrastControl(contrast);
wim 2:d86478c0f5da 233 wait(0.05);
wim 2:d86478c0f5da 234 }
wim 2:d86478c0f5da 235
wim 2:d86478c0f5da 236 wait(1);
wim 3:1337e3d65ed0 237
wim 6:44256b0b5d18 238 pc.printf("Brightness Ramp Up\r");
wim 3:1337e3d65ed0 239 for (int contrast=0x10; contrast <= 0x7F; contrast++) {
wim 2:d86478c0f5da 240 oled.setContrastControl(contrast);
wim 2:d86478c0f5da 241 wait(0.05);
wim 2:d86478c0f5da 242 }
wim 2:d86478c0f5da 243
wim 6:44256b0b5d18 244 pc.printf("Brightness Ramp Done\r");
wim 3:1337e3d65ed0 245
wim 1:00053cb70ac5 246 break;
wim 1:00053cb70ac5 247
wim 1:00053cb70ac5 248 case 'B' :
wim 6:44256b0b5d18 249 pc.printf("Send Inverted Message\r");
wim 3:1337e3d65ed0 250 oled.setInverted(true);
wim 6:44256b0b5d18 251 // oled.writeString(0, 0, 13, "Hello World !");
wim 6:44256b0b5d18 252 oled.writeString(0, 0, "Hello World !");
wim 3:1337e3d65ed0 253 oled.setInverted(false);
wim 3:1337e3d65ed0 254
wim 3:1337e3d65ed0 255 oled.printf(" Result is %d", 12345);
wim 3:1337e3d65ed0 256
wim 2:d86478c0f5da 257 break;
wim 2:d86478c0f5da 258
wim 2:d86478c0f5da 259 case 'C' :
wim 6:44256b0b5d18 260 pc.printf("Flip and Mirror (Rewrite display to show horizontal effect)\r");
wim 2:d86478c0f5da 261 left = !left;
wim 2:d86478c0f5da 262 down = !down;
wim 2:d86478c0f5da 263 oled.setDisplayFlip(left, down);
wim 3:1337e3d65ed0 264 break;
wim 3:1337e3d65ed0 265
wim 3:1337e3d65ed0 266 case 'D' :
wim 6:44256b0b5d18 267 pc.printf("D: Blink and Fade (not supported)\r");
wim 3:1337e3d65ed0 268
wim 3:1337e3d65ed0 269 // oled.setDisplayBlink(true);
wim 3:1337e3d65ed0 270 // wait(4);
wim 3:1337e3d65ed0 271 // oled.setDisplayBlink(false);
wim 3:1337e3d65ed0 272
wim 3:1337e3d65ed0 273 oled.setDisplayFade(true);
wim 3:1337e3d65ed0 274 wait(4);
wim 3:1337e3d65ed0 275 oled.setDisplayFade(false);
wim 3:1337e3d65ed0 276
wim 6:44256b0b5d18 277 pc.printf("D: Blink done\r");
wim 6:44256b0b5d18 278 break;
wim 3:1337e3d65ed0 279
wim 3:1337e3d65ed0 280 case 'E' :
wim 6:44256b0b5d18 281 pc.printf("E: Big Chars\r");
wim 3:1337e3d65ed0 282
wim 3:1337e3d65ed0 283 oled.writeBigChar(0, 0, '+');
wim 3:1337e3d65ed0 284 oled.writeBigChar(0, 16, '7');
wim 3:1337e3d65ed0 285 oled.writeBigChar(0, 32, '8');
wim 3:1337e3d65ed0 286 oled.writeBigChar(0, 48, '9');
wim 3:1337e3d65ed0 287
wim 6:44256b0b5d18 288 pc.printf("E: Big Chars done\r");
wim 3:1337e3d65ed0 289 break;
wim 5:dff410a009c5 290
wim 5:dff410a009c5 291 case 'F' :
wim 6:44256b0b5d18 292 pc.printf("F: Progress Scale\r");
wim 5:dff410a009c5 293
wim 5:dff410a009c5 294 for (int percentage=0; percentage <= 100; percentage++) {
wim 5:dff410a009c5 295 oled.writeProgressBar(2, 0, percentage);
wim 6:44256b0b5d18 296 oled.printf(" %3d%%", percentage);
wim 5:dff410a009c5 297
wim 5:dff410a009c5 298 oled.writeProgressBar(4, 0, 100 - percentage);
wim 6:44256b0b5d18 299 oled.printf(" %3d%%", 100 - percentage);
wim 6:44256b0b5d18 300
wim 6:44256b0b5d18 301 oled.writeLevelBar(6, 0, percentage);
wim 6:44256b0b5d18 302 oled.printf(" %3dmV", percentage);
wim 6:44256b0b5d18 303
wim 5:dff410a009c5 304 wait(0.05);
wim 5:dff410a009c5 305 }
wim 6:44256b0b5d18 306
wim 6:44256b0b5d18 307 pc.printf("F: Progress Scale done\r");
wim 6:44256b0b5d18 308 break;
wim 6:44256b0b5d18 309
wim 6:44256b0b5d18 310 case 'G' :
wim 6:44256b0b5d18 311 pc.printf("G: Scroll\r");
wim 5:dff410a009c5 312
wim 6:44256b0b5d18 313 for (int line=0; line < ROWS; line++) {
wim 6:44256b0b5d18 314 oled.setDisplayStartLine(line);
wim 6:44256b0b5d18 315 wait(0.05);
wim 6:44256b0b5d18 316 }
wim 6:44256b0b5d18 317
wim 6:44256b0b5d18 318 oled.setDisplayStartLine(0);
wim 6:44256b0b5d18 319
wim 6:44256b0b5d18 320 pc.printf("G: Scroll done\r");
wim 5:dff410a009c5 321 break;
wim 5:dff410a009c5 322
wim 5:dff410a009c5 323
wim 6:44256b0b5d18 324 case 'H' :
wim 6:44256b0b5d18 325 // pc.printf("H: Hor Scroll\r");
wim 6:44256b0b5d18 326 pc.printf("H: Hor Scroll (Page 0-3)\r");
wim 6:44256b0b5d18 327 // oled.setContinuousHorizontalScroll(true, PAGE0, PAGE7, SCROLL_INTERVAL_25_FRAMES);
wim 6:44256b0b5d18 328 oled.setContinuousHorizontalScroll(true, PAGE0, PAGE3, SCROLL_INTERVAL_25_FRAMES);
wim 6:44256b0b5d18 329 oled.setDisplayScroll(true);
wim 6:44256b0b5d18 330
wim 6:44256b0b5d18 331 wait(5);
wim 6:44256b0b5d18 332
wim 6:44256b0b5d18 333 oled.setDisplayScroll(false);
wim 6:44256b0b5d18 334
wim 6:44256b0b5d18 335 pc.printf("H: Hor Scroll done\r");
wim 6:44256b0b5d18 336 break;
wim 6:44256b0b5d18 337
wim 6:44256b0b5d18 338
wim 6:44256b0b5d18 339 case 'V' :
wim 6:44256b0b5d18 340 pc.printf("V: Ver and Hor Scroll (Page 0-7)\r");
wim 6:44256b0b5d18 341
wim 6:44256b0b5d18 342
wim 6:44256b0b5d18 343 oled.setContinuousVerticalAndHorizontalScroll(true, PAGE0, PAGE7, 0x01, SCROLL_INTERVAL_25_FRAMES);
wim 6:44256b0b5d18 344 oled.setVerticalScrollArea(20, 20);
wim 6:44256b0b5d18 345
wim 6:44256b0b5d18 346 oled.setDisplayScroll(true);
wim 6:44256b0b5d18 347
wim 6:44256b0b5d18 348
wim 6:44256b0b5d18 349 wait(5);
wim 6:44256b0b5d18 350
wim 6:44256b0b5d18 351 oled.setDisplayScroll(false);
wim 6:44256b0b5d18 352
wim 6:44256b0b5d18 353 pc.printf("V: Ver and Hor Scroll done\r");
wim 6:44256b0b5d18 354 break;
wim 6:44256b0b5d18 355
wim 6:44256b0b5d18 356
wim 1:00053cb70ac5 357 } //switch
wim 1:00053cb70ac5 358 }//if
wim 1:00053cb70ac5 359 }//while
wim 1:00053cb70ac5 360 #endif
wim 1:00053cb70ac5 361
wim 1:00053cb70ac5 362 pc.printf("Bye World!\n\r");
wim 1:00053cb70ac5 363 }//main
wim 1:00053cb70ac5 364