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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Arduino

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

Processing

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

Q&A

解決済

1回答

1446閲覧

ArduinoとProcessing連携によるファイル出力が白紙になります

sasada

総合スコア1

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Arduino

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

Processing

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

0グッド

0クリップ

投稿2022/01/17 06:50

実現したいこと

Arduino側で計算した数値(今回は実験のため1から100まで単純にカウントアップしています)をProccesing側で受け取ってcsvまたはtxtファイルに書き出し、保存を行いたい。

発生している問題

  • 下記のProcessingコード中println(Serial.list());部分にエラーが出てる。

通常コンソールにポートの表が出るらしいがarudinoをつないでいるcom5という表示が出るだけでポート番号やバージョン情報などが出てこない。
以下エラー文章
Type String[] of the last argument to method println(Object...) doesn't exactly match the vararg parameter type. Cast to Object[] to confirm the non-varargs invocation, or pass individual arguments of type Object for a varargs invocation.
イメージ説明

  • 出力したファイルが白紙になる

Processingのコンソール上にarduinoから送られてきたと思われる数字が表示されるが、保存されたファイルを確認すると中身は白紙になっている。
イメージ説明

使用したコード

aruduino

1void setup() { 2Serial.begin(9600); 3} 4 5void loop() { 6 for(int i=0; i<=100 ; i ++){ 7 Serial.print(i); 8 Serial.println(","); 9 delay(100); 10 } 11 delay(100); 12}

Processing

1import processing.serial.*; 2Serial myport; 3String datastr; 4PrintWriter output; 5int count = 1; 6 7void setup(){ 8println(Serial.list()); 9myport = new Serial(this, Serial.list()[0], 9600); 10myport.clear(); 11output = createWriter("test1.txt"); 12} 13 14void draw(){ 15 if (count>100) { 16 output.flush(); 17 output.close(); 18 exit(); 19 } 20 count++; 21 22 if(myport.available() > 0){ 23 delay(100); 24 datastr = myport.readString(); 25 println(datastr); 26 } 27}

補足

Arduino ver1.8,16
Processing ver4.0b3
初心者のためProcessingのコードはarduino連携についての様々なページのコードを切り貼りして作成したものです。よろしくお願いします。

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

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

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

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

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

thkana

2022/01/17 13:41

回答でもなんでもないのでとりあえずここに書いておきますけれど、 そのプログラムでは、processing側で拾ったdatastrが送信側と同じ区切りを保っている保証は無いことには注意してくださいね。 "123,[改行]1" "24[改行]1" みたいなことになる可能性は(あまりちゃんと考えてないけど)ありそうです。 今後受け取った「値」を使ってなにかしようと考えているのなら、Serial.readString()ではなく、Serial.readStringUntil()を使ったほうがよいかと思います。
sasada

2022/01/24 05:52

確かに値の改行が飛び飛びでなんでかなー?となっていたので大変助かりました。ありがとうございます。
guest

回答1

0

ベストアンサー

下記のProcessingコード中println(Serial.list());部分にエラーが出てる。

printArray(Serial.list())にしましょう。
なおエラーメッセージそのままでググるとでてきます。

ちなみにこれは構文エラーではなくワーニング(警告)です。
エラーは「文法が間違ってるから動かせない」
ワーニングは「文法はあってるから動かせるけど本当にこれで大丈夫?」です。

出力したファイルが白紙になる

outputに何も書き込んでいません。
こいつはコンソール出力したものを勝手にファイルに書いてくれるものではありません

println(datastr);
の下にでも
output.println(datastr);を書いておきましょう。

投稿2022/01/17 08:06

ozwk

総合スコア13521

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

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

sasada

2022/01/17 08:51

ご丁寧な回答ありがとうございました。 無事テキストを正しく出力することができました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問