RailuinoのS88機能(TrackReporterS88)のデコーダへのアクセス処理(Refresh()関数)にかかる時間が、数百ms以上占有しているため、通常の機関車やアクセサリ制御の処理の余裕分がなくなってしまっておりました。このため、1つのArduinoに集約する事が困難となりました。
S88のような通信処理の信号部分の実装をデジタル回路で組むと、シンプルでたいした処理量でもないのですが、ソフトで実装すると、ウェイトとGPIOのパルス設定だけの実装で、さらにこのウェイト中は何もできないものなので、非常に困った事になってしまいます。S88は通信速度が遅いようなのでウェイト時間が長過ぎて、このような問題を引き起こしてしまいます。
仕方が無いので、S88の検出用に別のArduinoに分離することとし、パソコン上(Desktop Station)にUSBで別に接続する事で対処する事となりました。本当はUSBは一本化したかったですが、CAN-BUS等で既に占有しているため、Arduino同士をつなぐ通信の余裕がありませんでした。
つきましては、S88を使う場合には、パソコン側のUSBを合計2つ占有する事となります。設定に関しても、S88検出用のシリアルポートを設定するところを追加したので、S88デコーダにつながるArduinoのシリアルポートを別に設定しなければなりません。
まとめ:
・S88機能を使う場合はArduinoを追加で導入しないといけない(もう一台Arduinoがないといけない)
・書き込みには改造版Railuinoが必要(S88ケーブル用の信号ピン設定で、デジタルピン3,4,5番に振り直し。Railuino作者が沈黙なので。)
・Desktop Stationでシリアルポート設定がもう一個追加(Arduinoが増えたので)
・両ArduinoのGNDは短絡(接続)して共通にする(線路で短絡型の検出方法を使うために必須)
試験風景:

機器のブロック図:

動画(自動運転機能ではなく、S88の検知をトリガにスクリプトを実行させているものです):
設定したスクリプト(速度を落として進行方向を逆にして、加速する処理):
SPEED,0,128
WAIT,10
SPEED,0,64
WAIT,10
SPEED,0,0
DIRECTION,0,2 (※反対側は1のFWD)
SPEED,0,64
WAIT,10
SPEED,0,128
バグだしが完了してから、最新ソフトのリリース、S88用ハードウェアの構築方法をアップロードします。