日本開閉器工業株式会社さんの「有機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