このサイトはMacを使って Arduino Uno の動作や活用法を学びます。

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( )
    画面の文字を全て消去しカーソルを上段左端に設定します。

 
 

 

次回は、圧電スピーカを利用して楽譜の演奏を実現します。