#include #define I2Cadr 0x3e //LCDのアドレス(固定) // デフォルト設定で SDAは18番 SDAまたはA4 // SCLは19番 SCLまたはA5 void setup() { // 参考資料にならって初期設定 delay(500); Wire.begin(); lcd_cmd(0x38); lcd_cmd(0x39); lcd_cmd(0x14); lcd_cmd(0x70); lcd_cmd(0x56); lcd_cmd(0x6c); delay(200); lcd_cmd(0x38); lcd_cmd(0x0c); // Display On lcd_cmd(0x01); // Clear Display delay(2); } void loop() { // 文字列 lcd_setCursor(0, 0); lcd_printStr("FMS"); // 整数 int idata = 2016; char intStr[4]; sprintf(intStr, "%4d", idata); lcd_setCursor(4, 0); lcd_printStr(intStr); // 浮動小数点 float fdata = 3.1415; char floatStr[8]; dtostrf(fdata, 6, 2, floatStr); lcd_setCursor(0, 1); lcd_printStr(floatStr); delay(100); } // コマンドを送信する void lcd_cmd(byte x) { Wire.beginTransmission(I2Cadr); Wire.write(0b00000000); // CO = 0,RS = 0 Wire.write(x); Wire.endTransmission(); } // 文字の表示 void lcd_printStr(const char *s) { Wire.beginTransmission(I2Cadr); while (*s) { if (*(s + 1)) { // データ送信(RS=1)を継続して送信(CO=1)する Wire.write(0b11000000); Wire.write(*s); } else { // データ送信(RS=1)の最後のバイトを送信(CO=0)する Wire.write(0b01000000); // CO = 0, RS = 1 Wire.write(*s); } s++; } Wire.endTransmission(); } // 表示位置の指定 void lcd_setCursor(byte x, byte y) { lcd_cmd(0x80 | (y * 0x40 + x)); }