2016年8月2日火曜日

Johnny-Fiveでマイコン制御9 - Board その3

ループを実行する
 ループ(繰り返し処理)を実行するには、「loop」メソッドを使います。間隔はミリ秒(ms)単位で指定します。コールバック関数には、繰り返す処理を書きます。
loop (間隔, コールバック関数())

 たとえば、500ミリ秒間隔でLEDの点灯/消灯を繰り返すには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  var state = 0;
  this.pinMode(13, five.Pin.OUTPUT);
  // 500ミリ秒間隔で処理(LEDの点灯/消灯)を繰り返す
  this.loop(500, function() {
    board.digitalWrite(13, (state ^= 1));
  });
});


一定時間待ってから処理を実行する
 一定時間待ってから処理を実行するには、「wait」メソッドを使います。待ち時間はミリ秒(ms)単位で指定します。コールバック関数には、実行する処理を書きます。
wait (待ち時間, コールバック関数())
 たとえば、13ピンを1((1000ミリ秒)後にLOW(0)に切り替えるには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // 13ピンをデジタル出力に設定
  this.pinMode(13, five.Pin.OUTPUT);
  // 13ピンをオン(HIGHを出力)
  this.digitalWrite(13, 1);
  // 1000ミリ秒後に13ピンをオフ(LOWを出力)
  this.wait(1000, function() {
    board.digitalWrite(13, 0);
  });
});


○REPLを使う
REPL(Read-Eval-Print-Loop)は、対話型の実行環境です。REPLにオブジェクトを登録するには、REPLの「inject」メソッドを使います。REPLにオブジェクトを登録することで、オブジェクトの持つメソッドをコマンドラインから実行したり、オブジェクトの持つプロパティを参照したりすることができます。
 たとえば、REPLledオブジェクトを登録するには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
  this.repl.inject({
    // ledオブジェクトをREPLに登録
    led: new five.Led(13)
  });
});

 ledオブジェクトの持つ「on」メソッドを実行するには、コマンドプロンプトから、次のように入力します。
led.on()

 また、REPLには、独自のメソッドを定義して登録することもできます。たとえば、LEDを点灯/消灯する「on/off」メソッドを登録するには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
  // ledオブジェクトを作成
  var led = new five.Led(13);
  this.repl.inject({
    // LEDをオン/オフするメソッドを登録
    on: function() {
      led.on();
    }
    off: function() {
      led.off();
    }
  });
});
 定義したメソッドを実行するには、コマンドプロンプトから、「on()」または「off()」と入力します。

ボードの切断を検出する
 スクリプトを[Ctrl]+[C]で中断する際には、「exit」イベントが発生します。ボードから切断される前に必要なクリーアップを行うには、このハンドラを使います。たとえば、スクリプトを[Ctrl]+[C]で中断したときに、LEDを消灯させるには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
  var led = new five.Led(13);
  led.on();

  // [Ctrl]+[C]で中断したときにLEDを消灯
  this.on("exit", function() {
    led.off();
  });
});


0 件のコメント:

コメントを投稿