有機ELは発光素子を挟み込んだ画面を用います。発光素子を直接光らせるので、画面のバックライトをフィルターして見せている液晶より明るく、消費電力が少ないわけです。バックライトが必要ないため薄くできます。
薄くて明るく消費電力の少ないという有機ELですが、そろそろ手ごろな値段で出ています。さっそく注文してみました。この価格帯だと解像度というレベルのものではないですが、細かい文字も表示できます。
この小さなディスプレイは、端子はたったの4つ。
ライブラリなどは128x64サイズのものを使えばそのまま文字でもビットマップでも表示できます。
https://github.com/adafruit/Adafruit_SSD1306
https://github.com/adafruit/Adafruit-GFX-Library
このライブラリですが、使用の際ディスプレイのアドレスを得る必要があります。
http://playground.arduino.cc/Main/I2cScanner
アドレスを得たら初期化のとき引数として渡してやります。
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
この画面サイズの場合、ヘッダファイル(Adafruit_SSD1306.h)を書き換える必要があります。
#define SSD1306_128_64
// #define SSD1306_128_32
// #define SSD1306_96_16
ライブラリを使っての HelloWorld! スクリプトです。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <SPI.h> | |
#include <Wire.h> | |
#include <Adafruit_GFX.h> | |
#include <Adafruit_SSD1306.h> | |
#define OLED_RESET 4 | |
Adafruit_SSD1306 display(OLED_RESET); | |
#define NUMFLAKES 10 | |
#define XPOS 0 | |
#define YPOS 1 | |
#define DELTAY 2 | |
#define LOGO16_GLCD_HEIGHT 16 | |
#define LOGO16_GLCD_WIDTH 16 | |
#if (SSD1306_LCDHEIGHT != 64) | |
#error("Height incorrect, please fix Adafruit_SSD1306.h!"); | |
#endif | |
#if (SSD1306_LCDHEIGHT != 64) | |
#error("Height incorrect, please fix Adafruit_SSD1306.h!"); | |
#endif | |
void setup() { | |
Serial.begin(9600); | |
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); | |
display.clearDisplay(); | |
display.setTextSize(1); | |
display.setTextColor(WHITE); | |
display.setCursor(0,0); | |
/* | |
for (uint8_t i=0; i < 168; i++) { | |
if (i == '\n') continue; | |
display.write(i); | |
if ((i > 0) && (i % 21 == 0)) | |
display.println(); | |
} | |
*/ | |
/* | |
String str="Hello World!"; | |
for(uint8_t j=0;j<5;j++) | |
{ | |
display.setTextSize(j); | |
// for(uint8_t i=0;i<str.length();i++) | |
for(uint8_t i=0;i<1;i++) | |
{ | |
// display.write(str.charAt(i)); | |
display.write('A'); | |
} | |
// display.println(); | |
} | |
*/ | |
String str="Hello World!"; | |
display.setTextSize(1); | |
display.println(str); | |
display.display(); | |
display.startscrollright(0x00, 0x0F); | |
delay(1000); | |
display.stopscroll(); | |
delay(500); | |
display.startscrollleft(0x00, 0x0F); | |
delay(1000); | |
display.stopscroll(); | |
delay(500); | |
display.startscrolldiagright(0x00, 0x0F); | |
delay(1000); | |
display.startscrolldiagleft(0x00, 0x07); | |
delay(1000); | |
display.startscrolldiagright(0x00, 0x0F); | |
delay(1100); | |
display.startscrolldiagleft(0x00, 0x07); | |
delay(850); | |
display.stopscroll(); | |
} | |
void loop() { | |
} |
動きました!ので、使いやすいよう Arduino 用有機ELディスプレイ・モジュールを作ってみました。
モジュールが使いやすいってのはつまり配線を間違えることがない、成功率が高い、能率がいい、ひいては使う際の敷居が低いってことでもあります。すべからくモジュールを組んでおくと Arduino の良さを満喫できます。
#使ってみると有機ELディスプレイってのはいいです。小さいし軽い。電池も持つしいうことないです。早くもっと普及してほしい。
#この「IICシールド」、他のIIC機器用のシールドとしても使えます。時計モジュールとつなぐとそのまま時刻が読めます。