ここで紹介するのは I2Cで接続可能な2種の小型(8文字、2行)の液晶表示器です。
#include <Wire.h> byte val = 0; char Msg[17] = "I2C LCD"; //char buf[10]=""; void setup(){ Serial.begin(9600); delay(100); Wire.begin(); lcd_begin();//初期設定 Serial.println("setup"); } void loop() { lcd_setCursor(0,0);//カーソルを0行に位置設定 lcd_print(Msg);//文字列表示 lcd_setCursor(0,1);//カーソルを0行に位置設定 lcd_print(val);//数字を表示 val++; Serial.println("."); delay(500); } // LCD 1602A、AQM0802 //接続 //LCD.CL:3 LCD.DA:4 //LCD.VCC:1 3.3V LCD.5:GND GND //LCD.Reset:2 PU必要 #define LCDA 0x3E //lcd address //LCD によりどちらか選択 //#define CONTRAST 0x20 //for 3.3V AQM0802 #define CONTRAST 0x30 //for 3.3V LCD1602A //byte val = 0; char lcdbuf[10]=""; // 液晶へ1コマンド出力 void lcd_cmd(byte cmd) { Wire.beginTransmission(LCDA); Wire.write((byte)0x00); // コマンド指定 Wire.write(cmd); // コマンド出力 Wire.endTransmission(); // ストップ //I2c.write((byte)LCDA,(byte)0,cmd); /* ClearかHomeか */ if((cmd == 0x01)||(cmd == 0x02)) delay(2); // 2msec待ち else delayMicroseconds(30); // 30μsec待ち } //データを送る void lcd_data(byte data) { Wire.beginTransmission(LCDA); // スタート Wire.write(0x40); // 表示データ指定 Wire.write(data); // 表示データ出力 Wire.endTransmission(); // ストップ delayMicroseconds(30); // 遅延 } void lcd_setCursor(byte clm,byte row){ //row=0 or 1 if(row==0) lcd_cmd(0x80+clm); if(row==1) lcd_cmd(0xc0+clm); } // 初期化 void lcd_begin(void) { Serial.println("lcd_begin"); //I2c.begin(); // begin I2C master delay(10); lcd_cmd(0x38); // 8bit 2line Normal mode lcd_cmd(0x39); // 8bit 2line Extend mode lcd_cmd(0x14); // OSC 183Hz BIAS 1/5 /* コントラスト設定 */ lcd_cmd((byte)(0x70 + (CONTRAST & 0x0F)));//下位4bit lcd_cmd((byte)(0x5C + (CONTRAST >> 4)));//上位2bit lcd_cmd((byte)0x6B); // Follwer for 3.3V delay(1); lcd_cmd((byte)0x38); // Set Normal mode lcd_cmd((byte)0x0C); // Display On lcd_cmd((byte)0x01); // Clear Display delay(1); Serial.println("end of lcd_begin"); } //全消去関数 void lcd_clear(void) { lcd_cmd(0x01); //初期化コマンド出力 delay(2); } //文字列表示関数 void lcd_print(char* ptr) { while(*ptr != 0) //文字取り出し lcd_data(*ptr++); //文字表示 } void lcd_print(int num){ sprintf(lcdbuf,"%d",num); lcd_print(lcdbuf); }