MZ Platform Runtime for Raspberry Pi ver3.6のインストールについて

MZ Platformとは 掲示板 MZプラットフォームユーザー会掲示板 MZ Platform Runtime for Raspberry Pi ver3.6のインストールについて

8 件の投稿を閲覧中 - 11 ~ 18 件(全 18 件)
  • 著者
    投稿
  • #5905
    MZPlatformユーザー会
    サイト管理者

    最後の質問について先に回答します。コマンドと引数のファイル名はいずれもフルパス名かカレントディレクトリからの適切な相対パス名で指定する必要があります。

    本題については、ここまでのご説明ではまだ問題の本質がわかりません。まずは、Arduino側のスケッチと回路を追加して、MZアプリからの文字列送信がArduino側で正しく読み込まれ、Arduino側から文字を送信しているかどうかをご確認ください。例えば、回路にLEDを追加して、Arduino側で処理が進んだらLEDを点灯して時間が経ったら消灯するようにするなどが考えられます。

    上記が確認できましたら、Arduino側から文字を送信しているのにMZアプリでは受信されないという問題であるとわかりますし、点灯しなければArduino側の処理の問題となります。

    #5906
    ORIteck CO., LTD
    一般参加者

    ありがとうございます。簡単に下記スケッチを作成しテストしました。
    const int LED = 4;
    void setup()
    {
    pinMode(LED, OUTPUT); //LED(D4ピンを出力に)
    Serial.begin(115200);
    delay(1000); //1秒間待つ
    }

    void loop()
    {
    char start = Serial.read(); //シリアルから一文字を取得
    if(start == ‘F’){
    digitalWrite(LED, HIGH);
    delay(2000);
    }
    digitalWrite(LED, LOW);
    }
    const int LED = 4;
    void setup()
    {
    pinMode(LED, OUTPUT); //LED(D4ピンを出力に)
    Serial.begin(115200);
    delay(1000); //1秒間待つ
    }

    void loop()
    {
    char start = Serial.read(); //シリアルから一文字を取得
    if(start == ‘F’){
    digitalWrite(LED, HIGH);
    delay(2000);
    }
    digitalWrite(LED, LOW);
    }

    結果ですが、MZアプリかの文字列送信でArduino側のLEDが点灯することを確認しました。
    Arduino側から文字を送信しているのにMZアプリでは受信されないようです。
    ご確認お願いします。

    #5907
    ORIteck CO., LTD
    一般参加者

    すみません。スケッチのコピー&ペーストがダブっていました。ひとつ前の投稿は無視してください。

    ありがとうございます。簡単に下記スケッチを作成しテストしました。

    結果ですが、MZアプリかの文字列送信でArduino側のLEDが点灯することを確認しました。
    Arduino側から文字を送信しているのにMZアプリでは受信されないようです。
    ご確認お願いします。

    const int LED = 4;
    void setup()
    {
    pinMode(LED, OUTPUT); //LED(D4ピンを出力に)
    Serial.begin(115200);
    delay(1000); //1秒間待つ
    }

    void loop()
    {
    char start = Serial.read(); //シリアルから一文字を取得
    if(start == ‘F’){
    digitalWrite(LED, HIGH);
    delay(2000);
    }
    digitalWrite(LED, LOW);
    }

    #5908
    伊予研究会
    一般参加者

    手元にArduinoが無いので確認はできていませんが、loop内のif文の後に
    Serial.println(“Out”);
    の1行を入れて下さい。
    Arduinoプログラムから「シリアルモニタ」を開き、その一番上の行に「F」を入力して送信するとArduinoから「Out」の文字をPCに返します(勿論、データ転送レートを合わせて)。
    戻ってこない場合は、Arduino側に問題があります。
    バイナリーデータを返すのであれば、
    Serial.write(val);
    を記載します。

    記憶が間違っていなければ、digitalWriteはArduinoのポートに出力するコマンドでは?

    #5909
    MZPlatformユーザー会
    サイト管理者

    伊予研究会様からコメントしていただいたように、上記のテスト用のスケッチに、文字列を出力する行を追加して、再度テストをしていただけますでしょうか。

    文字列を出力する場合、特に理由がなければ、Serial.print(”Out”)よりSerial.println(“Out”)の方が良いと思います。

    それでもMZ側に文字列が出力されない場合、シリアル通信コンポーネントの属性情報設定でReadModeを0から2に変更すると出力されるかもしれません。

    #5910
    伊予研究会
    一般参加者

    Arduino UNOに
    const int LED = 4;
    void setup()
    {
    pinMode(LED, OUTPUT); //LED(D4ピンを出力に)
    Serial.begin(115200);
    delay(1000); //1秒間待つ
    }
    void loop()
    {
    char start = Serial.read(); //シリアルから一文字を取得
    if (start == ‘F’) {
    Serial.println(“Out”);
    digitalWrite(LED, HIGH);
    delay(2000);
    }
    digitalWrite(LED, LOW);
    }
    をコンパイルしてシリアルモニタからFを入力して、Out出力を確認しました。
    正常にPCまで受信できているので、これ以降はMzのシリアル通信(受信)プログラムの問題ではないかと考えられます。

    添付ファイル:
    #5912
    ORIteck CO., LTD
    一般参加者

    伊予研究会様
    コメントいただきありがとうございます。シリアルモニタでの操作ではスケッチ通りになること(Serial.read()とSerial.print()の関係)は確認できておりました。当方の伝達の仕方に問題があり長引いてしまったようです。

    結論ですが、
    シリアル通信コンポーネントの属性情報設定でReadModeを0から2に変更することで解決しました。
    Serial.printとSerial.println改行の有無については今回のスケッチでは関係無いようです。『F』の文字は一度しか送っていないからだと思いますが、今後は、Serial.printlnを使用したいと思います。

    最後に2つ質問させてください。

    ➀シリアルコンポーネントの属性情報ReadModeですが、Windows版MZでは『0』『2』ともに変化はありませんでした、デフォルトは『0』ですので、Raspbian版MZでは『2』に設定し使用します。ユーザー側での知識としてなにかあればお願いします。

    ➁シリアル通信コンポーネントはポートへの接続時のアクションとして処理完了イベントがありますが、このイベントの最初の処理にシリアル通信コンポーネントの『ポートに文字列データを出力』メソッドを使用した場合、文字列が遅れませんでした。(このトピックの環境です)これは、WindowsでもRaspbianでも同じでした。PC等の能力や通信環境によるものと考えおけばいいものでしょか?
    Raspbianでは、シリアル通信コンポーネントの処理完了イベントで、いくつかのサプルーチンコンポーネントでの処理の後にシリアル通信コンポーネントの『ポートに文字列データを出力』メソッドを使用した場合も、文字列は遅れませんでした。ダイアログコンポーネントを使用しスレッドを一旦止めることが有効のようで現在は、このようにしています。

    #5913
    MZPlatformユーザー会
    サイト管理者

    ReadModeの設定は、初期値の0であれば送信が途切れたタイミングで内容が出力され、2であれば改行の時点で内容が出力されます。

    Serial.println()を使用していれば、どちらも同じように動作しますが、printの場合は2だと出力されないと思います。本来はprintで0で良いのですが、スケッチの書き方やハードウェアの関係で出力されないことはあるようなので、printlnと2の組み合わせが安全です。この情報は特に文書として明記しておりません。Javadocに数字の意味について少し記述がある程度です。

    処理完了イベント中に処理を記述して動作しないのは、ハードウェアやスケッチとの関係もありますので、こちらではわかりません。エラーメッセージが表示されたということでしょうか。基本的に、いろいろ試して動いた方法でお使いください。

8 件の投稿を閲覧中 - 11 ~ 18 件(全 18 件)
  • このトピックに返信するには、ログインしてください。