io animationはデバイスに対してある決まったIOの変化を登録して実行できる仕組みです。 ネットワーク経由であっても高速・正確なIOの操作が行なえます。ダイナミック点灯や、ステッピングモーターの制御などに利用できます。
永続的なアニメーション
登録したアニメーションをプログラムに関係なく動かし続ける場合に利用します。io.animation()関数で設定します。アニメーションの名前と、ioの状態を配列で指定することで開始され、一時停止するか削除するまで継続されます。開始済みの一時停止にはobniz.io.animation("animation-1", "pause")
再開にはobniz.io.animation("animation-1", "resume")
を利用します。
アニメーションはioの状態を1つのまとまりとし、その継続時間とともに1つにアニメーションとなります。以下の例ではそれぞれ10msecごとにio0とio1のON-OFFを交互に切り替える例となります。
// Javascript Example
obniz.io.animation("animation-1", "loop", [
{
duration: 10,
state: function(index){ // index = 0
obniz.io0.output(false)
obniz.io1.output(true)
}
},{
duration: 10,
state: function(index){ // index = 1
obniz.io0.output(true)
obniz.io1.output(false)
}
}
])
単発のアニメーション
正確なIOの変化を行いたい場合に利用します。ステッピングモーターをある角度まで回転させる場合などに利用できます。repeat.wait()で登録されたアニメーションは無限回数でなく、指定された回数のみ実行され、完了するまで待機します。
以下ではio0のONを1000msec、io1のOFFを1000msecというアニメーションが4ステップ実行されます。つまり
1. io0 ON
2. io0 OFF
3. io0 ON
4. io0 OFF
となり、完了後デバイスから完了が通知され、この関数を抜けることになります。
// Javascript Example
await obniz.io.repeatWait([
{
duration: 1000,
state: function(index){
obniz.io0.output(true)
}
},{
duration: 1000,
state: function(index){
obniz.io0.output(false)
}
}
], 4)