単純折り返し動作(センサ)について説明します。
Simple wrapping behavior (sensor) describes.
以下の”エリア6”と”エリア1”部をセンシングすることで、単純折り返し自動運転してみます。
import jarray
import jmri
class A_tanjun_orikaeshi(jmri.jmrit.automat.AbstractAutomaton) :
def init(self):
self.Sensor1 = sensors.provideSensor("1")
self.Sensor6 = sensors.provideSensor("6")
self.throttle = self.getThrottle(5, True)
if (self.throttle == None) :
print "Couldn't assign throttle!"
return
def handle(self):
# <forward>
self.throttle.setIsForward(True)
self.throttle.speedSetting = 0.30
self.waitSensorActive(self.Sensor1)
self.throttle.speedSetting = 0
self.waitMsec(2000)
# <reverse>
self.throttle.setIsForward(False)
self.throttle.speedSetting = 0.30
self.waitSensorActive(self.Sensor6)
self.throttle.speedSetting = 0
self.waitMsec(2000)
return 1# to continue
# end of class definition
# create one of these
a = A_tanjun_orikaeshi()
# set the name
a.setName(" A_tanjun_orikaeshi script")
# and start it running
a.start()
実際のスクリプトは、以下のとおりです。
これで実行すると、「前進→”エリア1”検知→停止→後進→”エリア6”検知→停止」
を繰り返す動作をします。
上記の赤文字部分が、センシング部分になります。
例をとって説明します。
self.Sensor1 = sensors.provideSensor("1")
self.Sensor6 = sensors.provideSensor("6")
BDL168のセンサ”1”を”Sensor1”に割り当てます。
“6”も同じです。
self.waitSensorActive(self.Sensor1)
“Sensor1”がアクティブになるのを待っている行になります。
アクティブになったら次の行に行きます。
self.waitSensorActive(self.Sensor6)
同じく“Sensor6”についての行になります。
これを動かしたときの、LocoNet監視の表示は以下のようになります。
実際に動かした動かした様子が以下の動画です。