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:
Mon Jul 09 20:46:27 2012 +0000
Revision:
2:d86478c0f5da
Parent:
1:00053cb70ac5
Child:
3:1337e3d65ed0
Temp version

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 "FixedWidthFont.h"
wim 1:00053cb70ac5 11 #include "mbed_logo.h"
wim 1:00053cb70ac5 12 #include "SSD1308.h"
wim 1:00053cb70ac5 13
wim 1:00053cb70ac5 14
wim 1:00053cb70ac5 15 //Pin Defines for I2C Bus
wim 1:00053cb70ac5 16 //#define D_SDA p9
wim 1:00053cb70ac5 17 //#define D_SCL p10
wim 1:00053cb70ac5 18 #define D_SDA p28
wim 1:00053cb70ac5 19 #define D_SCL p27
wim 1:00053cb70ac5 20 I2C i2c(D_SDA, D_SCL);
wim 1:00053cb70ac5 21
wim 1:00053cb70ac5 22 //Host PC Baudrate (Virtual Com Port on USB)
wim 1:00053cb70ac5 23 #define D_BAUDRATE 9600
wim 1:00053cb70ac5 24 //#define D_BAUDRATE 57600
wim 1:00053cb70ac5 25
wim 1:00053cb70ac5 26 // mbed Interface Hardware definitions
wim 1:00053cb70ac5 27 DigitalOut myled1(LED1);
wim 1:00053cb70ac5 28 DigitalOut myled2(LED2);
wim 1:00053cb70ac5 29 DigitalOut myled3(LED3);
wim 1:00053cb70ac5 30 DigitalOut heartbeatLED(LED4);
wim 1:00053cb70ac5 31
wim 1:00053cb70ac5 32 // Host PC Communication channels
wim 1:00053cb70ac5 33 Serial pc(USBTX, USBRX); // tx, rx
wim 1:00053cb70ac5 34
wim 1:00053cb70ac5 35 // Instantiate OLED
wim 1:00053cb70ac5 36 SSD1308 oled = SSD1308(i2c, SSD1308_SA0);
wim 1:00053cb70ac5 37
wim 1:00053cb70ac5 38 void show_menu() {
wim 1:00053cb70ac5 39 pc.printf("0: Exit\n\r");
wim 1:00053cb70ac5 40 pc.printf("1: Show Menu\n\r");
wim 1:00053cb70ac5 41 pc.printf("2: Send Message\n\r");
wim 1:00053cb70ac5 42 pc.printf("3: Fill Display\n\r");
wim 1:00053cb70ac5 43 pc.printf("4: Display cleared\n\r");
wim 1:00053cb70ac5 44 pc.printf("5: Display off\n\r");
wim 1:00053cb70ac5 45 pc.printf("6: Display on\n\r");
wim 1:00053cb70ac5 46 pc.printf("7: Display Invert\n\r");
wim 1:00053cb70ac5 47 pc.printf("8: Display Normal\n\r");
wim 1:00053cb70ac5 48 pc.printf("9: Display Bitmap\n\r");
wim 2:d86478c0f5da 49 pc.printf("A: Brightness Ramp\n\r");
wim 2:d86478c0f5da 50 pc.printf("B: Send Inverted Message\n\r");
wim 2:d86478c0f5da 51 pc.printf("C: Flip and Mirror\n\r");
wim 2:d86478c0f5da 52
wim 1:00053cb70ac5 53 // pc.printf("D: \n\r");
wim 1:00053cb70ac5 54 // pc.printf("E: \n\r");
wim 1:00053cb70ac5 55 // pc.printf("F: \n\r");
wim 1:00053cb70ac5 56 // pc.printf("\n\r");
wim 1:00053cb70ac5 57
wim 1:00053cb70ac5 58 }
wim 1:00053cb70ac5 59
wim 1:00053cb70ac5 60
wim 1:00053cb70ac5 61 void oled_Test() {
wim 1:00053cb70ac5 62 pc.printf("OLED test start\r");
wim 1:00053cb70ac5 63
wim 1:00053cb70ac5 64 oled.writeString(0, 0, 13, "Hello World !");
wim 1:00053cb70ac5 65 pc.printf("Printed something\r\n");
wim 1:00053cb70ac5 66 wait(3);
wim 1:00053cb70ac5 67
wim 1:00053cb70ac5 68 oled.writeString(1, 0, 8, "baz quux");
wim 1:00053cb70ac5 69 pc.printf("Printed something\r\n");
wim 1:00053cb70ac5 70 wait(3);
wim 1:00053cb70ac5 71
wim 1:00053cb70ac5 72 // 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 1:00053cb70ac5 73 // pc.printf("Printed something\r\n");
wim 1:00053cb70ac5 74 // wait(3);
wim 1:00053cb70ac5 75
wim 1:00053cb70ac5 76 oled.fillDisplay(0xAA);
wim 1:00053cb70ac5 77 pc.printf("Display filled\r\n");
wim 1:00053cb70ac5 78 wait(3);
wim 1:00053cb70ac5 79
wim 1:00053cb70ac5 80 oled.setDisplayOff();
wim 1:00053cb70ac5 81 pc.printf("Display off\r\n");
wim 1:00053cb70ac5 82 wait(0.5);
wim 1:00053cb70ac5 83
wim 1:00053cb70ac5 84 oled.setDisplayOn();
wim 1:00053cb70ac5 85 pc.printf("Display on\r\n");
wim 1:00053cb70ac5 86 wait(0.5);
wim 1:00053cb70ac5 87
wim 1:00053cb70ac5 88 oled.clearDisplay();
wim 1:00053cb70ac5 89 pc.printf("Display cleared\r\n");
wim 1:00053cb70ac5 90 wait(0.5);
wim 1:00053cb70ac5 91
wim 1:00053cb70ac5 92 oled.writeString(0, 0, 11, "Bye World !");
wim 1:00053cb70ac5 93 pc.printf("Printed something\r\n");
wim 1:00053cb70ac5 94 wait(3);
wim 1:00053cb70ac5 95
wim 1:00053cb70ac5 96 pc.printf("OLED test done\r\n");
wim 1:00053cb70ac5 97 }
wim 1:00053cb70ac5 98
wim 1:00053cb70ac5 99 // Variables for Heartbeat and Status monitoring
wim 1:00053cb70ac5 100 Ticker heartbeat;
wim 1:00053cb70ac5 101 bool heartbeatflag=false;
wim 1:00053cb70ac5 102
wim 1:00053cb70ac5 103 // Local functions
wim 1:00053cb70ac5 104 void clear_screen() {
wim 1:00053cb70ac5 105 //ANSI Terminal Commands
wim 1:00053cb70ac5 106 pc.printf("\x1B[2J");
wim 1:00053cb70ac5 107 pc.printf("\x1B[H");
wim 1:00053cb70ac5 108 }
wim 1:00053cb70ac5 109
wim 1:00053cb70ac5 110
wim 1:00053cb70ac5 111 void init_interfaces() {
wim 1:00053cb70ac5 112 // Init Host PC communication, default is 9600
wim 1:00053cb70ac5 113 pc.baud(D_BAUDRATE);
wim 1:00053cb70ac5 114
wim 1:00053cb70ac5 115 // Init I/F hardware
wim 1:00053cb70ac5 116 // i2c.frequency(100000);
wim 1:00053cb70ac5 117 i2c.frequency(400000); // according to the spec the max bitrate for the SSD1308 is 400 kbit/s
wim 1:00053cb70ac5 118 }
wim 1:00053cb70ac5 119
wim 1:00053cb70ac5 120
wim 1:00053cb70ac5 121 // Heartbeat monitor
wim 1:00053cb70ac5 122 void pulse() {
wim 1:00053cb70ac5 123 heartbeatLED = !heartbeatLED;
wim 1:00053cb70ac5 124 }
wim 1:00053cb70ac5 125
wim 1:00053cb70ac5 126 void heartbeat_start() {
wim 1:00053cb70ac5 127 heartbeat.attach(&pulse, 0.5);
wim 1:00053cb70ac5 128 }
wim 1:00053cb70ac5 129
wim 1:00053cb70ac5 130 void heartbeat_stop() {
wim 1:00053cb70ac5 131 heartbeat.detach();
wim 1:00053cb70ac5 132 }
wim 1:00053cb70ac5 133
wim 1:00053cb70ac5 134
wim 1:00053cb70ac5 135 int main() {
wim 1:00053cb70ac5 136 bool running=true;
wim 2:d86478c0f5da 137 bool left = true;
wim 2:d86478c0f5da 138 bool down = true;
wim 2:d86478c0f5da 139
wim 1:00053cb70ac5 140 char command;
wim 1:00053cb70ac5 141
wim 1:00053cb70ac5 142 init_interfaces();
wim 1:00053cb70ac5 143
wim 1:00053cb70ac5 144 heartbeat_start();
wim 1:00053cb70ac5 145
wim 1:00053cb70ac5 146 clear_screen();
wim 1:00053cb70ac5 147
wim 1:00053cb70ac5 148 pc.printf("Hello World!\n\r");
wim 1:00053cb70ac5 149
wim 1:00053cb70ac5 150 #if(0)
wim 1:00053cb70ac5 151 // Quick test
wim 1:00053cb70ac5 152 oled_Test();
wim 1:00053cb70ac5 153
wim 1:00053cb70ac5 154 while(1) {
wim 1:00053cb70ac5 155 myled1 = 1;
wim 1:00053cb70ac5 156 wait(0.2);
wim 1:00053cb70ac5 157
wim 1:00053cb70ac5 158 myled1 = 0;
wim 1:00053cb70ac5 159 wait(0.2);
wim 1:00053cb70ac5 160 pc.printf("*");
wim 1:00053cb70ac5 161 }
wim 1:00053cb70ac5 162 #else
wim 1:00053cb70ac5 163 // Interactive Test
wim 1:00053cb70ac5 164 show_menu();
wim 1:00053cb70ac5 165
wim 1:00053cb70ac5 166 while(running) {
wim 1:00053cb70ac5 167
wim 1:00053cb70ac5 168 if(pc.readable()) {
wim 1:00053cb70ac5 169 command = pc.getc();
wim 1:00053cb70ac5 170 pc.printf("command= %c \n\r", command);
wim 1:00053cb70ac5 171
wim 1:00053cb70ac5 172 switch (command) {
wim 1:00053cb70ac5 173 case '0' :
wim 1:00053cb70ac5 174 pc.printf("Done\n\r");
wim 1:00053cb70ac5 175 running = false;
wim 1:00053cb70ac5 176 break;
wim 1:00053cb70ac5 177
wim 1:00053cb70ac5 178 case '1' :
wim 1:00053cb70ac5 179 show_menu();
wim 1:00053cb70ac5 180 break;
wim 1:00053cb70ac5 181
wim 1:00053cb70ac5 182 case '2' :
wim 1:00053cb70ac5 183 pc.printf("Hello World!\n\r");
wim 1:00053cb70ac5 184 oled.writeString(0, 0, 13, "Hello World !");
wim 1:00053cb70ac5 185 break;
wim 1:00053cb70ac5 186
wim 1:00053cb70ac5 187 case '3' :
wim 2:d86478c0f5da 188 pc.printf("Fill Display 0xAA\n\r");
wim 1:00053cb70ac5 189 oled.fillDisplay(0xA5);
wim 1:00053cb70ac5 190 break;
wim 1:00053cb70ac5 191
wim 1:00053cb70ac5 192 case '4' :
wim 1:00053cb70ac5 193 pc.printf("Display cleared\r\n");
wim 1:00053cb70ac5 194 oled.clearDisplay();
wim 1:00053cb70ac5 195 break;
wim 1:00053cb70ac5 196
wim 1:00053cb70ac5 197 case '5' :
wim 1:00053cb70ac5 198 pc.printf("Display off\r\n");
wim 1:00053cb70ac5 199 oled.setDisplayOff();
wim 1:00053cb70ac5 200 break;
wim 1:00053cb70ac5 201 case '6' :
wim 1:00053cb70ac5 202 pc.printf("Display on\r\n");
wim 1:00053cb70ac5 203 oled.setDisplayOn();
wim 1:00053cb70ac5 204 break;
wim 1:00053cb70ac5 205
wim 1:00053cb70ac5 206 case '7' :
wim 1:00053cb70ac5 207 pc.printf("Display Invert\r\n");
wim 1:00053cb70ac5 208 oled.setDisplayInverse();
wim 1:00053cb70ac5 209 break;
wim 1:00053cb70ac5 210
wim 1:00053cb70ac5 211 case '8' :
wim 1:00053cb70ac5 212 pc.printf("Display Normal\r\n");
wim 1:00053cb70ac5 213 oled.setDisplayNormal();
wim 1:00053cb70ac5 214 break;
wim 1:00053cb70ac5 215
wim 1:00053cb70ac5 216 case '9' :
wim 1:00053cb70ac5 217 pc.printf("Display bitmap\r\n");
wim 1:00053cb70ac5 218 oled.writeBitmap((PAGES*COLUMNS), (uint8_t*) mbed_logo);
wim 1:00053cb70ac5 219
wim 1:00053cb70ac5 220 break;
wim 1:00053cb70ac5 221
wim 1:00053cb70ac5 222 case 'A' :
wim 2:d86478c0f5da 223 pc.printf("Brightness Ramp Down\r\n");
wim 2:d86478c0f5da 224 for (int contrast=0x7F; contrast >= 0x00; contrast--) {
wim 2:d86478c0f5da 225 oled.setContrastControl(contrast);
wim 2:d86478c0f5da 226 wait(0.05);
wim 2:d86478c0f5da 227 }
wim 2:d86478c0f5da 228
wim 2:d86478c0f5da 229 wait(1);
wim 2:d86478c0f5da 230
wim 2:d86478c0f5da 231 pc.printf("Brightness Ramp Up\r\n");
wim 2:d86478c0f5da 232 for (int contrast=0x00; contrast <= 0x7F; contrast++) {
wim 2:d86478c0f5da 233 oled.setContrastControl(contrast);
wim 2:d86478c0f5da 234 wait(0.05);
wim 2:d86478c0f5da 235 }
wim 2:d86478c0f5da 236
wim 1:00053cb70ac5 237 break;
wim 1:00053cb70ac5 238
wim 1:00053cb70ac5 239 case 'B' :
wim 2:d86478c0f5da 240 pc.printf("Send Inverted Message\n\r");
wim 2:d86478c0f5da 241 oled.writeString(0, 0, 13, "Hello World !", true);
wim 2:d86478c0f5da 242 break;
wim 2:d86478c0f5da 243
wim 2:d86478c0f5da 244 case 'C' :
wim 2:d86478c0f5da 245 pc.printf("Flip and Mirror (Rewrite display to show horizontal effect)\n\r");
wim 2:d86478c0f5da 246 left = !left;
wim 2:d86478c0f5da 247 down = !down;
wim 2:d86478c0f5da 248 oled.setDisplayFlip(left, down);
wim 2:d86478c0f5da 249 break;
wim 1:00053cb70ac5 250
wim 1:00053cb70ac5 251 } //switch
wim 1:00053cb70ac5 252 }//if
wim 1:00053cb70ac5 253 }//while
wim 1:00053cb70ac5 254 #endif
wim 1:00053cb70ac5 255
wim 1:00053cb70ac5 256 pc.printf("Bye World!\n\r");
wim 1:00053cb70ac5 257 }//main
wim 1:00053cb70ac5 258