マルツで当時よさそうだと思ったLCDを買ってきたのでその話です。買ってきたのはこのLCDです。秋月でも同じものを売ってるらしいっです。この液晶の裏には薄い膜が貼ってあるだけなので、それをはがせば簡単に透過できるのでは? と思ったので買いました。
ただ、結果から言うと、文字以外の部分も十分光を通さなかったので、お蔵入りとなりました。
以下、公式のスイッチサイエンスの半コピです。
プログラムでA2,A3をVdd,GNDとするので、アナログピンにさすだけで使えます。裏で緑に光っているのはArduinoの電源ランプです。
また、プログラムですが、対応するライブラリがない? らしいのでまあまあ長くなります。
まあそんなこんなで使えなくもないLCDだと思いますが、自分は今すぐには使わないので電子部品の山の中に入れておきます。
常に言っているサークルの自転車は、モーター選定がうまくいっていないので一向に進みません。AliExpressでモーターを買ってみたので届いたらその話も含めてブログにすると思います。それではまた今度。
以下プログラムです。
ただ、結果から言うと、文字以外の部分も十分光を通さなかったので、お蔵入りとなりました。
以下、公式のスイッチサイエンスの半コピです。
プログラムでA2,A3をVdd,GNDとするので、アナログピンにさすだけで使えます。裏で緑に光っているのはArduinoの電源ランプです。
また、プログラムですが、対応するライブラリがない? らしいのでまあまあ長くなります。
まあそんなこんなで使えなくもないLCDだと思いますが、自分は今すぐには使わないので電子部品の山の中に入れておきます。
常に言っているサークルの自転車は、モーター選定がうまくいっていないので一向に進みません。AliExpressでモーターを買ってみたので届いたらその話も含めてブログにすると思います。それではまた今度。
以下プログラムです。
#include <Wire.h>
#define vddPin 16 // ArduinoA2
#define gndPin 17 // ArduinoA3
#define sdaPin 18 // ArduinoA4
#define sclPin 19 // ArduinoA5
#define I2Cadr 0x3e // 固定
byte contrast = 35; // コントラスト(0~63)
void setup() {
pinMode(gndPin, OUTPUT);
digitalWrite(gndPin, LOW);
pinMode(vddPin, OUTPUT);
digitalWrite(vddPin, HIGH);
delay(500);
Wire.begin();
lcd_cmd(0b00111000); // function set
lcd_cmd(0b00111001); // function set
lcd_cmd(0b00000100); // EntryModeSet
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);
}
void loop() {
lcd_setCursor(0, 0);
lcd_printStr("Hello");
lcd_setCursor(1, 1);
lcd_printStr("World");
delay(100);
}
void lcd_cmd(byte x) {
Wire.beginTransmission(I2Cadr);
Wire.write(0b00000000); // CO = 0,RS = 0
Wire.write(x);
Wire.endTransmission();
}
void lcd_contdata(byte x) {
Wire.write(0b11000000); // CO = 1, RS = 1
Wire.write(x);
}
void lcd_lastdata(byte x) {
Wire.write(0b01000000); // CO = 0, RS = 1
Wire.write(x);
}
// 文字の表示
void lcd_printStr(const char *s) {
Wire.beginTransmission(I2Cadr);
while (*s) {
if (*(s + 1)) {
lcd_contdata(*s);
} else {
lcd_lastdata(*s);
}
s++;
}
Wire.endTransmission();
}
// 表示位置の指定
void lcd_setCursor(byte x, byte y) {
lcd_cmd(0x80 | (y * 0x40 + x));
}