// http://blog.goo.ne.jp/sim00/e/ab138be751d447bcdb0eecaaca232214 #include <Wire.h> // Arduino i2c-lcd // Ana 5 ----- 2pin scl (pull-up 47k ohm) // Ana 4 ----- 3pin sda (pull-up 47k ohm) // GND ------- 4pin // 5V -------- 5pin int ledPin = 13; int sdaPin = 18; // analog pin 4 int sclPin = 19; // analog pin 5 int i2cadr = 0x3e; byte contrast = 32; // 0-63 void lcd_cmd(byte x) { Wire.beginTransmission(i2cadr); Wire.send(0b00000000); // CO = 0,RS = 0 Wire.send(x); Wire.endTransmission(); } void lcd_contdata(byte x) { Wire.send(0b11000000); // CO = 1, RS = 1 Wire.send(x); } void lcd_lastdata(byte x) { Wire.send(0b01000000); // CO = 0, RS = 1 Wire.send(x); } void lcd_puts(const char *s) { Wire.beginTransmission(i2cadr); while(*s) { if(*(s + 1)) { lcd_contdata(*s); } else { lcd_lastdata(*s); } ++s; } Wire.endTransmission(); } void lcd_init() { // wait delay(500); // LCD initialize Wire.begin(); lcd_cmd(0b00111000); // function set lcd_cmd(0b00111001); // function set lcd_cmd(0b00010100); // interval osc lcd_cmd(0b01110000 | (contrast & 0xF)); // contrast Low lcd_cmd(0b01011100 | ((contrast >> 4) & 0x3)); // contast High/icon/power lcd_cmd(0b01101100); // follower control delay(200); lcd_cmd(0b00111000); // function set lcd_cmd(0b00001100); // Display On lcd_cmd(0b00000001); // Clear Display delay(2); // Clear Displayは追加ウェイトが必要 } void lcd_move(byte pos){ lcd_cmd(0x80 | pos); } void setup() { lcd_init(); pinMode(ledPin, OUTPUT); // Lチカ } void loop() { digitalWrite(ledPin, HIGH); lcd_move(0x00); lcd_puts("Hello"); lcd_move(0x40); lcd_puts("World"); delay(1000); digitalWrite(ledPin, LOW); lcd_cmd(0b00000001); // Clear Display delay(1000); }
ATtiny2313を使った1チップI2C&シリアルインターフェイスマルチ機能アダプタ というページがあって作ってみた。材料も安価で良いと思う。