まんぷく

あけましておめでとうございます。

あけましておめでとうございます。今年も宜しくお願いいたします。

年もあけて既に一週間あまりが経ち週末は成人の日ですね。私が成人した頃(その後の9年間もですが)の成人の日は1月15日と決まっていて、その印象が強いため第二月曜日が成人の日と言われても、いまだにピンと来ないのです。私には1月15日生まれの友人がおりまして、その名も成人(しげと)さんだったりするぐらいです。

カレンダーの成人に日を指差して「なんて読むか分かります?」と聞いてくるので、当然ながら「せいじんのひ」と答えると、「違いますよシゲトのひです」なんて嬉しそう(今風で言うとドヤ顔かな)に語っていた彼の顔を毎年思い浮かべてしまう私です。

さて余談はここまでにして、さっそく今回の本題に入ります。

LCD Keypad Shieldに搭載しているLCDはキャラクタータイプの液晶で、基本的に文字しか表示することが出来ません。ただし8文字分だけ独自に文字を登録/表示する機能があるので、今回はその機能を使ってみます。

1つの文字は5x8ドットで構成されていて、アルファベットなどの基本的な文字は縦7ドットまでしか使われていないようですが、もちろん独自文字には全ての領域が使えます。全部合わせてもたかだか40ドッツですけど。

さっそくcreateChar関数のサンプルを見て行きましょう。ほぼまるごとコピーですがピン番号だけ変更してありますのでお手持ちの環境に合わせて変更して下さい。

#include <LiquidCrystal.h>
LiquidCrystal lcd( 8, 9, 4, 5, 6, 7);

byte smiley[8] = {
  B00000,
  B10001,
  B00000,
  B00000,
  B10001,
  B01110,
  B00000,
};

void setup() {
  lcd.createChar(0, smiley);
  lcd.begin(16, 2);
  lcd.write(byte(0));
}

void loop() {}

これをコンパイルして実行すると以下のように表示されます。 LCDにSMILEYを表示

lcd.createChar(0,smiley)で文字を登録します。最初の引数である数字は登録先を示すもので、0から7までを指定することが出来ます。二つ目はは画像データとなる変数を指定します。ここではsmileyという名前の変数に画像データが格納されています。画像と見比べてみると分かると思いますが、黒く塗りつぶしたい部分を1にすれば良いです。

次にこれを少し拡張してみます。setCusor関数は名前の通りカーソル位置をセットするもので、これが無いとwriteした後にカーソルが自動で右に進みます。setCursor行をコメントにして実行してみると違いが良く分かると思います。

#include <LiquidCrystal.h>
LiquidCrystal lcd( 8, 9, 4, 5, 6, 7);

byte man0[8] = {
  B01110,
  B01110,
  B10101,
  B01110,
  B00100,
  B01010,
  B10001,
  B00000
};

byte man1[8] = {
  B00000,
  B01110,
  B01110,
  B00100,
  B11111,
  B00100,
  B01010,
  B01010
};

byte man2[8] = {
  B00000,
  B01110,
  B01110,
  B00100,
  B01110,
  B10101,
  B01010,
  B10001
};

byte n = 0;

void setup() {
  lcd.createChar(0, man0);
  lcd.createChar(1, man1);
  lcd.createChar(2, man2);
  lcd.createChar(3, man1);
  lcd.begin(16, 2);
}

void loop() {
  lcd.setCursor(4,1);
  lcd.write(n);
  lcd.setCursor(6,0);
  lcd.write(n);
  lcd.setCursor(8,1);
  lcd.write(n);
  if (++n > 3) n = 0;
  delay(1000);
}

LCDに人を表示

実行するとちょっとしたアニメーションを表示します。その他複数の文字を使って一つの絵を構成したり、いろいろと応用してみて下さい。

Categories
tech

Tags
Arduino / DRRobot / DFRobot / LCD Keypad Shield