質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

2回答

5095閲覧

processingエラー:Error, disabling serialEvent() for COM3 nullについて

omochimaru

総合スコア4

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2021/03/31 01:58

##知りたいこと
arduinoからシリアル通信をしたデータをprocessingで拾って表示するプログラムを作ってみました。シリアル通信の勉強のために作りました。

しかし、processingで

Error, disabling serialEvent() for COM3 null

とでてしまいます。
データが無いということなのでしょうがarduinoのシリアルプロットでは
しっかりとデータが出ています。

原因をご教授いただけたらと思います。

##processingプログラム

import processing.serial.*; Serial mport; double[] sensors = new double[2]; void setup() { mport = new Serial(this, "COM3", 9600);//シリアルポートの設定 //ポート内のデータ初期化 mport.clear(); } void draw() { } void serialEvent(Serial myport) { // シリアルバッファーを読込み if ( myport.available() >0 ) { String myString = myport.readStringUntil('\n'); // 空白文字など余計な情報を消去 myString = trim(myString); // コンマ区切りで複数の情報を読み込む float sensors[] = float(split(myString, ',')); if (sensors.length > 1) { print(sensors[0],4); print(","); println(sensors[1],4); } } }

##arduinoプログラム

float sensors[2]; float x, y; void setup() { Serial.begin(9600); sensors[0] = 0.0000; sensors[1] = 0.0000; x=0.0000; y=0.0000; } void loop() { x=x+1.0001; y=y+1.0001; sensors[0] = x; sensors[1] = y; Serial.print(sensors[0],4); Serial.print(","); Serial.println(sensors[1],4); delay(100); }

purocessingで

0.0000,0.0000 1.0001,1.0001 2.0002,2.0002 3.0003,3.0003 4.0004,4.0004 . . .

こんな感じで表示されると思ったのですが
Error, disabling serialEvent() for COM3 nullとでてしまい、うまくいきませんでした…

##環境
Windows10 64bit
CPU i5
RAM 8GB

arduinoIDE設定

ボード:ESP32 Dev Module
シリアルポート:使用できるポート確認済み(COM3)

processing3.5.4

##最後に
見づらいプログラムですみません。まだまだ勉強中ので余計なコードを描いているかもしれませんがどうか大目に見てくださいますと助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

disabling serialEvent() for COMでググってみました。
トップにヒットしたのがこれでした。
要は、serialEvent()の中で例外が発生している、ということのようです。

といっても、例外が発生するのはmyStringがnullになるときぐらい、それはSerial.readStringUntil()がタイムアウトしたときぐらい。その組み合わせだとなかなかそうはなりそうはないですけどねぇ。先にArduinoを走らせておいてからProcessingを走らせてもダメですか?
とりあえず、

Processing

1 String myString = myport.readStringUntil('\n'); 2 if(myString==null) return;

とでもしてnull回避してみたらどうなるでしょう?

別件ですが、processing側での

Processing

1 print(sensors[0], 4); 2 print(","); 3 println(sensors[1], 4);

はあなたの期待する動作をしないような気がします。


関連しそうなQ&Aを見つけてしまいました。
う~ん、すっかり忘れていた。
抜粋。

readStringUntil()はブロックしない)

Serial.readStringUntil()は、公式のリファレンスによれば"Returns null if it doesn't find what you're looking for. "とのことなので、例えば"10,12\r\n"の'1'~'\r'を受信するとそれぞれserialEvent()が起動してreceiveMessageがNULLになる、

投稿2021/03/31 11:58

編集2021/03/31 12:17
thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

omochimaru

2021/03/31 14:51

ご回答ありがとうございます。 確かに ``` print(sensors[0], 4); print(","); println(sensors[1], 4); ``` の「,4」はいらないですね… 小数点以下4桁まで表示の意味でつけたのですがそうはならないみたいですね… 試しに if(myString==null) return; を追加してみました。 動作はだいぶ安定しましたが、たまに例のエラーが出てしまいます。 Q&Aのほうなのですがまだ勉強が足りず少し読み込んでみてから確かめてみたいと思います! 教えていただき感謝いたします。
omochimaru

2021/03/31 14:53

もう少しだけ回答をお待ちしてからBAを決めさせていただきます。 その間いろいろと調べさせていただきます。自分で解決に至った場合はご報告いたします!
thkana

2021/03/31 23:03

> 動作はだいぶ安定しましたが、たまに例のエラーが出てしまいます。 私のてもとでは少なくとも3分くらい放置して現象はでなかったのですけれど。 わけもわからず手当てして外れだったら次...ではなく、怪我の場所を追い込んでいきましょう。 String myString = myport.readStringUntil('\n'); println("readStringUntil"); myString = trim(myString); println("trim"); float sensors[] = float(split(myString, ',')); println("split"); のように表示を仕込んでおけば、どこまで到達したのかはわかります。その先で例外になったのですから、では変数の状態はどうなのか、とか次を調べることができるはずです。
guest

0

COM3が無効だ、といってます

データが無いということなのでしょうがarduinoのシリアルプロットでは

しっかりとデータが出ています。

このシリアル接続時のCOM番号はCOM3なんでしょうか。

投稿2021/03/31 02:06

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

omochimaru

2021/03/31 03:10 編集

arduinoのほうの設定はCOM3になっています。 processingのほうではCOM3を指定しているのでこれでよいのかなと思っています。
y_waiwai

2021/03/31 03:41

もしかして、ArduinoIDEの方でCOM3が開きっぱなしになってませんか? COMポートは複数開くということはできないので、そこらへんを全部終了させて、processing側だけで開くようにしてみてください
omochimaru

2021/03/31 03:45

それも考えたのですが、すべて閉じた状態でもダメでした。。。
thkana

2021/03/31 11:58

> COM3が無効だ、といってます そんなこといっていません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問