MZ Platformとは › 掲示板 › MZプラットフォームユーザー会掲示板 › MZ Platform Runtime for Raspberry Pi ver3.6のインストールについて
- このトピックは、 17 返信、 3 投稿者 です。最終更新日: 5 年, 1 ヶ月 前 MZPlatformユーザー会
-
著者投稿
-
2019年10月23日 at 1:48 PM #5905MZPlatformユーザー会サイト管理者
最後の質問について先に回答します。コマンドと引数のファイル名はいずれもフルパス名かカレントディレクトリからの適切な相対パス名で指定する必要があります。
本題については、ここまでのご説明ではまだ問題の本質がわかりません。まずは、Arduino側のスケッチと回路を追加して、MZアプリからの文字列送信がArduino側で正しく読み込まれ、Arduino側から文字を送信しているかどうかをご確認ください。例えば、回路にLEDを追加して、Arduino側で処理が進んだらLEDを点灯して時間が経ったら消灯するようにするなどが考えられます。
上記が確認できましたら、Arduino側から文字を送信しているのにMZアプリでは受信されないという問題であるとわかりますし、点灯しなければArduino側の処理の問題となります。
2019年10月23日 at 5:49 PM #5906ORIteck 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アプリでは受信されないようです。
ご確認お願いします。2019年10月23日 at 5:54 PM #5907ORIteck 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);
}2019年10月23日 at 9:41 PM #5908伊予研究会一般参加者手元にArduinoが無いので確認はできていませんが、loop内のif文の後に
Serial.println(“Out”);
の1行を入れて下さい。
Arduinoプログラムから「シリアルモニタ」を開き、その一番上の行に「F」を入力して送信するとArduinoから「Out」の文字をPCに返します(勿論、データ転送レートを合わせて)。
戻ってこない場合は、Arduino側に問題があります。
バイナリーデータを返すのであれば、
Serial.write(val);
を記載します。記憶が間違っていなければ、digitalWriteはArduinoのポートに出力するコマンドでは?
2019年10月23日 at 11:09 PM #5909MZPlatformユーザー会サイト管理者伊予研究会様からコメントしていただいたように、上記のテスト用のスケッチに、文字列を出力する行を追加して、再度テストをしていただけますでしょうか。
文字列を出力する場合、特に理由がなければ、Serial.print(”Out”)よりSerial.println(“Out”)の方が良いと思います。
それでもMZ側に文字列が出力されない場合、シリアル通信コンポーネントの属性情報設定でReadModeを0から2に変更すると出力されるかもしれません。
2019年10月24日 at 8:23 AM #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のシリアル通信(受信)プログラムの問題ではないかと考えられます。添付ファイル:
2019年10月24日 at 4:45 PM #5912ORIteck 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では、シリアル通信コンポーネントの処理完了イベントで、いくつかのサプルーチンコンポーネントでの処理の後にシリアル通信コンポーネントの『ポートに文字列データを出力』メソッドを使用した場合も、文字列は遅れませんでした。ダイアログコンポーネントを使用しスレッドを一旦止めることが有効のようで現在は、このようにしています。2019年10月24日 at 7:44 PM #5913MZPlatformユーザー会サイト管理者ReadModeの設定は、初期値の0であれば送信が途切れたタイミングで内容が出力され、2であれば改行の時点で内容が出力されます。
Serial.println()を使用していれば、どちらも同じように動作しますが、printの場合は2だと出力されないと思います。本来はprintで0で良いのですが、スケッチの書き方やハードウェアの関係で出力されないことはあるようなので、printlnと2の組み合わせが安全です。この情報は特に文書として明記しておりません。Javadocに数字の意味について少し記述がある程度です。
処理完了イベント中に処理を記述して動作しないのは、ハードウェアやスケッチとの関係もありますので、こちらではわかりません。エラーメッセージが表示されたということでしょうか。基本的に、いろいろ試して動いた方法でお使いください。
-
著者投稿
- このトピックに返信するには、ログインしてください。