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( )
画面の文字を全て消去しカーソルを上段左端に設定します。
次回は、圧電スピーカを利用して楽譜の演奏を実現します。