23 Arduino i2c小型LCD表示器を接続 3
前記事で秋月電子の サンプルプログラムを紹介しました。
このプログラムを元に以下の機能を追加しました。
- 初期化関数にコントラストの設定を追加
- カーソル位置を設定する関数を作成
- 文字列を表示する関数を作成
- 表示データを全て消去しカーソルを左上に初期化
これで随分実用的なプログラムになります。これらの関数を利用し
1行目に「LCD Disp」
2行目に「 i2c 8x2」 と表示するスケッチを作成します。
前回の記事と重複しますが、回路図は以下の様です。
スケッチの内容
// 秋月電子 [AQM0802A-RN-GBW] //1行目に「LCD Disp」 //2行目に「 i2c 8x2」表示 #include <Wire.h> // I2C標準ライブラリ #define LCD_ADRS 0x3E // LCDモジュールアドレス void setup() { char msg[]={"LCD Disp"}; // 1行目表示メッセージ Wire.begin(); // i2c初期化 init_LCD(0x0A); // LCD初期化 // +----- Contrast (0-64) LCD_str(msg); // 1行目に「LCD Disp」表示 LCD_posxy(1,1); // 2行目2文字目に移動 LCD_str("i2c 8x2"); // 2行目に「 i2c 8x2」表示 } void loop() { } // 以下にLCD関連関数 --------------- //-------- 全消去 void LCD_clr(void){ writeCommand(0x01); //Clearコマンド出力 } //-------- カーソル位置指定 void LCD_posxy(char xpos, char ypos){ unsigned char pcode; switch(ypos & 0x03){ case 0: pcode=0x80;break; case 1: pcode=0xC0;break; } writeCommand(pcode += xpos); } //-------- 文字列出力 void LCD_str(char *str){ while(*str) //文字列の終わり(00)まで継続 writeData(*str++); //文字出力しポインタ+1 } //i2cデータ書き込み void writeData(byte t_data){ Wire.beginTransmission(LCD_ADRS); Wire.write(0x40); Wire.write(t_data); Wire.endTransmission(); delay(1); } //i2cコマンド書き込み void writeCommand(byte t_command){ Wire.beginTransmission(LCD_ADRS); Wire.write(0x00); Wire.write(t_command); Wire.endTransmission(); delay(10); } //液晶初期化 void init_LCD(byte contrast) { byte cont; delay(100); writeCommand(0x38); writeCommand(0x39); writeCommand(0x14); cont = 0x70+(contrast & 0xF); writeCommand(cont); cont = 0x54+(contrast >> 4); writeCommand(cont); writeCommand(0x6C); delay(200); writeCommand(0x38); writeCommand(0x0C); writeCommand(0x01); writeCommand(0x06); }
作成したLCD関数
使用している標準ライブラリの Wire(I2C)関数を示します。
- init_LCD(contrast)
contrast(0-63)値を使用しLCDを初期化します。
- LCD_posxy(cols, rows)
ディスプレイの桁数と行数を指定します。
- LCD_str(*str)
文字列をLCDに表示します。
- LCD_clr( )
画面の文字を全て消去しカーソルを上段左端に設定します。
次回は、圧電スピーカを利用して楽譜の演奏を実現します。