Demonstration of SSD1308 OLED driver library
Dependencies: mbed SSD1308_128x64_I2C
main.cpp
00001 /* mbed Seeed 128x64 OLED Test 00002 * http://www.seeedstudio.com/depot/grove-oled-display-12864-p-781.html?cPath=163_167 00003 * 00004 * Copyright (c) 2012 Wim Huiskamp 00005 * Released under the MIT License: http://mbed.org/license/mit 00006 * 00007 * version 0.2 Initial Release 00008 * version 0.3 2017 Fixed non-copyable issue (Thx kenjiArai) 00009 */ 00010 #include "mbed.h" 00011 #include "mbed_logo.h" 00012 #include "SSD1308.h" 00013 00014 #if defined(TARGET_LPC1768) 00015 //Pin Defines for I2C Bus 00016 //#define D_SDA p9 00017 //#define D_SCL p10 00018 #define D_SDA p28 00019 #define D_SCL p27 00020 #endif 00021 00022 #if defined(TARGET_NUCLEO_F401RE) 00023 #define D_SDA PB_9 00024 #define D_SCL PB_8 00025 #endif 00026 00027 #if defined(TARGET_KL25Z) 00028 // I2C for KL25Z 00029 #define D_SCL PTE1 00030 #define D_SDA PTE0 00031 #endif 00032 00033 I2C i2c(D_SDA, D_SCL); 00034 00035 //Host PC Baudrate (Virtual Com Port on USB) 00036 #define D_BAUDRATE 9600 00037 //#define D_BAUDRATE 57600 00038 00039 // mbed Interface Hardware definitions 00040 DigitalOut myled1(LED1); 00041 DigitalOut myled2(LED2); 00042 DigitalOut myled3(LED3); 00043 DigitalOut heartbeatLED(LED4); 00044 00045 // Host PC Communication channels 00046 Serial pc(USBTX, USBRX); // tx, rx 00047 00048 // Instantiate OLED 00049 SSD1308 oled = SSD1308(&i2c, SSD1308_SA0); 00050 00051 void show_menu() { 00052 pc.printf("0: Exit\r"); 00053 pc.printf("1: Show Menu\r"); 00054 pc.printf("2: Send Message\r"); 00055 pc.printf("3: Fill Display\r"); 00056 pc.printf("4: Display cleared\r"); 00057 pc.printf("5: Display off\r"); 00058 pc.printf("6: Display on\r"); 00059 pc.printf("7: Display Invert\r"); 00060 pc.printf("8: Display Normal\r"); 00061 pc.printf("9: Display Bitmap\r"); 00062 pc.printf("A: Brightness Ramp\r"); 00063 pc.printf("B: Send Inverted Message\r"); 00064 pc.printf("C: Flip and Mirror\r"); 00065 pc.printf("D: Blink\r"); 00066 pc.printf("E: Big Chars\r"); 00067 pc.printf("F: Progress Scale\r"); 00068 pc.printf("G: Scroll\r"); 00069 pc.printf("H: Hor Scroll\r"); 00070 pc.printf("V: Ver and Hor Scroll\r"); 00071 // pc.printf("\n\r"); 00072 00073 } 00074 00075 00076 void oled_Test() { 00077 pc.printf("OLED test start\r"); 00078 00079 #if defined(TARGET_LPC1768) 00080 pc.printf("\r\nHello World from LPC1768\r\n"); 00081 #endif 00082 #if defined(TARGET_KL25Z) 00083 pc.printf("\r\nHello World from KL25Z\r\n"); 00084 #endif 00085 #if defined(TARGET_LPC812) 00086 pc.printf("\r\nHello World from LPC812\r\n"); 00087 #endif 00088 #if defined(TARGET_LPC1549) 00089 pc.printf("Hello World from LPC1549\n\r"); 00090 #endif 00091 #if defined(TARGET_NUCLEO_F401RE) 00092 pc.printf("Hello World from ST32F401RE\n\r"); 00093 #endif 00094 #if defined(TARGET_NUCLEO_F103RB) 00095 pc.printf("Hello World from ST32F103RB\n\r"); 00096 #endif 00097 00098 00099 // oled.writeString(0, 0, 13, "Hello World !"); 00100 oled.writeString(0, 0, "Hello World !"); 00101 pc.printf("Printed something\r"); 00102 wait(3); 00103 00104 // oled.writeString(1, 0, 8, "baz quux"); 00105 oled.writeString(1, 0, "baz quux"); 00106 pc.printf("Printed something\r"); 00107 wait(3); 00108 00109 // 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"); 00110 // pc.printf("Printed something\r"); 00111 // wait(3); 00112 00113 oled.fillDisplay(0xAA); 00114 pc.printf("Display filled\r"); 00115 wait(3); 00116 00117 oled.setDisplayOff(); 00118 pc.printf("Display off\r"); 00119 wait(0.5); 00120 00121 oled.setDisplayOn(); 00122 pc.printf("Display on\r"); 00123 wait(0.5); 00124 00125 oled.clearDisplay(); 00126 pc.printf("Display cleared\r"); 00127 wait(0.5); 00128 00129 // oled.writeString(0, 0, 11, "Bye World !"); 00130 oled.writeString(0, 0, "Bye World !"); 00131 pc.printf("Printed something\r"); 00132 wait(3); 00133 00134 pc.printf("OLED test done\r"); 00135 } 00136 00137 // Variables for Heartbeat and Status monitoring 00138 Ticker heartbeat; 00139 bool heartbeatflag=false; 00140 00141 // Local functions 00142 void clear_screen() { 00143 //ANSI Terminal Commands 00144 pc.printf("\x1B[2J"); 00145 pc.printf("\x1B[H"); 00146 } 00147 00148 00149 void init_interfaces() { 00150 // Init Host PC communication, default is 9600 00151 pc.baud(D_BAUDRATE); 00152 00153 // Init I/F hardware 00154 // i2c.frequency(100000); 00155 i2c.frequency(400000); // according to the spec the max bitrate for the SSD1308 is 400 kbit/s 00156 } 00157 00158 00159 // Heartbeat monitor 00160 void pulse() { 00161 heartbeatLED = !heartbeatLED; 00162 } 00163 00164 void heartbeat_start() { 00165 heartbeat.attach(&pulse, 0.5); 00166 } 00167 00168 void heartbeat_stop() { 00169 heartbeat.detach(); 00170 } 00171 00172 00173 int main() { 00174 bool running=true; 00175 bool left = true; 00176 bool down = true; 00177 00178 char command; 00179 00180 init_interfaces(); 00181 00182 heartbeat_start(); 00183 00184 clear_screen(); 00185 00186 pc.printf("Hello World!\r"); 00187 00188 #if(0) 00189 // Quick test 00190 oled_Test(); 00191 00192 while(1) { 00193 myled1 = 1; 00194 wait(0.2); 00195 00196 myled1 = 0; 00197 wait(0.2); 00198 pc.printf("*"); 00199 } 00200 #else 00201 // Interactive Test 00202 show_menu(); 00203 00204 while(running) { 00205 00206 if(pc.readable()) { 00207 command = pc.getc(); 00208 //pc.printf("command= %c \n\r", command); 00209 pc.printf("\r"); 00210 00211 switch (command) { 00212 case '0' : 00213 pc.printf("Done\r"); 00214 running = false; 00215 break; 00216 00217 case '1' : 00218 show_menu(); 00219 break; 00220 00221 case '2' : 00222 pc.printf("Hello World!\r"); 00223 oled.writeString(0, 0, "Hello World !"); 00224 break; 00225 00226 case '3' : 00227 pc.printf("Fill part of Display 0xA5\r"); 00228 // oled.fillDisplay(0xA5); 00229 00230 oled.fillDisplay(0xA5, 2, 5, 0, 63); 00231 break; 00232 00233 case '4' : 00234 pc.printf("Display cleared\r"); 00235 oled.clearDisplay(); 00236 break; 00237 00238 case '5' : 00239 pc.printf("Display off\r"); 00240 oled.setDisplayOff(); 00241 break; 00242 case '6' : 00243 pc.printf("Display on\r"); 00244 oled.setDisplayOn(); 00245 break; 00246 00247 case '7' : 00248 pc.printf("Display Invert\r"); 00249 oled.setDisplayInverse(); 00250 break; 00251 00252 case '8' : 00253 pc.printf("Display Normal\r"); 00254 oled.setDisplayNormal(); 00255 break; 00256 00257 case '9' : 00258 pc.printf("Display bitmap\r"); 00259 oled.writeBitmap((uint8_t*) mbed_logo); 00260 00261 break; 00262 00263 case 'A' : 00264 pc.printf("Brightness Ramp Down\r"); 00265 for (int contrast=0x7F; contrast >= 0x10; contrast--) { 00266 oled.setContrastControl(contrast); 00267 wait(0.05); 00268 } 00269 00270 wait(1); 00271 00272 pc.printf("Brightness Ramp Up\r"); 00273 for (int contrast=0x10; contrast <= 0x7F; contrast++) { 00274 oled.setContrastControl(contrast); 00275 wait(0.05); 00276 } 00277 00278 pc.printf("Brightness Ramp Done\r"); 00279 00280 break; 00281 00282 case 'B' : 00283 pc.printf("Send Inverted Message\r"); 00284 oled.setInverted(true); 00285 // oled.writeString(0, 0, 13, "Hello World !"); 00286 oled.writeString(0, 0, "Hello World !"); 00287 oled.setInverted(false); 00288 00289 oled.printf(" Result is %d", 12345); 00290 00291 break; 00292 00293 case 'C' : 00294 pc.printf("Flip and Mirror (Rewrite display to show horizontal effect)\r"); 00295 left = !left; 00296 down = !down; 00297 oled.setDisplayFlip(left, down); 00298 break; 00299 00300 case 'D' : 00301 pc.printf("D: Blink and Fade (not supported)\r"); 00302 00303 // oled.setDisplayBlink(true); 00304 // wait(4); 00305 // oled.setDisplayBlink(false); 00306 00307 oled.setDisplayFade(true); 00308 wait(4); 00309 oled.setDisplayFade(false); 00310 00311 pc.printf("D: Blink done\r"); 00312 break; 00313 00314 case 'E' : 00315 pc.printf("E: Big Chars\r"); 00316 00317 oled.writeBigChar(0, 0, '+'); 00318 oled.writeBigChar(0, 16, '7'); 00319 oled.writeBigChar(0, 32, '8'); 00320 oled.writeBigChar(0, 48, '9'); 00321 00322 pc.printf("E: Big Chars done\r"); 00323 break; 00324 00325 case 'F' : 00326 pc.printf("F: Progress Scale\r"); 00327 00328 for (int percentage=0; percentage <= 100; percentage++) { 00329 oled.writeProgressBar(2, 0, percentage); 00330 oled.printf(" %3d%%", percentage); 00331 00332 oled.writeProgressBar(4, 0, 100 - percentage); 00333 oled.printf(" %3d%%", 100 - percentage); 00334 00335 oled.writeLevelBar(6, 0, percentage); 00336 oled.printf(" %3dmV", percentage); 00337 00338 wait(0.05); 00339 } 00340 00341 pc.printf("F: Progress Scale done\r"); 00342 break; 00343 00344 case 'G' : 00345 pc.printf("G: Scroll\r"); 00346 00347 for (int line=0; line < ROWS; line++) { 00348 oled.setDisplayStartLine(line); 00349 wait(0.05); 00350 } 00351 00352 oled.setDisplayStartLine(0); 00353 00354 pc.printf("G: Scroll done\r"); 00355 break; 00356 00357 00358 case 'H' : 00359 // pc.printf("H: Hor Scroll\r"); 00360 pc.printf("H: Hor Scroll (Page 0-3)\r"); 00361 // oled.setContinuousHorizontalScroll(true, PAGE0, PAGE7, SCROLL_INTERVAL_25_FRAMES); 00362 oled.setContinuousHorizontalScroll(true, PAGE0, PAGE3, SCROLL_INTERVAL_25_FRAMES); 00363 oled.setDisplayScroll(true); 00364 00365 wait(5); 00366 00367 oled.setDisplayScroll(false); 00368 00369 pc.printf("H: Hor Scroll done\r"); 00370 break; 00371 00372 00373 case 'V' : 00374 pc.printf("V: Ver and Hor Scroll (Page 0-7)\r"); 00375 00376 00377 oled.setContinuousVerticalAndHorizontalScroll(true, PAGE0, PAGE7, 0x01, SCROLL_INTERVAL_25_FRAMES); 00378 oled.setVerticalScrollArea(20, 20); 00379 00380 oled.setDisplayScroll(true); 00381 00382 00383 wait(5); 00384 00385 oled.setDisplayScroll(false); 00386 00387 pc.printf("V: Ver and Hor Scroll done\r"); 00388 break; 00389 00390 00391 } //switch 00392 }//if 00393 }//while 00394 #endif 00395 00396 pc.printf("Bye World!\n\r"); 00397 }//main 00398
Generated on Wed Jul 13 2022 23:37:36 by 1.7.2