マルツで当時よさそうだと思ったLCDを買ってきたのでその話です。買ってきたのはこのLCDです。秋月でも同じものを売ってるらしいっです。この液晶の裏には薄い膜が貼ってあるだけなので、それをはがせば簡単に透過できるのでは? と思ったので買いました。
 ただ、結果から言うと、文字以外の部分も十分光を通さなかったので、お蔵入りとなりました。

 以下、公式のスイッチサイエンスの半コピです。
atanf-y7l9s
 プログラムで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));
}