2016年8月14日日曜日

Johnny-Fiveでマイコン制御32 - シフトレジスタ

○ShiftRegisterオブジェクトを作成する
 シフトレジタを制御するには、ShiftRegisterオブジェクトを使います。ShiftRegisterオブジェクトは、物理的なボードに接続された単一のシフトレジタを表すオブジェクトのコレクションです。ShiftRegisterオブジェクトを作成するには、ShiftRegisterクラスのコンストラクタを使います。引数には、dataclocklatchreset(オプション)用のピンの値を含む配列またはオブジェクトを指定します。
new five.ShiftRegister([ data, clock, latch, [reset]]);

たとえば、2ピンをdata3ピンをclock4ピンをlatchに使用するShiftRegisterオブジェクトを作成するには、次のように書きます。
new five.ShiftRegister([2, 3, 4]);

 オブジェクトで指定する場合は、次のように書きます。
new five.ShiftRegister({
  pins: [2, 3, 4]
});

// または
new five.ShiftRegister({
  pins: {
    data: 2,
    clock: 3,
    latch: 4
  }
});

シフトレジスタに8ビットデータを送信する
 シフトレジスタに8ビット(1バイト)のデータを送信するには、「send」メソッドを使います。引数に送信する8ビットのバイト値、またはバイト値の配列を指定します。
send(バイト値)
send([ バイト値1, バイト値2])

たとえば、「0x11」を送信するには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // ShiftRegisterオブジェクトを作成
  var register = new five.ShiftRegister([2, 3, 4]);

  // データを送信
  register.send(0x11);
});

・配線図


シフトレジスタをクリアする
 シフトレジスタをクリアするには、「clear」メソッドを使います。たとえば、5秒後にシフトレジスタをクリアするには、次のように書きます。
  // データを送信
  register.send(0xFF);
  // 5秒後
  this.wait(5000, function(){
    // シフトレジスタをクリア
    register.clear();
  });

シフトレジスタのリセットを制御する
 シフトレジスタのリセットを制御するには、まずresetピンを指定してShiftRegisterオブジェクトを作成します。たとえば、9ピンをresetピンに設定するには、次のように書きます。
new five.ShiftRegister({
    pins: {
      data: 2,
      clock: 3,
      latch: 4,
      reset: 9,
    }
  });

 次の「reset」メソッドを使って、resetピンを「HIGH」にします。
  // resetピンをHIGIにする
  register.reset();
 データの送信処理などは、「reset」メソッドの実行後に行います。

・配線図

7セグメントLEDに数字を表示する
 シフトレジスタを使用した7セグメントLEDの制御回路で、数字を表示するには、「display」メソッドを使います。引数には、数字の09を数値または文字列で指定します。
display(数字)

 たとえば、09の数字を表示するには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // ShiftRegisterオブジェクトを作成
  var register = new five.ShiftRegister([2, 3, 4]);
  var number = 0;

  this.loop(500, function() {
    // 09の数字を表示
    register.display(number++)
    if (number > 9) {
      number = 0;
    }
  });
});

小数点を非表示するには、数字「.」を付けて指定します。
  this.loop(500, function() {
    // 小数点付で09の数字を表示
    register.display((number++) + ".")
    if (number > 9) {
      number = 0;
    }
  });

※カソードコモンの場合、動作が逆になっていて「.」を付けると、小数点が消えます(20168月現在)

・配線図-カソードコモン

 なお、アノードコモンの7セグメントLEDを使用する場合、オプションの「isAnode」に「true」を指定して、ShiftRegisterオブジェクトを作成する必要があります。
new five.ShiftRegister({
    isAnode: true,
    pins: [2, 3, 4]
});

・配線図-アノードコモン


0 件のコメント:

コメントを投稿