IO: 入力する

今回は出力の逆「入力」をやってみましょう。
入力は「ioにかけられている電圧を調べる」ということです。

実験のために「obnizから出力した電圧をobnizで読み取る」回路を作ってみましょう。
io0とio1をこのようにつなぎます。

入力する

ではやってみましょう。
obnizでioの電圧を調べてtrueかfalseかを調べるにはinputWaitを使います。

var value = await obniz.io1.inputWait();

このようにすることで、obnizのio1がtrueといっていいほど電圧が高いのか、それともfalseと言えるほど電圧が低いのかを調べることができます。

その結果は変数であるvalueというのに代入されます。valueにtrueかfalseが入っているということです。

awaitというのが出てきました。これは何でしょうか。

これは、「返事を待ちたいときに使う」ものです。

obnizとはインターネット経由でつながっているので、ioにかけられている電圧を調べるにはインターネット経由で「ねぇ、ちょっと調べてよ」とコマンドを送って、その返事を待つ必要があります。
awaitというのはその返事を待つためのものです。

返事を待たないこともできます。

var value = obniz.io1.inputWait();

こうやって書くと、返事を待たずに次のプログラムにさっさと行ってしまいます。
そうするとvalueにはtrueもfalseも入らず、ぜんぜん違う物が入ってしまいます。

これでは意味がありませんので、awaitで待ちます。
obniz.jsで、待たなければならない関数には必ずWaitという文字が入っています。

inputWait()
sendWait()
readWait()

これらはすべてasync/awaitという仕組みで動いておりawaitと書いて、返事が帰ってくるまで待つ必要があるものです。

さて、やってみましょう。

何にもつないでいないと電圧がフラフラしてちゃんと測れないので
io0からtrueを出力(つまり5vにするということ)をしてみましょう。
そして、電線で繋いだio1の値を読み取ってみます。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  obniz.io0.output(true);
  var value = await obniz.io1.inputWait();
  console.log(value);
}

まず、io0にoutput(true)をしていますからio0は5vになります。電線でつながっているのでio1も5vとなります。trueかfalseかというとtrueになるべきです。

次にinputWaitでio1のture/falseを調べています。awaitで返事が来るまで待機します。
そして、結果がわかったらvalueにはいります。

console.log(value)で、その中身を表示するのでコンソールにtrueというのが表示されると思います。

何ボルトでtrueなの?

電圧を調べてtrue/falseをかえすといいましたが、一体何vからがtrueなのでしょうか。

5vがtrue,0vがfalseだとして、2.5vは?

obnizの入力はCMOS 3.3V の5vトレラントです。
ちょっと難しいですが、雑に言うと、「2v以上がtrue」そして「0.8v以下でfalse」です。

じゃあ1.5vは?それは「変わらない」というべきかと思います。

5vならtrueということにしておけば4.9vぐらいになにかの理由で電圧が下がってもtrueということにしてもいいでしょう、これが「デジタル」がノイズに強い理由です。
falseなのかtrueなのかという情報をわざわざ0~5vの電圧を使って伝えるのです。

0vも0.1vぐらいならfalseのままでいいでしょう。
しかし、1vぐらいはどうしましょうか。そういうときは「前のままにする」のです。
5vがさがって1vになってもtrueということにします。そしてとうとう0.8vより下になったらfalseにするのです。
じゃあ逆に0vが上がって0.8になったら?それは、まだfalse。そして2vまで上がったときにはじめてtrueになったということにします。
(コンピューターによってはここまでちゃんとしてないことがあります。「2vのときはどうなるかわからん」というものもあります。)

それで「2v以上がtrue」そして「0.8v以下でfalse」ということです。つまり「2v以上まであがったらtrue」そして「0.8v以下までさがったらfalse」。

じゃあ最初に1vだったらどっちなの?それはコンピューターによります。

詳しくは
https://en.wikipedia.org/wiki/Logic_level

callback

obniz.jsではasync/await以外にcallback形式でioの状態を知る方法もあります。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  obniz.io1.input(function(value){
    console.log("value is " + value);
  });
  obniz.io0.output(true);
}

このようにすると「io1がtrueからfalseにまたはfalseからtrueに変わったときだけ関数を呼び出す」ということができます。
変わらない限り呼び出されません。
上記のプログラムを実行すると

value is false
value is true

というログが出てくると思います。
これは、まずio1の最初の値がfalseとして読み出され、その後にtrueになった。
ということを示しています。

trueになったのはio0がtrueになって5vが出力されてそれがio1に伝わったからです。

このようにcallbackにすれば処理を止めなくてもio1の変化を知ることができます。

end

outputと同様にinputも終了させることができます。
outputと違って、inputをしていてもしてなくても外から見た時のobnizのioはほぼ同じです。電圧を調べてtrueかfalseかを調べるのにほとんど電流は消費されないからです。

終了させるにはoutputのときと同じく

obniz.io0.end()

とします。



Next : AD: read io voltage

You will Get in Few Days

Circuit for Starter “obniz Board” is available on Amazon and other online stores.
You can get it at below

Our products and resellers

Forum

Visit our developer’s forum to discuss and discover technologies.

Forum

Contact

Feel free to contact out support and technical team.

Contact us