試作品の製作時に、スイッチやLEDをいろいろな構成で試したい。
柔軟に組み替えられるように、スイッチやLEDを何個かずつのブロックにして、それぞれにマイコンを搭載してモジュールにすることを考えた。
そこで問題となるのがマイコン間の通信方法。
UARTで各モジュールと一対一で通信するのは、UARTのチャンネル数が足りなくなりそう。
I2Cだと、アドレスを一つ一つ定義して、何らかの方法で設定していかないといけない。
NeoPixelのLEDの通信方法を見て、これはいいなと思った。
接続位置とデータの並びで、通信対象を決めることができる。
この方法をベースにして、LEDのブロックを制御するだけではなく、スイッチの入力情報も吸い上げられるようにした双方向の通信方法を考えることにした。
スイッチやLEDのモジュールを、数珠繋ぎで接続する。
制御用のマイコンから、各モジュールに対しての送信データを、接続された順番で並べて一気に流す。
最初に接続されたモジュールは、自分宛のデータだけを取り出し、残りのデータを下に流していく。
このようにして、各モジュールに対しての送信を一度にできる。
戻りのデータは逆の手順。
一番下に接続されたモジュールからデータが返信される。
そのデータを受けた次のモジュールが、自分からのデータを付け足してさらに上に送る。
こうして戻ってきたデータは、各モジュールからのデータが接続順に並んだものになる。