SSブログ

Kato SoundBoxをArduinoで操作する。その6 [SoundBox]

 多分、このシリーズこれで最後です。
 スケッチの中身の説明ですが、大きな部分はYaasan様のDSshieldを流用していますので、その部分については割愛します。
 SoundBox関連だけの話をすると、
 一番簡単なスケッチとしては、

#include <SoftwareSerial.h>
SoftwareSerial mySerial(A0, A1); // RX, TX

void setup() {
// ソフトウェアシリアルの初期化
mySerial.begin(38400);
mySerial.setTimeout(300);

delay(1000);
// 警笛鳴らす
mySerial.print("\n0101800001000180:"); //警笛鳴らす
delay(500);
mySerial.print("\n0101800001000081:"); //警笛消す

}

void loop() {
}

こんな感じです。繋ぎは、その4の通りで、スケッチを動かすと、警笛を0.5秒鳴らします。
ボリュームとかはそれなりに大きくしておいてください。

スピードとかは値によって、パリティが変わりますので、シリアルの直書きが面倒なため、
その4のスケッチでは、
sc_function.cppに命令をまとめています。モーター関連は動作させる前か動作させながらかでSTART,SYNCを合わせてください。

使い方ですが、

#include "sc_function.h"
とインクルードしておきます。

Setupでは
void sc_init_serial()
を呼び出し、ソフトウェアシリアルを初期化します。

あとは、loopなどで、好きなように命令を送るだけです。

boolean sc_SetLocoDirection(word address, unsigned char inDirection)
は方向を変える命令です。
address は49155を入れてください。(DCCの3です)
inDirectionは1、2のどちらかです。

boolean sc_SetLocoSpeedEx(word address, int inSpeed, int inProtcol)
はスピードを変える命令です。
address は49155を入れてください。(DCCの3です)
inSpeedは0~1023の1024段階です。
inProtcolは0を入れておいてください。(使ってないです。たぶん)

bool sc_SetLocoFunction(word address, unsigned char inFunction, unsigned char inPower)
は音を鳴らす命令です。
address は49155を入れてください。(DCCの3です)
inFunctionは1~6がボタンと対応しており、7、8は警笛の変わり種として登録しています。
inPowerは0:off,1:onです。

Start,Syncの命令は作っていません。

各命令は内部的に
String run_order(String order)
関数を呼んでいます。
この関数はorderにSmartControllerから出す命令を書くと、
前に[LF]を、後ろにパリティと「:」をつけて命令を送信し、SoundBoxからの受信文字列を返します。
ただ、受信文字列にどんな意味があるのかよくわからないので、現状、返り値は捨てていたりしますが・・・。

 あとは、アイドルパケットみたいなものを出すかどうか?です。(出さなくてもよさそうでしたが)
 それと、SmartControllerとSoundBoxとの通信では初期に13行ぐらいの初期化通信がありましたが、やらなくても動きました。ただし、SoundBox側でボリュームとか合わせる必要があります。

 説明は以上です。
 そのうち、DCCデコーダーにsc_functionを組み込んで、DCCで音の出る据え置き型コントローラを操作できるようにしようと考えています。コントローラだけで2万円しますけどね。

コメント(0) 

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。