Arduino UNOが面白くなってきました。最初の、LEDを光らせて、シリアル通信を確認して、とってもやり易いとの第一値印象を得ました。即、液晶ディスプレーを秋月電子の通販に注文しました。4線式のI2C接続タイプのものです。本当の目的は、DDSのVFOを製作したいが為です。先ずは、使用する液晶部の準備、確認からという訳です。なにせ、超初心者ですから! Hi 

I2Cタイプの液晶は2種類ほど購入しました。まず最初に試したのはSC1602BBWB-XA-GB-G です。
I2C接続小型キャラクタLCDモジュール(16×2行・3.3V/5V)ピッチ変換キットです。
http://akizukidenshi.com/catalog/g/gK-08896/

早速付いてきた変換用基板にLCDと端子を半田付けして、Arduino Unoに接続してゆきます。のっけから少し迷いました。Arduinoには種類があるため、それぞれがハードの違いに合わせた端子を使う必要がある様です。接続端子の数は4本ありますが、SCL,SDA端子は下記の様に、自分のArduinoに合わせます。

私のはArduino UNOなので
SCL ⇒ A5
SDA ⇒ A4
となります。他は、+Vは+5Vへ、GNDはGNDへで共通です。

上記の使用する端子はWire Libraryの下記URLで確認できます。
https://www.arduino.cc/en/Reference/Wire

とにかく、早くディスプレーに何かを表示して見たくて、ネットのサンプルを新規からスケッチしました。
ところが、です。コーディング終了して、検証コンパイルをすると、残酷にも、エラーがでました。
打ち間違いはないので、チョットお手上げ状態に一瞬なりました。少し冷静に考えて、まずは、ネットの例よりも提供されているサンプルを試してみようとふと思いつきました。スケッチ例より LiquidCrystal 下サンプルのHelloWorldのサンプルを読み込みしました。
I2C接続ではない、データ線を使った通常の接続のスケッチです。接続は全く異なりますが、コンパイル可能かの確認の為だけの読み込みです。

HelloWorld001
上記を検証コンパイル可能か実施してみますと、エラーも出ずコンパイル完了しました。
書き込みもArduinoUnoではディスプレーには表示しませんが、書き込みの表面上動作は大丈夫でした。

という事で、問題なくコンパイルできたこのスケッチを利用して書き直しで試してみます。
HelloWorld001-a
コンパイルOKのスケッチを利用した結果は目論み通りOKでした。
新規で作製したスケッチでなぜエラーが出たかは不明ですが、この後に新規で最初のようにスケッチを一から
作製して再度確認しました。

HelloWorld001-b
結果は全く問題なく検証コンパイルでき、書き込みも動作もOKでした。
何だったのかは、わかりませんが、新規で作製しても、問題なくコンパイル、書き込み実行ができることになったので、結果オーライとします。

なお、ここで使用した液晶のサンプルは、下記のWEB上の物を利用させていただきました。
https://asukiaaa.blogspot.com/2016/01/arduino-leonardoae-aqm1602a.html

上記のページの中に インクルードファイルを作成してくれている方のURLがあります。
https://n.mtng.org/ele/arduino/i2c.html

以下のファイルの (最新)をありがたく、使わさせていただきました。いろいろな液晶に対応する優れたインクルードファイルのようです。
sc1602-i2cインクルードファイル
上記の説明通りにダウンロードして、展開し、LibrariesフォルダにコピーすればインクルードファイルをIDE上から他のインクルードファイルと同様に指定読み込みできるようになりました。

子のインクルードファイルは通常のArduinoにはありません。

なので、通常のArduinoの場合も一応確認しておきます。
スケッチのサンプルは秋月の液晶の説明書上のその物になります。

// Arduino 1.8.9
#include <Wire.h>
#define LCD_ADRS 0x3E

char moji[]="SC1602BBWB-XA-GB-G";

void setup() {
  // put your setup code here, to run once:
  Wire.begin();
  init_LCD();
}

void loop() {
  for(int i=0;i<16;i++)
  {
    writeData(moji[i]);
  }
  writeCommand(0x40+0x80);
  for(int i=0;i<16;i++)
  {
    writeData(i+0xB1);
  }
  while(1){}
}

void writeData(byte t_data)
{
  Wire.beginTransmission(LCD_ADRS);
  Wire.write(0x40);
  Wire.write(t_data);
  Wire.endTransmission();
  delay(1);
}
void writeCommand(byte t_command)
{
  Wire.beginTransmission(LCD_ADRS);
  Wire.write(0x00);
  Wire.write(t_command);
  Wire.endTransmission();
  delay(10);
}

void init_LCD()
{
  delay(100);
  writeCommand(0x38);
  delay(20); 
  writeCommand(0x39);
  delay(20);
  writeCommand(0x14);
  delay(20);
  writeCommand(0x73);
  delay(20);
  writeCommand(0x52);  // 5V動作用
  //writeCommand(0x56);  // 3V動作用
  delay(20);
  writeCommand(0x6C);
  delay(20);
  writeCommand(0x38);
  delay(20);
  writeCommand(0x01);
  delay(20);
  writeCommand(0x0C);
  delay(20);
}

インクルードファイルは Wire.hになるようですが、やはり、初期化ルーチンなどの事細かな設定や、データとコマンドルーチンも作製する必要があり、若干余分にスケッチが長くなります。
ま、つかうことは可能ですが、やはり、専用のライブラリを作っていただいた方の方が、スケッチも簡単になります。

以上で問題なく液晶もI2C接続で出来ることがわかりました。 次は何をしましょうか?

つづく ?