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 Jun 19 20:00:10 2012 +0000
Revision:
0:2ded56b8407d
Child:
1:00053cb70ac5
First code port

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 0:2ded56b8407d 1 /* mbed Seeed 128x64 OLED Test
wim 0:2ded56b8407d 2 * http://www.seeedstudio.com/depot/grove-oled-display-12864-p-781.html?cPath=163_167
wim 0:2ded56b8407d 3 *
wim 0:2ded56b8407d 4 * Copyright (c) 2012 Wim Huiskamp
wim 0:2ded56b8407d 5 * Released under the MIT License: http://mbed.org/license/mit
wim 0:2ded56b8407d 6 *
wim 0:2ded56b8407d 7 * version 0.2 Initial Release
wim 0:2ded56b8407d 8 */
wim 0:2ded56b8407d 9 #include "mbed.h"
wim 0:2ded56b8407d 10 #include "FixedWidthFont.h"
wim 0:2ded56b8407d 11 #include "SSD1308.h"
wim 0:2ded56b8407d 12
wim 0:2ded56b8407d 13 //Pin Defines for I2C Bus
wim 0:2ded56b8407d 14 //#define D_SDA p9
wim 0:2ded56b8407d 15 //#define D_SCL p10
wim 0:2ded56b8407d 16 #define D_SDA p28
wim 0:2ded56b8407d 17 #define D_SCL p27
wim 0:2ded56b8407d 18 I2C i2c(D_SDA, D_SCL);
wim 0:2ded56b8407d 19
wim 0:2ded56b8407d 20 //Host PC Baudrate (Virtual Com Port on USB)
wim 0:2ded56b8407d 21 #define D_BAUDRATE 9600
wim 0:2ded56b8407d 22 //#define D_BAUDRATE 57600
wim 0:2ded56b8407d 23
wim 0:2ded56b8407d 24 // mbed Interface Hardware definitions
wim 0:2ded56b8407d 25 DigitalOut myled1(LED1);
wim 0:2ded56b8407d 26 DigitalOut myled2(LED2);
wim 0:2ded56b8407d 27 DigitalOut myled3(LED3);
wim 0:2ded56b8407d 28 DigitalOut heartbeatLED(LED4);
wim 0:2ded56b8407d 29
wim 0:2ded56b8407d 30 // Host PC Communication channels
wim 0:2ded56b8407d 31 Serial pc(USBTX, USBRX); // tx, rx
wim 0:2ded56b8407d 32
wim 0:2ded56b8407d 33 // Instantiate OLED
wim 0:2ded56b8407d 34 SSD1308 oled = SSD1308(i2c, SSD1308_SA0);
wim 0:2ded56b8407d 35
wim 0:2ded56b8407d 36 void show_menu() {
wim 0:2ded56b8407d 37 pc.printf("0: Exit\n\r");
wim 0:2ded56b8407d 38 pc.printf("1: Show Menu\n\r");
wim 0:2ded56b8407d 39 pc.printf("2: Send Message\n\r");
wim 0:2ded56b8407d 40 pc.printf("3: \n\r");
wim 0:2ded56b8407d 41 pc.printf("4: \n\r");
wim 0:2ded56b8407d 42 pc.printf("5: \n\r");
wim 0:2ded56b8407d 43 pc.printf("6: \n\r");
wim 0:2ded56b8407d 44 pc.printf("7: \n\r");
wim 0:2ded56b8407d 45 pc.printf("A: \n\r");
wim 0:2ded56b8407d 46 pc.printf("B: \n\r");
wim 0:2ded56b8407d 47 pc.printf("P: \n\r");
wim 0:2ded56b8407d 48 pc.printf("\n\r");
wim 0:2ded56b8407d 49 }
wim 0:2ded56b8407d 50
wim 0:2ded56b8407d 51
wim 0:2ded56b8407d 52 void oled_Test() {
wim 0:2ded56b8407d 53 pc.printf("OLED test start\r");
wim 0:2ded56b8407d 54
wim 0:2ded56b8407d 55 oled.setDisplayOff();
wim 0:2ded56b8407d 56 pc.printf("display off\r\n");
wim 0:2ded56b8407d 57 wait(0.5);
wim 0:2ded56b8407d 58
wim 0:2ded56b8407d 59 oled.setDisplayOn();
wim 0:2ded56b8407d 60 pc.printf("display on\r\n");
wim 0:2ded56b8407d 61 wait(0.5);
wim 0:2ded56b8407d 62
wim 0:2ded56b8407d 63 oled.clearDisplay();
wim 0:2ded56b8407d 64 pc.printf("display cleared\r\n");
wim 0:2ded56b8407d 65 wait(0.5);
wim 0:2ded56b8407d 66
wim 0:2ded56b8407d 67 oled.fillDisplay();
wim 0:2ded56b8407d 68 pc.printf("display filled\r\n");
wim 0:2ded56b8407d 69 wait(0.5);
wim 0:2ded56b8407d 70
wim 0:2ded56b8407d 71 oled.clearDisplay();
wim 0:2ded56b8407d 72 pc.printf("display cleared\r\n");
wim 0:2ded56b8407d 73 wait(0.5);
wim 0:2ded56b8407d 74
wim 0:2ded56b8407d 75 oled.writeString(0, 0, 8, "Foobar!!");
wim 0:2ded56b8407d 76 pc.printf("printed something\r\n");
wim 0:2ded56b8407d 77 wait(3);
wim 0:2ded56b8407d 78
wim 0:2ded56b8407d 79 oled.writeString(1, 8, 8, "baz quux");
wim 0:2ded56b8407d 80 pc.printf("printed something\r\n");
wim 0:2ded56b8407d 81 wait(3);
wim 0:2ded56b8407d 82
wim 0:2ded56b8407d 83 oled.writeString(2, 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 0:2ded56b8407d 84 pc.printf("printed something\r\n");
wim 0:2ded56b8407d 85 wait(3);
wim 0:2ded56b8407d 86
wim 0:2ded56b8407d 87 pc.printf("OLED test done\r\n");
wim 0:2ded56b8407d 88 }
wim 0:2ded56b8407d 89
wim 0:2ded56b8407d 90 // Variables for Heartbeat and Status monitoring
wim 0:2ded56b8407d 91 Ticker heartbeat;
wim 0:2ded56b8407d 92 bool heartbeatflag=false;
wim 0:2ded56b8407d 93
wim 0:2ded56b8407d 94 // Local functions
wim 0:2ded56b8407d 95 void clear_screen() {
wim 0:2ded56b8407d 96 //ANSI Terminal Commands
wim 0:2ded56b8407d 97 pc.printf("\x1B[2J");
wim 0:2ded56b8407d 98 pc.printf("\x1B[H");
wim 0:2ded56b8407d 99 }
wim 0:2ded56b8407d 100
wim 0:2ded56b8407d 101
wim 0:2ded56b8407d 102 void init_interfaces() {
wim 0:2ded56b8407d 103 // Init Host PC communication, default is 9600
wim 0:2ded56b8407d 104 pc.baud(D_BAUDRATE);
wim 0:2ded56b8407d 105
wim 0:2ded56b8407d 106 // Init I/F hardware
wim 0:2ded56b8407d 107 // i2c.frequency(100000);
wim 0:2ded56b8407d 108 i2c.frequency(400000); // according to the spec the max bitrate for the SSD1308 is 400 kbit/s
wim 0:2ded56b8407d 109 }
wim 0:2ded56b8407d 110
wim 0:2ded56b8407d 111
wim 0:2ded56b8407d 112 // Heartbeat monitor
wim 0:2ded56b8407d 113 void pulse() {
wim 0:2ded56b8407d 114 heartbeatLED = !heartbeatLED;
wim 0:2ded56b8407d 115 }
wim 0:2ded56b8407d 116
wim 0:2ded56b8407d 117 void heartbeat_start() {
wim 0:2ded56b8407d 118 heartbeat.attach(&pulse, 0.5);
wim 0:2ded56b8407d 119 }
wim 0:2ded56b8407d 120
wim 0:2ded56b8407d 121 void heartbeat_stop() {
wim 0:2ded56b8407d 122 heartbeat.detach();
wim 0:2ded56b8407d 123 }
wim 0:2ded56b8407d 124
wim 0:2ded56b8407d 125
wim 0:2ded56b8407d 126 int main() {
wim 0:2ded56b8407d 127 bool running=true;
wim 0:2ded56b8407d 128 char command;
wim 0:2ded56b8407d 129
wim 0:2ded56b8407d 130 init_interfaces();
wim 0:2ded56b8407d 131
wim 0:2ded56b8407d 132 heartbeat_start();
wim 0:2ded56b8407d 133
wim 0:2ded56b8407d 134 clear_screen();
wim 0:2ded56b8407d 135
wim 0:2ded56b8407d 136 pc.printf("Hello World!\n\r");
wim 0:2ded56b8407d 137
wim 0:2ded56b8407d 138 // Quick test
wim 0:2ded56b8407d 139 oled_Test();
wim 0:2ded56b8407d 140
wim 0:2ded56b8407d 141 while(1) {
wim 0:2ded56b8407d 142 myled1 = 1;
wim 0:2ded56b8407d 143 wait(0.2);
wim 0:2ded56b8407d 144
wim 0:2ded56b8407d 145 myled1 = 0;
wim 0:2ded56b8407d 146 wait(0.2);
wim 0:2ded56b8407d 147 pc.printf("*");
wim 0:2ded56b8407d 148 }
wim 0:2ded56b8407d 149
wim 0:2ded56b8407d 150
wim 0:2ded56b8407d 151 // Interactive Test
wim 0:2ded56b8407d 152 show_menu();
wim 0:2ded56b8407d 153
wim 0:2ded56b8407d 154 while(running) {
wim 0:2ded56b8407d 155
wim 0:2ded56b8407d 156 if(pc.readable()) {
wim 0:2ded56b8407d 157 command = pc.getc();
wim 0:2ded56b8407d 158 pc.printf("command= %c \n\r", command);
wim 0:2ded56b8407d 159
wim 0:2ded56b8407d 160 switch (command) {
wim 0:2ded56b8407d 161 case '0' :
wim 0:2ded56b8407d 162 pc.printf("Done\n\r");
wim 0:2ded56b8407d 163 running = false;
wim 0:2ded56b8407d 164 break;
wim 0:2ded56b8407d 165
wim 0:2ded56b8407d 166 case '1' :
wim 0:2ded56b8407d 167 show_menu();
wim 0:2ded56b8407d 168 break;
wim 0:2ded56b8407d 169
wim 0:2ded56b8407d 170 case '2' :
wim 0:2ded56b8407d 171 pc.printf("Hello World!\n\r");
wim 0:2ded56b8407d 172 break;
wim 0:2ded56b8407d 173
wim 0:2ded56b8407d 174 case '3' :
wim 0:2ded56b8407d 175 break;
wim 0:2ded56b8407d 176
wim 0:2ded56b8407d 177 case '4' :
wim 0:2ded56b8407d 178 break;
wim 0:2ded56b8407d 179
wim 0:2ded56b8407d 180 case '5' :
wim 0:2ded56b8407d 181 break;
wim 0:2ded56b8407d 182 case '6' :
wim 0:2ded56b8407d 183 break;
wim 0:2ded56b8407d 184
wim 0:2ded56b8407d 185 case '7' :
wim 0:2ded56b8407d 186 break;
wim 0:2ded56b8407d 187
wim 0:2ded56b8407d 188 case 'A' :
wim 0:2ded56b8407d 189 break;
wim 0:2ded56b8407d 190
wim 0:2ded56b8407d 191 case 'B' :
wim 0:2ded56b8407d 192
wim 0:2ded56b8407d 193 break;
wim 0:2ded56b8407d 194
wim 0:2ded56b8407d 195 case 'P' :
wim 0:2ded56b8407d 196
wim 0:2ded56b8407d 197 break;
wim 0:2ded56b8407d 198
wim 0:2ded56b8407d 199 } //switch
wim 0:2ded56b8407d 200 }//if
wim 0:2ded56b8407d 201 }//while
wim 0:2ded56b8407d 202
wim 0:2ded56b8407d 203 pc.printf("Bye World!\n\r");
wim 0:2ded56b8407d 204 }//main
wim 0:2ded56b8407d 205