概要
前回までで基礎実験は終わったので、ライブラリ化をしてみたいと思います。最初は最低限を作ってから、ライブラリマネージャに登録するところまでをやりたいと思います。
作成物
上記に作成したライブラリがあります。もうちょっと手を入れる予定ですが、まずはライブラリマネージャに登録するために最低限必要なものだけ作りました。
機能一覧
とりあえず実装したのは最低限の機能になります。
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の状態もわかります。
ライブラリライブラリに申請
最低限の機能を作って、形を整えたので申請をしました。一週間前後で登録されるかな。ちなみに現状はざっくり作っているので、どんどん更新されていくと思うので注意してください。
まとめ
ほんとうはもう少し別のものも作りたかったのですが、まずはライブラリ化しておきます。複数接続することはあまりないのでコントロールコードは省略した場合は自動選択でもいい気がしてきました。
コメント