var uart1 = obniz.getFreeUart();の「uart1」部分について



  • UARTのstartがうまく行きません。
    var uart1 = obniz.getFreeUart();の「uart1」部分ですが、任意の変数名でよいのかと思ったら「uart0」又は「uart1」以外の変数名にした場合、startでエラー(関数から戻ってこない)になっているように見受けられます。何かからくりありますか?


  • administrators

    @Google-Homer
    任意の変数で動作します、他の部分のプログラムでその変数を使っていたり、startの書き方になにか違いがあるような気がします。startの部分までのプログラムを共有いただけますか?



  • 正常と思われるケースと異常と思われるケースの実行結果のスクショ及び異常ケースのコードを送ります。よろしくお願いします。
    ■正常ケース、Afterが表示されたのでstart正常と解釈
    0_1547749852611_DSC_0173.JPG

    ■異常ケース、Afterが表示されないのでstart異常と解釈
    0_1547749856082_DSC_0174.JPG

    ■異常ケースのコード
    <!-- HTML Example -->
    <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>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
    <script src="https://unpkg.com/obniz@1.15.1/obniz.js" crossorigin="anonymous"></script>
    <script src="https://unpkg.com/obniz-parts-kits@0.9.5/ai/index.js"></script>
    </head>
    <body>
    <script>
    var obniz = new Obniz("XXXX-XXXX");
    obniz.onconnect = function () {
    obniz.io0.output(false);
    ua0 = obniz.getFreeUart();
    obniz.display.clear();obniz.display.print("Before start");
    obniz.ua0.start({tx:1,rx:2});
    obniz.display.clear();obniz.display.print("After start");
    }
    </script>
    </body>
    </html>


  • administrators

    @Google-Homer
    ありがとうございます。

    ua0 = obniz.getFreeUart();
    obniz.ua0.start({tx:1, rx:2});
    

    とありますが。正しくは

    ua0 = obniz.getFreeUart();
    ua0.start({tx:1, rx:2});
    

    となります。

    ua0はただの変数なので、obnizオブジェクトにくっつくものではありません。
    obnizと関係あるものでもobnizから切り離して1つの変数にできるのがjavascriptの特徴でもあります。



  • 回答頂いた内容と下記サンプルとの関係を教えて下さい。

    0_1547775128805_Screenshot_20190118-102516.png


  • administrators

    @Google-Homer
    obnizにはuart0とuart1があります。どちらも使ってない限りは未使用です。

    obniz.uart0.start({});
    obniz.uart1.start({});
    

    どちらでも良いので、まだstartしてないものが欲しい場合はgetFreeUart()関数で取り出すことができます。

    var uart = obniz.getFreeUart();
    uart.start()
    

    まだどちらも使ってない場合はuart0のことになります。つまり

    var uart = obniz.uart0;
    uart.start()
    

    これと同じことになります。


  • administrators

    基本的にはgetFreeUart()でuartオブジェクトを取得する方法をおすすめします。
    「どちらかでは困る、uart0を使い続けたい」と決まっている場合はobniz.uart0として頂ければと思います。

    ドキュメントではuartが2つあるのをわかりやすくするためにそうなっておりました(改善の余地がありそうです。getFreeUart()にすることを検討します。)



  • 1.obniz.uart0.start({tx:1,tr:2})
    2.uart0=obniz.getFreeUart()
    3.uart0.start({tx:3,tr:4})
    この3行の連続処理のコードを書いたとしたら
    1行目では内部番号0のUARTが、3行目では内部番号1のUARTがstartするという理解で良いでしょうか?


  • administrators

    @Google-Homer
    はい。仰る通りです。なので、uart0という変数にobniz.uart1が入ることになります。



  • ありがとうございました。
    静的(obniz.uart0/1)と動的(obniz.getFreeUart)の2種類あること理解できました。


  • administrators

    @Google-Homer
    そこなのですが、現在動いているプロセスの情報のみ利用しているため他のプログラムが利用している場合は競合することになります。


 

Recent Projects

  • @nak435 かしこまりました。よろしくお願いします。

    read more
  • @Yuki-Sato さん、

    外部の3.3vを使うとはいえ普通にvccやgndを供給して問題なくうごくのであれば、弊社での動作確認後Flick Hatのライブラリとして公開できればと思っているのですがいかがでしょう。

    今週末に確認しますので、お待ちください。

    read more
  • @nak435 時間がかかってすいません、

    なんとか3.3vをgndにつないでFlick Largeを動かしたかったのですが、うまく動かすことができなかったです。
    3.3vをgndを繋がずに接続するというのはライブラリで推奨して伝えることは難しいと思ってます。

    Flick LargeでなくFlick Hatの方で、外部の3.3vを使うとはいえ普通にvccやgndを供給して問題なくうごくのであれば、弊社での動作確認後Flick Hatのライブラリとして公開できればと思っているのですがいかがでしょう。

    よろしくお願い致します。

    read more
  • @nak435 ありがとうございます。
    接続は3.3vのgnd以外同じでした。
    エラーはそのせいかもしれませんが、しかし電気的にはgndを繋がない場合3.3vとしてうまく供給できないはずなのでそこが不思議です。

    教えていただいたプログラムの部分を修正して試してみたいと思います。
    また少し時間がかかりそうなのですが、早めに試したいと思います。

    引き続きよろしくお願い致します。

    read more