ArduinoでLCDを使う

Arduino

今回はLCD(Liquid Crystal Display/液晶ディスプレイ)について学びます。

ライブラリの導入が終わっている前提で進めます。まだの場合↓

LCD表示のサンプルコード

LDCが使われているコードを見てみましょう。

ファイル>スケッチ例から「FaBo_213_LCD_mini_AQM0802A」を探してHelloWorldCustomCharacterの2つをそれぞれ実行してください。

うまくいくと文字の表示や棒人間の表示を確認することができます。

I²C液晶の機能とコマンド

これらの機能を組み合わせることで、LCDに様々な内容を表示させることができます。

機能コマンド例
LCDセットアップbegin(); // LCD使用前に初期化
文字列を表示(8文字まで)print(“Hello”);
16進数で1文字表示write(0b10110001); // ‘ア’を表示
カーソル移動setCursor(0, 1); //桁,行の順
右へ1文字スクロールscrollDisplayRight();
左へ1文字スクロールscrollDisplayLeft();
カーソルを表示cursor(); // 非表示は noCursor();
カーソルを点滅blink(); // 復帰は noBlink();
画面非表示noDisplay(); // 復帰は display();
画面消去clear();

ここからこれらを使って様々な文字をLCDで表示させていきます。

文字の表示

文字の表示には主に2種類存在します。print()とwrite()です。

print()で出力(表示)できるのは英数字のみです。そのため、カタカナや記号を表示したい場合はwrite()を使う必要があります。

print("ここに半角英数字を入力/8文字まで");

write(ここにバイナリを入力);

上のコマンドの章にも合った通り、print()はコーテーションで出力したい文字を囲います。write()は少し特殊なので解説します。

例えば、「ア」を表示したい場合、以下のように記述します。

write(0b10110001); //アを表示

下の表の列「1011」、行「0001」を指定すると「ア」が指定できていることが分かります。

https://akizukidenshi.com/goodsaffix/AQM0802.pdfより引用

ちなみに、2進数の前にある「0b」は2進数の表現をするために使われます。

接頭辞頭文字の意味進数
0bBinary2進数
0oOct8進数
0xHex16進数
参考:接頭辞とその意味

カスタム文字

サンプルコードにもありましたが、上の表以外の文字も表現することができます。

// ライブラリの呼び出し
#include <Wire.h>
#include <FaBoLCDmini_AQM0802A.h>

// lcdライブラの初期化
FaBoLCDmini_AQM0802A lcd;

byte heart[8] = {
  0b00000,
  0b01010,
  0b11111,
  0b11111,
  0b11111,
  0b01110,
  0b00100,
  0b00000
};

void setup() {
  // lcdのセットアップ
  lcd.begin();

  // カスタム文字のセットアップ
  lcd.createChar(0, heart);
}

void loop() {
  lcd.setCursor(0, 0);  // 最初の行に移動
  lcd.print("I ");      // "I "を表示
  lcd.write(byte(0));   // カスタム文字(ハート)を表示
  delay(1000);  // 1秒待機

  lcd.setCursor(0, 1);    // 2行目に移動
  lcd.print(" Arduino");  // "Arduino"を表示
  delay(2000);            // 2秒待機

  lcd.clear();  // LCDをクリア
}

配列heartがポイントです。配列はLCDのドットと対応しています。

1がドットの表示、0が非表示で表現できます。

課題

  1. 0行目に「hello」、1行目に「world!」を表示せよ
  2. 0行目に自身の苗字、1行目に名前を表示せよ
  3. カスタム文字を使って名前の後ろに任意の記号を追加せよ