一生、いちエンジニア。一生、いちエンジニア。shieldは、20×4のLCDと28個のボタンを、I2C接続のみで制御できるArduinoシールドです。このシールドに必要な制御は2ピンで済みますので、Arduinoの外部接続ピンが節約できます。機械の制御パネルや、テストの信号発生用の治具コントローラなどに最適です。このシールドの特徴このシールドには、ATmega328Pが搭載されていて、このマイコンでLCDとボタンの入力の制御を行っています。I2Cスレーブとして動き、Master側のArduinoと通信します。Arduino用のライブラリを用意しました。複雑なI2Cの通信を考える事なく、プログラミングが可能です。キートップは、ラベルが入れられる透明キャップが付いたタイプですので、キーの表示を自由にカスタマイズが可能です。Arduino互換ピンのマイコンボードであれば、シールドとして使用できます(このシールドは5Vのみ対応です)。I2Cの通信部分を書く必要があります。peripheralとして引き出されているので、外付け部品を接続する事ができます。Arduinoへの接続するシールド用のピンヘッダは、ロングピン(9mm)を採用。このマイコン自体のファームウェアもArduinoでのプログラミングが可能なため、ユーザー側で改造もできます。これを使うとプログラム側で常にボタンの状況を監視する必要はありません。PINは、シールド側のD2/D3/D7に変更できますので、ボードによって違う割り込みピンに対応する事ができます。R2以前かR3を選択するピンです。R2側にすると、I2Cの通信をA4・A5で行います。R3側にすると、新たに拡張されたSDA・SCLに接続されます。Leonardoの場合は、R3を選択します。PINを接続するピンを設定します。PINを使用しない場合は、ジャンパーピンを外します。peripheralと、NCの左側のピンの裏まで線はんだづけすると便利です。LCDボリュームLCDの表示の濃さを変えるボリュームです。良いところに調整しましょう。Basic接続する端子です。ピンヘッダを半田付けしてください。ArduinoIDEを使用し、シールドのATmega328Pを書き換えをする時に使用します。ICSPICSPを接続する端子です。AVRライターを使用し、シールドのATmega328Pを書き換えする時に使用します。UNOでのプログラミング方法このシールドにArduinoを差すピンが正確に刺されているように確認してください。ずれて刺されていると動作しません。ライブラリをインストールライブラリは、ArduinoIDE1.8.2で動作確認されています。ここからライブラリをダウンロードします。Arduino用ライブラリのダウンロードArduinoIDEの「スケッチ」→「ライブラリをインクルード」→「.ZIP形式のライブラリをインストール」から、ダウンロードしたファイルを開きます。プログラムを書くサンプルプログラムです。押されている一つのキーを読み込み、LCDに表示します。");}1行目、ライブラリをインクルードします。2行目、I2Cのアドレスを定義しています。このシールドのデフォルトのアドレスは、0x1Eです。4行目、クラスを宣言しています。この時に、I2Cのアドレスを宣言します。7行目、1.5秒間のディレイを入れています。シールドに装着されている、ATmega328Pが起動するまで待ちます。これを入れないと、setup()内のArduinoからシールドに対しての通信(I2C通信)が実行されない事があります。8行目、LCDをクリアしています。9行目、LCDのカーソルを0,0に。10行目、LCDに文字列を出力します。14行目、押されているボタンの番号を取得します。何も押されていないと0を返します。17行目、数字を文字列に変換します。18行目、ボタン番号をLCDへ出力します。プログラミングのヒントLCDへの出力は、LiquidCrystalとほぼ一緒ですので、迷う事はないと思います。キーの入力に関しては、用途に応じていくつかの方法が用意されています。単純に、一つのキーが押されているかどうかを判断するのには、keyOne()で良いのですが、プログラムのloop(){}内ではループするので、何度もキーが押されている事になり、何度も実行する事になります。PINを使用し一度だけ実行するようにプログラミングするか、keyOrder()を使う事をお勧めします。複数ボタンを押している事を認識したい場合、たとえば、あるキーを押しながら(Shiftキーのような使い方)、任意のキーを押したかどうか判断したい場合は、keyOrder()でキーを監視し、Shiftキーにあたるキーが押された時には無視をし、他のキーを押した時に、keyHear(num)で、Shiftキーにあたるキーが押されているかを確認して、動作を分岐するようなアルゴリズムが考えられます。関数このライブラリで提供している関数は以下の通りです。clear()説明LCDの画面をクリアし、カーソルを左上の角に移動させます。home()説明LCDのカーソルを左上の角へ移動します。続くテキストはその位置から表示されます。画面をクリアしたいときは、clear()を使用します。row)説明LCDのカーソルの位置を指定します。続くテキストは、その位置から表示されます。(0が1行目)write(data)説明LCDに文字をLCDに表示します。表示したい文字print(data)説明LCDにテキストを表示します。数値を表示する際の基数。");}cursor()説明LCDのカーソルを表示します。カーソルはアンダーラインで、その位置に次の文字が表示されます。noCursor()説明LCDのカーソルを隠します。blink()説明LCDのカーソルを点滅させます。結果は使っているディスプレイに依存します。noBlink()説明LCDのカーソルの点滅を停止します。display()説明LCDでnoDisplay()で消したディスプレイを元に戻します。表示されていた文字やカーソルもリストアされます。noDisplay()説明LCDを消します。表示中の文字は保持されます。scrollDisplayLeft()説明LCDで表示中の文字とカーソルを1文字分左へずらします。scrollDisplayRight()説明LCDで表示中の文字とカーソルを1文字分右へずらします。autoscroll()説明LCDで自動スクロール機能を有効にします。自動スクロールが有効のとき、新たな文字を出力すると、表示位置に元からある文字が押し出されます。デフォルトでは左から右へ押し出されます。右から左へ設定することもできます。noAutoscroll()説明LCDで自動スクロール機能を無効にします。leftToRight()説明LCDでテキスト表示の向きを左から右に指定します(デフォルト)。一連の文字は、右へ向かって伸びていきます。rightToLeft()説明LCDでテキスト表示の向きを右から左に指定します。一連の文字は、左へ向かって伸びていきます。data)説明LCDでカスタムキャラクタ(絵文字)を作成します。最大8文字まで登録可能です。キャラクタの形は8バイトの配列で表現され、各バイトが1行に対応します。各バイトの下位5ビットがピクセルパターンを表します。作成したキャラクタを表示するときは、そのキャラクタ番号とwrite()を組み合わせます。押されているキーの番号を返します。0が返された時は、どのキーも押されていません。2個同時押しされている場合は、先に押したキーの値しか返されません。