IO-Animation

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を交互に切り替える例となります。

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
となり、完了後デバイスから完了が通知され、この関数を抜けることになります。

await obniz.io.repeatWait([
  {
    duration: 1000,
    state: function(index){
      obniz.io0.output(true)
    }
  },{
    duration: 1000,
    state: function(index){
      obniz.io0.output(false)
   }
  }
], 4)