概要
その1の続き
その1 http://qiita.com/hws-hitorobo/items/dc594aa1799742736d0c
リポジトリ
4. Inputがあったら定期処理を開始
Waitを拡張して定期的にoutputするボックスを作成します。
そのままですが、定期的にボックスを実行したい場合に使います。
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
def onLoad(self):
self.isStop = False
def onUnload(self):
self.isStop = True
def onInput_onStart(self):
import qi
self.waiting = qi.async(self.onTrigger, delay=int(self.getParameter("Time(s)") * 1000 * 1000))
def onInput_onStop(self):
self.isStop = True
def onTrigger(self):
if not self.isStop:
self.output()
self.waiting = qi.async(self.onTrigger, delay=int(self.getParameter("Time(s)") * 1000 * 1000))
else:
self.onUnload()
原型が結構なくなってますが、
onTriggerのなかでフラグを確認して、
onStop入力がない場合は出力しつつ、
新しいWaitを登録しています。
使い方によっては危険なので、注意して使ってください。
5. Inputがあったら指定回数だけ定期処理を開始
上記のボックスをさらに拡張して
指定回数だけのループで終了するようにします。
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
def onLoad(self):
self.count = 0
def onUnload(self):
self.count = 0
def onInput_onStart(self):
self.count = self.count + self.getParameter("Count")
import qi
self.waiting = qi.async(self.onTrigger, delay=int(self.getParameter("Time(s)") * 1000 * 1000))
def onTrigger(self):
self.output()
self.count = self.count - 1
if self.count > 0:
self.waiting = qi.async(self.onTrigger, delay=int(self.getParameter("Time(s)") * 1000 * 1000))
else:
self.count = 0
先ほどのフラグの代わりにカウンターを使ってます。
6. 3つのシグナルを待つWait For Signals
そのままです。
そもそもこういう作りになってしまったら、修正するべきかと思いますが、
使い道はあるかもしれません。
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self, False)
def onLoad(self):
self.ok = [False]*3
def onUnload(self):
#puts code for box cleanup here
""
def onStart(self, nInput):
self.ok[nInput-1] = True
bOutput = True
for bOk in self.ok:
bOutput = bOutput and bOk
if( bOutput ):
self.ok = [False]*3
self.signalsReceived()
def onInput_signal1(self):
self.onStart(1)
def onInput_signal2(self):
self.onStart(2)
def onInput_signal3(self):
self.onStart(3)
Wait For SignalsのInputを3つにして中のリストも3つにしただけです。
ほかにもいろいろ作ってますが、
結構ピンポイントなものが多いので、
よく使うものだけ抜粋しました。