VOLTECHNO(ボルテクノ)

ガジェットとモノづくりのニッチな情報を伝えるメディア

2020年9月2日

【Arduino】LCDキーパッドシールドで文字を表示させる!

【Arduino】LCDキーパッドシールドで文字を表示させる!

ArduinoでLCDディスプレイを使って文字を表示させます。せっかくのArduinoなので面倒な配線やはんだ作業を行わずに、LCDシールドを買ってきて動作させます。

IMG_6075

Arduinoは手軽に電子工作とプログラミングができるのがウリだと思っているので、LCDディスプレイの仕組みや使い方がわかっているなら既製品を使わない手はありません。

今回はLCDシールドの完成品を使って手軽にLCDディスプレイを動作させます。

SainSmartのLCDシールドを購入

LCDシールドは様々なメーカーから販売されています。現在のところ一番入手性がよさそうなのはAmazonでも取り扱っているSainSmartのLCDシールドのようです。

4ビットモードで動作させるLCDディスプレイとコントラストを調整する可変抵抗、あとはいくつかのタクトスイッチがついています。

IMG_6076
端子はD0からD7まで付いていますが、D4からD7まで使う4ビットモードでの動作しか対応していないようです。 左上の半固定抵抗はLCDディスプレイの光度調節に使います
IMG_6072
六つのタクトスイッチのうち一番右のRSTボタンはArduinoのRESET端子につながっていて押すとArduinoがリセットされます。

ピンアサインを確認

すでに完成されているシールドなのでピンアサインを変更することはできません。回路図を参照してピンアサインを確認します。

0001

ピンアサインは以下のようになっています。

  • D4-D7    -> LCD Data transmission
  • D8       -> Register Select
  • D9       -> Enable pin
  • D10      -> Backlight control

D10はLCDのバックライトの調節に使う端子のようですがスケッチ時には特に気にしなくても動くようです。

スケッチを書く

LCDディスプレイを使うためにはArduinoのLiquidCrystalライブラリを使用します。リファレンスを参考にスケッチを書きます。

文字を表示させるのに最低限必要な関数を下記に示します。

LiquidCrystal()

LiquidCrystal型の変数を宣言してLCDディスプレイとArduino間のピンを指定します。

LiquidCrystal lcd(RS端子, E端子, DB4端子, DB5端子, DB6端子, DB7端子);

()の中をそれぞれArduino側の対応するピンに書き換えればいいのでこのように変更します。

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

宣言の際には下記の点に注意します。

  • 4本のデータラインで制御するときは、d0からd3は省略する
  • グローバル変数として、関数の外で宣言する。
  • R/W端子を使わない時は省略してもよい。

begin()

LCDディスプレイのインターフェースを初期化してディスプレイの大きさを指定する。

lcd.begin(行, 列);

LCDディスプレイの横幅と高さを指定します。

今回使っているLCDディスプレイは16×2なので下記のように書き直します。

lcd.begin(16, 2);

これも下記の点に注意します。

  • 他のLCD関数を使用する前に呼び出しておく。

setCursor()

ディスプレイ上のカーソルの位置を指定します。この関数で指定した位置を基準に文字が出力されます。

lcd.setCursor(行,列);

これは表示させたい文字に応じて変更します。

print()

ディスプレイ上に文字列を表示させます

 lcd.print("表示させたい文字列");

スケッチを書く

基本的にはArduino IDEにあるサンプルコードのピンだけ変更すればLCDに文字を出すことができます。

今回は上の4つの変数宣言、関数を使って文字を出力します。

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);    //変数宣言、ピンの指定
void setup()
{
 lcd.begin(16, 2);              //LCDの初期化
 lcd.setCursor(0,0);            //カーソルの移動
 lcd.print("Hello World!");     //文字の出力
}
 
void loop()
{

}

動作させたところ

IMG_6069
ディスプレイの質はあまりよくない。コントラストも悪く色むらもあり反応速度もいまいち。価格を考えるとこんなものだろう。
Return Top