OLED module (128x64/SPI) [aitendo VGM12864SPI-W] with Aidafruit SSD1306 library

Dependencies:   SSD1306 mbed

Dependents:   tof_main

aitendo の OLED module (128x64/SPI) [ VGM12864SPI-W] を Adafruit の SSD1306 用ライブラリで動かしてみた。グラフィックとテキスト表示が可能である。mbed 標準のGraphicDisplay/TextDisplay クラスは継承していない独自のもの。STM32 Nucleo L152RE の他、LPC1768 mbed で動作確認。

/media/uploads/masato/vgm12864spi-w.jpg

Committer:
masato
Date:
Sun May 04 14:31:18 2014 +0000
Revision:
0:15f95f9cf61a
OLED module (128x64/SPI) [aitendo VGM12864SPI-W]; with Aidafruit SSD1306 library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
masato 0:15f95f9cf61a 1 /*
masato 0:15f95f9cf61a 2 test OLED module (128x64/SPI) [aitendo VGM12864SPI-W]
masato 0:15f95f9cf61a 3 */
masato 0:15f95f9cf61a 4
masato 0:15f95f9cf61a 5 #include "mbed.h"
masato 0:15f95f9cf61a 6
masato 0:15f95f9cf61a 7 #include "ssd1306.h"
masato 0:15f95f9cf61a 8 #include "standard_font.h"
masato 0:15f95f9cf61a 9 #include "bold_font.h"
masato 0:15f95f9cf61a 10
masato 0:15f95f9cf61a 11 // SSD1306 oled(p8 /* cs */, p9 /* reset */, p14 /* dc */, p13 /* clock */, p11 /* data */); // LPC1768
masato 0:15f95f9cf61a 12 // SSD1306 oled(PTA13 /* cs */, PTD5 /* reset */, PTD0 /* dc */, PTD1 /* clock */, PTD2 /* data */); // KL25Z
masato 0:15f95f9cf61a 13 SSD1306 oled(D10 /* cs */, D9 /* reset */, D8 /* dc */, D13 /* clock */, D11 /* data */); // KL05Z or Arduino styles
masato 0:15f95f9cf61a 14
masato 0:15f95f9cf61a 15 #define NUMFLAKES 10
masato 0:15f95f9cf61a 16 #define XPOS 0
masato 0:15f95f9cf61a 17 #define YPOS 1
masato 0:15f95f9cf61a 18 #define DELTAY 2
masato 0:15f95f9cf61a 19
masato 0:15f95f9cf61a 20 #define LOGO16_GLCD_HEIGHT 16
masato 0:15f95f9cf61a 21 #define LOGO16_GLCD_WIDTH 16
masato 0:15f95f9cf61a 22 static const unsigned char logo16_glcd_bmp[] =
masato 0:15f95f9cf61a 23 { 0x00, 0xc0, // B00000000, B11000000,
masato 0:15f95f9cf61a 24 0x01, 0xc0, // B00000001, B11000000,
masato 0:15f95f9cf61a 25 0x01, 0xc0, // B00000001, B11000000,
masato 0:15f95f9cf61a 26 0x03, 0xe0, // B00000011, B11100000,
masato 0:15f95f9cf61a 27 0xf3, 0xe0, // B11110011, B11100000,
masato 0:15f95f9cf61a 28 0xfe, 0xf8, // B11111110, B11111000,
masato 0:15f95f9cf61a 29 0x7e, 0xff, // B01111110, B11111111,
masato 0:15f95f9cf61a 30 0x33, 0x9f, // B00110011, B10011111,
masato 0:15f95f9cf61a 31 0x1f, 0xfc, // B00011111, B11111100,
masato 0:15f95f9cf61a 32 0x0d, 0x70, // B00001101, B01110000,
masato 0:15f95f9cf61a 33 0x1b, 0xa0, // B00011011, B10100000,
masato 0:15f95f9cf61a 34 0x3f, 0xe0, // B00111111, B11100000,
masato 0:15f95f9cf61a 35 0x3f, 0xf0, // B00111111, B11110000,
masato 0:15f95f9cf61a 36 0x7c, 0xf0, // B01111100, B11110000,
masato 0:15f95f9cf61a 37 0x70, 0x70, // B01110000, B01110000,
masato 0:15f95f9cf61a 38 0x00, 0x30 }; // B00000000, B00110000 };
masato 0:15f95f9cf61a 39
masato 0:15f95f9cf61a 40 void testdrawbitmap(const unsigned char *bitmap, int w, int h) {
masato 0:15f95f9cf61a 41 uint8_t icons[NUMFLAKES][3];
masato 0:15f95f9cf61a 42 srand((unsigned int)time(NULL)); // srandom(666); // whatever seed
masato 0:15f95f9cf61a 43 int i;
masato 0:15f95f9cf61a 44
masato 0:15f95f9cf61a 45 // initialize
masato 0:15f95f9cf61a 46 for (uint8_t f=0; f< NUMFLAKES; f++) {
masato 0:15f95f9cf61a 47 icons[f][XPOS] = rand() % SSD1306_LCDWIDTH; // display.width();
masato 0:15f95f9cf61a 48 icons[f][YPOS] = 0;
masato 0:15f95f9cf61a 49 icons[f][DELTAY] = rand() % 5 + 1;
masato 0:15f95f9cf61a 50 #if 0
masato 0:15f95f9cf61a 51 Serial.print("x: ");
masato 0:15f95f9cf61a 52 Serial.print(icons[f][XPOS], DEC);
masato 0:15f95f9cf61a 53 Serial.print(" y: ");
masato 0:15f95f9cf61a 54 Serial.print(icons[f][YPOS], DEC);
masato 0:15f95f9cf61a 55 Serial.print(" dy: ");
masato 0:15f95f9cf61a 56 Serial.println(icons[f][DELTAY], DEC);
masato 0:15f95f9cf61a 57 #endif
masato 0:15f95f9cf61a 58 }
masato 0:15f95f9cf61a 59
masato 0:15f95f9cf61a 60 i = 0;
masato 0:15f95f9cf61a 61 while (1) {
masato 0:15f95f9cf61a 62 // draw each icon
masato 0:15f95f9cf61a 63 for (uint8_t f=0; f< NUMFLAKES; f++) {
masato 0:15f95f9cf61a 64 oled.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, 1); // WHITE);
masato 0:15f95f9cf61a 65 }
masato 0:15f95f9cf61a 66 oled.update();
masato 0:15f95f9cf61a 67 wait(0.2); // delay(200);
masato 0:15f95f9cf61a 68
masato 0:15f95f9cf61a 69 // then erase it + move it
masato 0:15f95f9cf61a 70 for (uint8_t f=0; f< NUMFLAKES; f++) {
masato 0:15f95f9cf61a 71 oled.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, 0); // BLACK);
masato 0:15f95f9cf61a 72 // move it
masato 0:15f95f9cf61a 73 icons[f][YPOS] += icons[f][DELTAY];
masato 0:15f95f9cf61a 74 // if its gone, reinit
masato 0:15f95f9cf61a 75 if (icons[f][YPOS] > SSD1306_LCDHEIGHT) { // display.height()) {
masato 0:15f95f9cf61a 76 icons[f][XPOS] = rand() % SSD1306_LCDWIDTH; // display.width();
masato 0:15f95f9cf61a 77 icons[f][YPOS] = 0;
masato 0:15f95f9cf61a 78 icons[f][DELTAY] = rand() % 5 + 1;
masato 0:15f95f9cf61a 79 }
masato 0:15f95f9cf61a 80 }
masato 0:15f95f9cf61a 81 if (i++ > 100) break;
masato 0:15f95f9cf61a 82 }
masato 0:15f95f9cf61a 83
masato 0:15f95f9cf61a 84 }
masato 0:15f95f9cf61a 85
masato 0:15f95f9cf61a 86 void testdrawline() {
masato 0:15f95f9cf61a 87 for (int16_t i=0; i<SSD1306_LCDWIDTH; i+=4) {
masato 0:15f95f9cf61a 88 oled.line(0, 0, i, SSD1306_LCDHEIGHT-1);
masato 0:15f95f9cf61a 89 oled.update();
masato 0:15f95f9cf61a 90 }
masato 0:15f95f9cf61a 91 for (int16_t i=0; i<SSD1306_LCDHEIGHT; i+=4) {
masato 0:15f95f9cf61a 92 oled.line(0, 0, SSD1306_LCDWIDTH-1, i);
masato 0:15f95f9cf61a 93 oled.update();
masato 0:15f95f9cf61a 94 }
masato 0:15f95f9cf61a 95 wait(0.25); // delay(250);
masato 0:15f95f9cf61a 96
masato 0:15f95f9cf61a 97 oled.clear();
masato 0:15f95f9cf61a 98 for (int16_t i=0; i<SSD1306_LCDWIDTH; i+=4) {
masato 0:15f95f9cf61a 99 oled.line(0, SSD1306_LCDHEIGHT-1, i, 0);
masato 0:15f95f9cf61a 100 oled.update();
masato 0:15f95f9cf61a 101 }
masato 0:15f95f9cf61a 102 for (int16_t i=SSD1306_LCDHEIGHT-1; i>=0; i-=4) {
masato 0:15f95f9cf61a 103 oled.line(0, SSD1306_LCDHEIGHT-1, SSD1306_LCDWIDTH-1, i);
masato 0:15f95f9cf61a 104 oled.update();
masato 0:15f95f9cf61a 105 }
masato 0:15f95f9cf61a 106 wait(0.25); // delay(250);
masato 0:15f95f9cf61a 107
masato 0:15f95f9cf61a 108 oled.clear();
masato 0:15f95f9cf61a 109 for (int16_t i=SSD1306_LCDWIDTH-1; i>=0; i-=4) {
masato 0:15f95f9cf61a 110 oled.line(SSD1306_LCDWIDTH-1, SSD1306_LCDHEIGHT-1, i, 0);
masato 0:15f95f9cf61a 111 oled.update();
masato 0:15f95f9cf61a 112 }
masato 0:15f95f9cf61a 113 for (int16_t i=SSD1306_LCDHEIGHT-1; i>=0; i-=4) {
masato 0:15f95f9cf61a 114 oled.line(SSD1306_LCDWIDTH-1, SSD1306_LCDHEIGHT-1, 0, i);
masato 0:15f95f9cf61a 115 oled.update();
masato 0:15f95f9cf61a 116 }
masato 0:15f95f9cf61a 117 wait(0.25); // delay(250);
masato 0:15f95f9cf61a 118
masato 0:15f95f9cf61a 119 oled.clear();
masato 0:15f95f9cf61a 120 for (int16_t i=0; i<SSD1306_LCDHEIGHT; i+=4) {
masato 0:15f95f9cf61a 121 oled.line(SSD1306_LCDWIDTH-1, 0, 0, i);
masato 0:15f95f9cf61a 122 oled.update();
masato 0:15f95f9cf61a 123 }
masato 0:15f95f9cf61a 124 for (int16_t i=0; i<SSD1306_LCDWIDTH; i+=4) {
masato 0:15f95f9cf61a 125 oled.line(SSD1306_LCDWIDTH-1, 0, i, SSD1306_LCDHEIGHT-1);
masato 0:15f95f9cf61a 126 oled.update();
masato 0:15f95f9cf61a 127 }
masato 0:15f95f9cf61a 128 wait(0.25);
masato 0:15f95f9cf61a 129 }
masato 0:15f95f9cf61a 130
masato 0:15f95f9cf61a 131 int main()
masato 0:15f95f9cf61a 132 {
masato 0:15f95f9cf61a 133 oled.initialise();
masato 0:15f95f9cf61a 134 oled.clear();
masato 0:15f95f9cf61a 135 oled.set_contrast(255); // max contrast
masato 0:15f95f9cf61a 136
masato 0:15f95f9cf61a 137 oled.drawBitmap(30, 16, logo16_glcd_bmp, 16, 16);
masato 0:15f95f9cf61a 138 oled.update();
masato 0:15f95f9cf61a 139 wait(3);
masato 0:15f95f9cf61a 140
masato 0:15f95f9cf61a 141 testdrawline();
masato 0:15f95f9cf61a 142
masato 0:15f95f9cf61a 143 oled.clear();
masato 0:15f95f9cf61a 144 testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH);
masato 0:15f95f9cf61a 145
masato 0:15f95f9cf61a 146 oled.set_font(bold_font, 8);
masato 0:15f95f9cf61a 147 oled.printf("Heading\r\n");
masato 0:15f95f9cf61a 148
masato 0:15f95f9cf61a 149 oled.set_font(standard_font, 6);
masato 0:15f95f9cf61a 150 oled.printf("Hello World!\r\n");
masato 0:15f95f9cf61a 151 oled.printf("Some more text here...\r\n\r\n\r\n\r\n");
masato 0:15f95f9cf61a 152 // oled.set_font(bold_font, 8);
masato 0:15f95f9cf61a 153 oled.line(127, 0, 0, 63);
masato 0:15f95f9cf61a 154
masato 0:15f95f9cf61a 155 oled.update();
masato 0:15f95f9cf61a 156 wait(1);
masato 0:15f95f9cf61a 157
masato 0:15f95f9cf61a 158 int i = 0;
masato 0:15f95f9cf61a 159 while (1)
masato 0:15f95f9cf61a 160 {
masato 0:15f95f9cf61a 161 wait(1);
masato 0:15f95f9cf61a 162 oled.printf("%d\r\n", i++);
masato 0:15f95f9cf61a 163 oled.update();
masato 0:15f95f9cf61a 164 oled.scroll_up();
masato 0:15f95f9cf61a 165 }
masato 0:15f95f9cf61a 166 }
masato 0:15f95f9cf61a 167
masato 0:15f95f9cf61a 168 // EOF