はじめに
RDM-01をobnizで遊べるように、obnizを使ってGPIOが変化した時にのみ呼ばれるサンプルを作ろうと思い、それで作ってみたのが以前obnizでRDM-01を動かすの記事でした。
しかし、これを書いた後にobnizユーザーさんから
"ループしなくてもGPIOの変化が取れるよ!"
(なんだって!!!)
と教えてもらったので、改めてobninzのライブラリを見直して、実際に実装しました。
サンプルコード
サンプルコード自体はRDM-01のgithubにUPしました。
早速サンプルコードを。
obnizRDM_sample.js
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@1.16.1/obniz.js" crossorigin="anonymous"></script>
</head>
<body>
<div id="obniz-debug"></div>
<h1>RDM-01 sample</h1>
<div id="print"></div>
<h2>画像のようにobnizと接続してください</h2>
<img src="https://github.com/norioike/DTMF_module_RDM-01/blob/master/obniz_sample/obniz_connection_image.JPG?raw=true">
<script>
let Decode = ["D","1", "2", "3", "4","5", "6", "7", "8","9", "0", "*", "#","A", "B", "C"]
var flg = false;
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
//電源の設定
var usb = obniz.wired("USB" , {gnd:5, vcc:6} );
usb.on();
//ディスプレイ
obniz.display.clear();
obniz.display.print("RDM-01起動!");
obniz.io0.input(async function(value){ //StDの電圧が変化した時に呼ばれる。
if(value){ // LOW -> HIGHになったとき
let q1 = await obniz.io4.inputWait();
let q2 = await obniz.io3.inputWait();
let q3 = await obniz.io2.inputWait();
let q4 = await obniz.io1.inputWait();
let result = (q4 << 3) + (q3 << 2) + (q2 << 1) + q1
obniz.display.clear();
obniz.display.print(Decode[result]);
console.log(Decode[result])//PCの画面上にもログとして表示する
}else{ // HIGH -> LOWになったとき
console.log("DTMF sound stopped");
}
});
}
</script>
</body>
</html>
このままコピペしてもらえれば動かすことができるようになっています。
ポイントは
obniz.io0.input(async function(value){
この1行で、io0の入力がHIGH -> LOW, LOW -> HIGHになったときにのみ呼ばれるようになります。
別にループする必要はなく動かすことができるので、サンプルコードのように、シンプルにまとめることができました。