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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

make

make は、ビルド作業を自動化するツールです。さまざまなファイルの最終変更時刻を比較し、従属するファイルよりも「ターゲット」のファイルが古いことがわかったときユーザーが設定していた命令を実行する事が可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Arduino

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

Processing

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

Q&A

解決済

2回答

4203閲覧

ArduinoとProcessingのシリアル通信による連携

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

make

make は、ビルド作業を自動化するツールです。さまざまなファイルの最終変更時刻を比較し、従属するファイルよりも「ターゲット」のファイルが古いことがわかったときユーザーが設定していた命令を実行する事が可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Arduino

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

Processing

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

0グッド

0クリップ

投稿2017/07/03 11:16

###前提・実現したいこと
ArduinoとProcessingのシリアル通信による連携で、超音波距離センサモジュール (HC-SR04)の値をArduinoで読み取り、Processingで可視化しようとしています。

###発生している問題・エラーメッセージ
シリアル通信はできているのですが、物体をセンサに近づけても、Arduinoのシリアルモニタの値は変わりますが、Processingとシリアル通信した時にProcessingに表示される値が変わらず、困っています。

###該当のソースコード

Arduino

1#define echoPin 2 // Echo Pin 2#define trigPin 3 // Trigger Pin 3 4double Duration = 0; //受信した間隔 5double Distance = 0; //距離 6void setup() { 7 Serial.begin( 9600 ); 8 pinMode( echoPin, INPUT ); 9 pinMode( trigPin, OUTPUT ); 10} 11void loop() { 12 digitalWrite(trigPin, LOW); 13 delayMicroseconds(2); 14 digitalWrite( trigPin, HIGH ); //超音波を出力 15 delayMicroseconds( 10 ); // 16 digitalWrite( trigPin, LOW ); 17 Duration = pulseIn( echoPin, HIGH ); //センサからの入力 18 if (Duration > 0) { 19 Duration = Duration / 2; //往復距離を半分にする 20 Distance = Duration * 340 * 100 / 1000000; // 音速を340m/sに設定 21 Serial.print("Distance:"); 22 Serial.print(Distance); 23 Serial.println(" cm"); 24 } 25 delay(500); 26}

Processing

1import processing.serial.*; 2 3// Serialクラスのインスタンス 4Serial myPort; 5// シリアルポートから取得したデータ(Byte) 6int inByte; 7 8void setup() 9{ 10 size(640, 640); 11 // Macのシリアルのリストの最初のポートがFTDIアダプタのポート 12 String portName = Serial.list()[1]; 13 // ポートとスピードを設定して、Serialクラスを初期化、 14 myPort = new Serial(this, portName, 9600); 15} 16 17void draw() 18{ 19 // シリアルから取得した値を背景色に設定 20 println(inByte); 21} 22 23void serialEvent(Serial p){ 24 // 設定したシリアルポートからデータを読み取り 25 inByte = myPort.read(); 26}

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

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

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

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

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

guest

回答2

0

ベストアンサー

Arduino

1//Arduino側のシリアル出力 2 Serial.print("Distance:"); 3 Serial.print(Distance); 4 Serial.println(" cm"); 5

Processing

1//Processingのシリアルポートからデータを読み取りと称している部分他 2 3void draw() 4{ 5 // シリアルから取得した値を背景色に設定 6 println(inByte); 7} 8 9void serialEvent(Serial p){ 10 // 設定したシリアルポートからデータを読み取り 11 inByte = myPort.read(); 12} 13

Arduinoから、質問者さんが掲示したようにデータを送っていますか?
送っているのであれば、何故、Processing側で、intで値が返ると
するプログラムになっているのですか?
1.Arduino 側は、
文字列:(自分で考えるべし)
を送っている。
2.Processing側は、
文字列:(自分で考えるべし)
を受信する想定になっている。
3.Arduino側、Processing側で、送信、受信する文字列の
想定と、実際が異なっていると、当然、送受信しても、
思ったようには、成りません。
プログラムは、書かれた様に動きます。

Arduino 日本語リファレンス:Serial.print(data, format)
http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=3319

参考サイト例
ArduinoとProcessingの連携1 : センサーの情報を視覚化する
http://yoppa.org/bma10/1289.html
↑を看て、何が不味いか、考えてみてください。

投稿2017/07/07 06:00

daive

総合スコア2028

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

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

退会済みユーザー

退会済みユーザー

2017/07/07 08:12

ご丁寧にアドバイスをいただき、大変助かりました。ありがとうございました。
guest

0

ProcessingとArduinoは前に少しやっただけ(素人)なので、間違っている可能性がありますが、機材がないので検証できず、すみません。

気になった点として、

  • serialEvent()の引数のSerial pが使われていない(myPort.read();ではなくp.read();かもしれない)
  • int型のinByteに文字が入っている

全然関係ないかもしれませんが、ご確認ください。

投稿2017/07/03 12:18

programming

総合スコア476

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

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

退会済みユーザー

退会済みユーザー

2017/07/07 08:12

ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問