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:
Sat Jun 30 14:44:39 2012 +0000
Revision:
1:00053cb70ac5
Parent:
0:2ded56b8407d
Child:
2:d86478c0f5da
First tested 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 1:00053cb70ac5 49 // pc.printf("A: \n\r");
wim 1:00053cb70ac5 50 // pc.printf("B: \n\r");
wim 1:00053cb70ac5 51 // pc.printf("C: \n\r");
wim 1:00053cb70ac5 52 // pc.printf("D: \n\r");
wim 1:00053cb70ac5 53 // pc.printf("E: \n\r");
wim 1:00053cb70ac5 54 // pc.printf("F: \n\r");
wim 1:00053cb70ac5 55 // pc.printf("\n\r");
wim 1:00053cb70ac5 56
wim 1:00053cb70ac5 57 }
wim 1:00053cb70ac5 58
wim 1:00053cb70ac5 59
wim 1:00053cb70ac5 60 void oled_Test() {
wim 1:00053cb70ac5 61 pc.printf("OLED test start\r");
wim 1:00053cb70ac5 62
wim 1:00053cb70ac5 63 oled.writeString(0, 0, 13, "Hello World !");
wim 1:00053cb70ac5 64 pc.printf("Printed something\r\n");
wim 1:00053cb70ac5 65 wait(3);
wim 1:00053cb70ac5 66
wim 1:00053cb70ac5 67 oled.writeString(1, 0, 8, "baz quux");
wim 1:00053cb70ac5 68 pc.printf("Printed something\r\n");
wim 1:00053cb70ac5 69 wait(3);
wim 1:00053cb70ac5 70
wim 1:00053cb70ac5 71 // 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 72 // pc.printf("Printed something\r\n");
wim 1:00053cb70ac5 73 // wait(3);
wim 1:00053cb70ac5 74
wim 1:00053cb70ac5 75 oled.fillDisplay(0xAA);
wim 1:00053cb70ac5 76 pc.printf("Display filled\r\n");
wim 1:00053cb70ac5 77 wait(3);
wim 1:00053cb70ac5 78
wim 1:00053cb70ac5 79 oled.setDisplayOff();
wim 1:00053cb70ac5 80 pc.printf("Display off\r\n");
wim 1:00053cb70ac5 81 wait(0.5);
wim 1:00053cb70ac5 82
wim 1:00053cb70ac5 83 oled.setDisplayOn();
wim 1:00053cb70ac5 84 pc.printf("Display on\r\n");
wim 1:00053cb70ac5 85 wait(0.5);
wim 1:00053cb70ac5 86
wim 1:00053cb70ac5 87 oled.clearDisplay();
wim 1:00053cb70ac5 88 pc.printf("Display cleared\r\n");
wim 1:00053cb70ac5 89 wait(0.5);
wim 1:00053cb70ac5 90
wim 1:00053cb70ac5 91 oled.writeString(0, 0, 11, "Bye World !");
wim 1:00053cb70ac5 92 pc.printf("Printed something\r\n");
wim 1:00053cb70ac5 93 wait(3);
wim 1:00053cb70ac5 94
wim 1:00053cb70ac5 95 pc.printf("OLED test done\r\n");
wim 1:00053cb70ac5 96 }
wim 1:00053cb70ac5 97
wim 1:00053cb70ac5 98 // Variables for Heartbeat and Status monitoring
wim 1:00053cb70ac5 99 Ticker heartbeat;
wim 1:00053cb70ac5 100 bool heartbeatflag=false;
wim 1:00053cb70ac5 101
wim 1:00053cb70ac5 102 // Local functions
wim 1:00053cb70ac5 103 void clear_screen() {
wim 1:00053cb70ac5 104 //ANSI Terminal Commands
wim 1:00053cb70ac5 105 pc.printf("\x1B[2J");
wim 1:00053cb70ac5 106 pc.printf("\x1B[H");
wim 1:00053cb70ac5 107 }
wim 1:00053cb70ac5 108
wim 1:00053cb70ac5 109
wim 1:00053cb70ac5 110 void init_interfaces() {
wim 1:00053cb70ac5 111 // Init Host PC communication, default is 9600
wim 1:00053cb70ac5 112 pc.baud(D_BAUDRATE);
wim 1:00053cb70ac5 113
wim 1:00053cb70ac5 114 // Init I/F hardware
wim 1:00053cb70ac5 115 // i2c.frequency(100000);
wim 1:00053cb70ac5 116 i2c.frequency(400000); // according to the spec the max bitrate for the SSD1308 is 400 kbit/s
wim 1:00053cb70ac5 117 }
wim 1:00053cb70ac5 118
wim 1:00053cb70ac5 119
wim 1:00053cb70ac5 120 // Heartbeat monitor
wim 1:00053cb70ac5 121 void pulse() {
wim 1:00053cb70ac5 122 heartbeatLED = !heartbeatLED;
wim 1:00053cb70ac5 123 }
wim 1:00053cb70ac5 124
wim 1:00053cb70ac5 125 void heartbeat_start() {
wim 1:00053cb70ac5 126 heartbeat.attach(&pulse, 0.5);
wim 1:00053cb70ac5 127 }
wim 1:00053cb70ac5 128
wim 1:00053cb70ac5 129 void heartbeat_stop() {
wim 1:00053cb70ac5 130 heartbeat.detach();
wim 1:00053cb70ac5 131 }
wim 1:00053cb70ac5 132
wim 1:00053cb70ac5 133
wim 1:00053cb70ac5 134 int main() {
wim 1:00053cb70ac5 135 bool running=true;
wim 1:00053cb70ac5 136 char command;
wim 1:00053cb70ac5 137
wim 1:00053cb70ac5 138 init_interfaces();
wim 1:00053cb70ac5 139
wim 1:00053cb70ac5 140 heartbeat_start();
wim 1:00053cb70ac5 141
wim 1:00053cb70ac5 142 clear_screen();
wim 1:00053cb70ac5 143
wim 1:00053cb70ac5 144 pc.printf("Hello World!\n\r");
wim 1:00053cb70ac5 145
wim 1:00053cb70ac5 146 #if(0)
wim 1:00053cb70ac5 147 // Quick test
wim 1:00053cb70ac5 148 oled_Test();
wim 1:00053cb70ac5 149
wim 1:00053cb70ac5 150 while(1) {
wim 1:00053cb70ac5 151 myled1 = 1;
wim 1:00053cb70ac5 152 wait(0.2);
wim 1:00053cb70ac5 153
wim 1:00053cb70ac5 154 myled1 = 0;
wim 1:00053cb70ac5 155 wait(0.2);
wim 1:00053cb70ac5 156 pc.printf("*");
wim 1:00053cb70ac5 157 }
wim 1:00053cb70ac5 158 #else
wim 1:00053cb70ac5 159 // Interactive Test
wim 1:00053cb70ac5 160 show_menu();
wim 1:00053cb70ac5 161
wim 1:00053cb70ac5 162 while(running) {
wim 1:00053cb70ac5 163
wim 1:00053cb70ac5 164 if(pc.readable()) {
wim 1:00053cb70ac5 165 command = pc.getc();
wim 1:00053cb70ac5 166 pc.printf("command= %c \n\r", command);
wim 1:00053cb70ac5 167
wim 1:00053cb70ac5 168 switch (command) {
wim 1:00053cb70ac5 169 case '0' :
wim 1:00053cb70ac5 170 pc.printf("Done\n\r");
wim 1:00053cb70ac5 171 running = false;
wim 1:00053cb70ac5 172 break;
wim 1:00053cb70ac5 173
wim 1:00053cb70ac5 174 case '1' :
wim 1:00053cb70ac5 175 show_menu();
wim 1:00053cb70ac5 176 break;
wim 1:00053cb70ac5 177
wim 1:00053cb70ac5 178 case '2' :
wim 1:00053cb70ac5 179 pc.printf("Hello World!\n\r");
wim 1:00053cb70ac5 180 oled.writeString(0, 0, 13, "Hello World !");
wim 1:00053cb70ac5 181 break;
wim 1:00053cb70ac5 182
wim 1:00053cb70ac5 183 case '3' :
wim 1:00053cb70ac5 184 pc.printf("Fill Display 0xA5\n\r");
wim 1:00053cb70ac5 185 oled.fillDisplay(0xA5);
wim 1:00053cb70ac5 186 break;
wim 1:00053cb70ac5 187
wim 1:00053cb70ac5 188 case '4' :
wim 1:00053cb70ac5 189 pc.printf("Display cleared\r\n");
wim 1:00053cb70ac5 190 oled.clearDisplay();
wim 1:00053cb70ac5 191 break;
wim 1:00053cb70ac5 192
wim 1:00053cb70ac5 193 case '5' :
wim 1:00053cb70ac5 194 pc.printf("Display off\r\n");
wim 1:00053cb70ac5 195 oled.setDisplayOff();
wim 1:00053cb70ac5 196 break;
wim 1:00053cb70ac5 197 case '6' :
wim 1:00053cb70ac5 198 pc.printf("Display on\r\n");
wim 1:00053cb70ac5 199 oled.setDisplayOn();
wim 1:00053cb70ac5 200 break;
wim 1:00053cb70ac5 201
wim 1:00053cb70ac5 202 case '7' :
wim 1:00053cb70ac5 203 pc.printf("Display Invert\r\n");
wim 1:00053cb70ac5 204 oled.setDisplayInverse();
wim 1:00053cb70ac5 205 break;
wim 1:00053cb70ac5 206
wim 1:00053cb70ac5 207 case '8' :
wim 1:00053cb70ac5 208 pc.printf("Display Normal\r\n");
wim 1:00053cb70ac5 209 oled.setDisplayNormal();
wim 1:00053cb70ac5 210 break;
wim 1:00053cb70ac5 211
wim 1:00053cb70ac5 212 case '9' :
wim 1:00053cb70ac5 213 pc.printf("Display bitmap\r\n");
wim 1:00053cb70ac5 214 oled.writeBitmap((PAGES*COLUMNS), (uint8_t*) mbed_logo);
wim 1:00053cb70ac5 215
wim 1:00053cb70ac5 216 break;
wim 1:00053cb70ac5 217
wim 1:00053cb70ac5 218 case 'A' :
wim 1:00053cb70ac5 219
wim 1:00053cb70ac5 220 break;
wim 1:00053cb70ac5 221
wim 1:00053cb70ac5 222 case 'B' :
wim 1:00053cb70ac5 223
wim 1:00053cb70ac5 224 break;
wim 1:00053cb70ac5 225
wim 1:00053cb70ac5 226 } //switch
wim 1:00053cb70ac5 227 }//if
wim 1:00053cb70ac5 228 }//while
wim 1:00053cb70ac5 229 #endif
wim 1:00053cb70ac5 230
wim 1:00053cb70ac5 231 pc.printf("Bye World!\n\r");
wim 1:00053cb70ac5 232 }//main
wim 1:00053cb70ac5 233