GreenPAK(SLG46826)をI2C経由で触ってみる その4 ライブラリ化

概要

前回までで基礎実験は終わったので、ライブラリ化をしてみたいと思います。最初は最低限を作ってから、ライブラリマネージャに登録するところまでをやりたいと思います。

作成物

上記に作成したライブラリがあります。もうちょっと手を入れる予定ですが、まずはライブラリマネージャに登録するために最低限必要なものだけ作りました。

機能一覧

とりあえず実装したのは最低限の機能になります。

I2Cスキャン:scanSlg()

とりあえずコントロールコード0から16までを引数で渡して、I2Cスキャンして連番の4アドレスに反応があったら存在していると判定しています。本当はもう少しちゃんと調べたほうがいいかもしれません。

回路データの読み出し:readSlg()

EEPROMの存在を忘れていましたが、回路データのフラッシュからの読み出しになります。

回路データの削除:eraseSlg()

回路データを初期化します。現状は削除するとかならずコントロールコードが0になってしまいますので、複数接続する場合には注意してください。

回路データの書き込み:writeSlg()

256バイトのデータをフラッシュに書き込みます。コントロールコードの書き換えは今の所サポートしていません。別関数にするかな。。。

SLGのリセット:resetSlg()

リセット信号を送ります。コントロールコードが変更された場合(削除or書き込み)はリセットをする必要があります。

GPIOの読み出し:digitalRead()

IOの信号レベルを取得します。

スケッチ例

ScanSLG

#include "I2C_SLG46826.h"

I2C_SLG46826 slg(Wire);

#define SLG46826_I2C_SDA 32
#define SLG46826_I2C_SCL 33

void setup() {
  // Init Serial
  Serial.begin(115200);
  delay(500);

  // Init I2C
  Wire.begin(SLG46826_I2C_SDA, SLG46826_I2C_SCL);
}

void loop() {
  Serial.printf("SLG46826 SCAN\n");
  for (int i = 0; i < 16; i++) {
    if (slg.scanSlg(i)) {
      Serial.printf(" Control Code = %d\n", i);
    }
  }
  Serial.println();

  delay(5000);
}

説明用に作った、短いスケッチ例です。I2Cを初期化して、コントロールコードを引数に存在チェックをしています。

SerialSLG

こっちが実際の利用例です。

実行すると、上記のような出力がシリアルモニタに表示されます。上の赤く囲っている場所にコマンドを投げ込みます。

なんと、複数行のテキストもここにペーストすると1行になります。上記のようにWRITEコマンドを使って回路データをペーストして書き込みが可能です。

いまのところ、あまり使いみちはないと思いますが上記みたいにIOの状態もわかります。

ライブラリライブラリに申請

最低限の機能を作って、形を整えたので申請をしました。一週間前後で登録されるかな。ちなみに現状はざっくり作っているので、どんどん更新されていくと思うので注意してください。

まとめ

ほんとうはもう少し別のものも作りたかったのですが、まずはライブラリ化しておきます。複数接続することはあまりないのでコントロールコードは省略した場合は自動選択でもいい気がしてきました。

続編

コメント