プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

obniz フルカラーLEDライトを操作するサンプルコード

■メイン処理

<script>
    var obniz = new Obniz('[ID]');

    //消灯を押下した時の状態を0・1で切替
    var switchFlag = 0;

    obniz.onconnect = async function () {
        //パーツライブラリに登録してwiredによる呼び出しを可能にする
        Obniz.PartsRegistrate(MyLed);

        //端子0・2・3はアノード(+極) 1はカソード(-極)
        var led = obniz.wired("MyLed", { red:0, cathode:1, blue:2, green:3 } );

        //赤点灯
        $('#red_on').on('click', function() {
          led.redOn();
        });

        //青点灯
        $('#blue_on').on('click', function() {
          led.blueOn();
        });

        //緑点灯
        $('#green_on').on('click', function() {
          led.greenOn();
        });

        //順に全て点灯
        $('#all_on').on('click', async function() {
            var res = switchFlag;
            console.log('全点灯ON時のswitchFlag:' + res);

            //デバイス接続中は繰り返す
            while (obniz.connectionState === 'connected') {
                try {   
                    console.log('条件分岐時のswitchFlag:' + switchFlag);

                    //消灯が押下されたかどうかの判定
                    if (res != switchFlag) {
                        switch (switchFlag) {
                            case 0:
                                switchFlag = 1;
                                console.log('switchFlagを0に変更');
                                break;
                            case 1:
                                switchFlag = 0;
                                console.log('switchFlagを1に変更');
                                break;
                        }
                    console.log('全点灯解除');
                    break;
                    }

                //赤青緑の順にLEDを点灯
                led.allOn();

                // 通信確認
                await obniz.pingWait();

            } catch(e) {
                console.log('error!!');
            }
          }
        });

        //消灯
        $('#all_off').on('click', function() {
            led.allOff();

            //全点灯時の消灯の為に消灯を押下される度にフラグを切り替える
            switch (switchFlag) {
                case 0:
                    switchFlag = 1;
                    break;
                case 1:
                    switchFlag = 0;
                    break;
            }

        });    
    };
</script>

 
 

自作パーツ

"use strict";
/**
 * @packageDocumentation
 * @module Parts.MyLed
 */
class MyLed {
  constructor() {
    <!-- キー -->
    this.keys = ['red', 'cathode', 'blue', 'green'];
    <!-- 必須キー -->
    this.requiredKeys = ['red', 'cathode', 'blue', 'green'];
  }

  <!-- 部品名 -->
  static info() {
    return {
      name: 'MyLed',
    };
  }

  <!-- obniz.wiredが呼ばれた時に呼ばれる関数 -->
  wired(obniz) {
    this.obniz = obniz;
    this.io_red = obniz.getIO(this.params.red);
    this.io_red.output(false);
    this.io_cathode = obniz.getIO(this.params.cathode);
    this.io_cathode.output(false);
    this.io_blue = obniz.getIO(this.params.blue);
    this.io_blue.output(false);
    this.io_green = obniz.getIO(this.params.green);
    this.io_green.output(false);
  }

  <!-- 赤点灯 -->
  redOn() {
    this.io_red.output(true);
  }

  <!-- 青点灯 -->
  blueOn() {
    this.io_blue.output(true);
  }
  <!-- 緑点灯 -->
  greenOn() {
    this.io_green.output(true);
  }

  <!-- 順に全て点灯 -->
  allOn() {
    this.io_red.output(true);
    obniz.wait(1000);
    this.io_red.output(false);
    this.io_blue.output(true);
    obniz.wait(1000);
    this.io_blue.output(false);
    this.io_green.output(true);
    obniz.wait(1000);
    this.io_green.output(false);
  }

  <!-- 消灯 -->
  allOff() {
    this.io_red.output(false);
    this.io_blue.output(false);
    this.io_green.output(false);
  }
}

<!-- キーをthis.paramsとして使用可能にする -->
if (typeof module === 'object') {
  module.exports = MyLed;
}