日本開閉器工業株式会社さんの「有機ELディスプレイ多機能押ボタンスイッチ(IS-C15ANP4)」という液晶ディスプレイにスイッチが合体した商品をArduinoから使ってみました。
お知らせ:この度スイッチサイエンスで「IS-C15ANP4」の取り扱いが開始されました!
http://www.switch-science.com/catalog/1326/
用意した物
・Arduino(今回はUno-R3を使いました)
・IS-C15ANP4(有機ELディスプレイ多機能押ボタンスイッチ本体)
・抵抗(1kΩ×2本,10kΩ×3本)
・電解コンデンサ(10uF/50V)
・トランジスタ(2SC1815,2SA1015)
・5Vから15Vを作るための昇圧ボード(今回はコーセルのオンボード電源SUS1R50515Cを使いました)
・ジャンパー線(10本)
上記以外にIS-C15ANP4が2mmピッチで千鳥配置だったので2.54mmピッチへの変換するための基板を自作しました

実際にブレッドボード上で回路を組んでみました。

これで回路はできあがり、次はソフトウエア部分ですね。
まずは初期化部分です。
#画素数は64×48ドット、今回は65536色(16bitColor:R5+G6+B5)モードで使用します
#include <SPI.h>
#define pinSW 6
#define pin15V 7
#define pinRES 8
#define pinDC 9
#define pinSS 10
#define CMD 0
#define DAT 1
#define SetupColumnAddress 0
#define SetupRowaddress 1
#define SetContrastColorA 2
#define SetContrastColorB 3
#define SetContrastColorC 4
#define MasterCurrentControl 5
#define RemapColorDepth 6
#define SetDisplayStartLine 7
#define SetDisplayOffset 8
#define SetDisplayMode 9
#define SetMultiplexRatio 10
#define DimModeSetting 11
#define SetDisplayDim 12
#define SetDisplayOff 13
#define SetDisplayNormal 14
#define SetMasterConfiguration 15
#define PhasePeriodAdjustment 16
#define DisplayClockDivider 17
#define EnableLinearGrayScale 18
#define SetPrechargeLevel 19
#define SetVcomh 20
#define ColorDepth64k 21
byte Fundamental[][6] = {
{0x03,0x15,0x10,0x4f}, // SetupColumnAddress
{0x03,0x75,0x00,0x2f}, // SetupRowaddress
{0x02,0x81,0x19}, // SetContrastColorA
{0x02,0x82,0x14}, // SetContrastColorB
{0x02,0x83,0x24}, // SetContrastColorC
{0x02,0x87,0x0f}, // MasterCurrentControl
{0x02,0xa0,0x70}, // RemapColorDepth
{0x02,0xa1,0x00}, // SetDisplayStartLine
{0x02,0xa2,0x10}, // SetDisplayOffset
{0x01,0xa4}, // SetDisplayMode
{0x02,0xa8,0x2f}, // SetMultiplexRatio
{0x05,0xab,0x12,0x0c,0x14,0x12}, // DimModeSetting
{0x01,0xac}, // SetDisplayDim
{0x01,0xae}, // SetDisplayOff
{0x01,0xaf}, // SetDisplayNormal
{0x02,0xad,0x8e}, // SetMasterConfiguration
{0x02,0xb1,0x44}, // PhasePeriodAdjustment
{0x02,0xb3,0xa0}, // DisplayClockDivider
{0x01,0xb9}, // EnableLinearGrayScale
{0x02,0xbb,0x12}, // SetPrechargeLevel
{0x03,0xbe,0x28}, // SetVcomh
{0x02,0xa0,0x70}, // ColorDepth64k
};
void setup() {
pinMode(pinSW,INPUT);
pinMode(pinSS,OUTPUT);
pinMode(pinRES,OUTPUT);
pinMode(pinDC,OUTPUT);
pinMode(pin15V,OUTPUT);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV4);
SPI.setDataMode(SPI_MODE3);
IS_C15ANP4_Init();
}
void IS_C15ANP4_Init() {
digitalWrite(pin15V,LOW);
digitalWrite(pinRES,LOW);
delay(3);
digitalWrite(pinRES,HIGH);
digitalWrite(pin15V,HIGH);
IS_C15ANP4_AdrInit();
IS_C15ANP4_SendCommand(SetContrastColorA);
IS_C15ANP4_SendCommand(SetContrastColorB);
IS_C15ANP4_SendCommand(SetContrastColorC);
IS_C15ANP4_SendCommand(MasterCurrentControl);
IS_C15ANP4_SendCommand(SetDisplayStartLine);
IS_C15ANP4_SendCommand(SetDisplayOffset);
IS_C15ANP4_SendCommand(SetDisplayMode);
IS_C15ANP4_SendCommand(SetMultiplexRatio);
IS_C15ANP4_SendCommand(DimModeSetting);
IS_C15ANP4_SendCommand(SetMasterConfiguration);
IS_C15ANP4_SendCommand(PhasePeriodAdjustment);
IS_C15ANP4_SendCommand(DisplayClockDivider);
IS_C15ANP4_SendCommand(EnableLinearGrayScale);
IS_C15ANP4_SendCommand(SetPrechargeLevel);
IS_C15ANP4_SendCommand(SetVcomh);
IS_C15ANP4_SendCommand(ColorDepth64k);
IS_C15ANP4_SendCommand(SetDisplayNormal);
}
void IS_C15ANP4_AdrInit() {
IS_C15ANP4_SendCommand(SetupColumnAddress);
IS_C15ANP4_SendCommand(SetupRowaddress);
}
void IS_C15ANP4_Send(int no) {
for (int i = 0;i < Fundamental[no][0];i++) {
IS_C15ANP4_SendData(Fundamental[no][i + 1]);
}
}
void IS_C15ANP4_SendCommand(int no) {
digitalWrite(pinDC,CMD);
IS_C15ANP4_Send(no);
}
void IS_C15ANP4_SendData(byte dat) {
digitalWrite(pinSS,0);
SPI.transfer(dat);
digitalWrite(pinSS,1);
}
これで準備は整いました、次は実際に絵を出す方法をいくつか紹介していきます。
今回のプログラムにはメイン部分(loop)がありません。
コンパイルして確認したい方は「void loop() {}」を追記すればコンパイルだけはできます。
あとがき:
実はこれ、CQ出版社様「エレキジャック」のwebページに掲載されていたmbedにIS-C15ANP4を繋ぐ記事をArduino用に置き換えたものです。
http://www.eleki-jack.com/arm/2011/02/eloled-23.html

