So-net無料ブログ作成
  • ブログをはじめる
  • ログイン

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:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。