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

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

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

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

Processing

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

Q&A

解決済

1回答

665閲覧

Arduinoに接続したジャイロセンサKXR94-2050の動きをProcessingに表示したいです

kakashi55

総合スコア25

Arduino

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

Processing

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

0グッド

0クリップ

投稿2019/06/24 11:59

Arduinoに接続したジャイロセンサKXR94-2050の動きをProcessingに表示したいです

■困っていること
Processingに表示したBOXが滑らかに動きません
滑らかに動くようにご指南ください

Arduino

1#include <I2Cdev.h> 2 3String str_out; //文字列 4uint32_t time; //時間 5unsigned long times = 0; 6 7const int xAxisPin = 0; // 加速度センサのx軸に接続したアナログピンの番号 8const int yAxisPin = 1; // 加速度センサのy軸に接続したアナログピンの番号 9const int yAxisPin = 2; 10 11void setup() { 12 Serial.begin(57600); 13} 14 15void loop() { 16 times = millis(); 17 18 int xAxisValue = analogRead(xAxisPin); // x軸とy軸の値を読み取る 19 int yAxisValue = analogRead(yAxisPin); 20 int zAxisValue = analogRead(zAxisPin); 21 22 str_out = String(times) + ", " + String(xAxisValue) + ", " + String(yAxisValue) + ", " + String(zAxisValue); 23 Serial.println(str_out); 24 25 delay(100); 26} 27 28// 今回は-1から1までにスケーリングする必要があるためfloatで同じ計算をする 29float mapInFloat(float x, float iMin, float iMax, float oMin, float oMax) { 30 return (x - iMin) * (oMax - oMin) / (iMax - iMin) + oMin; 31}

Processing

1import processing.serial.*; 2 3 int lf = 10; 4 Serial myPort; 5 String datline = null; 6 PrintWriter file; 7 8float xAxisValue; 9float yAxisValue; 10float zAxisValue; 11float time; 12 13final float ratio = 0.2; // 加速度センサの前回の値と今回の値をミックスする比率 14 15float xAxisValueLast = 511; // 前回のx軸とy軸の値(初期値は0〜1023の中央値) 16float yAxisValueLast = 511; 17 18void setup(){ 19 println(Serial.list()); 20 frameRate(20); 21 noStroke(); 22 file = createWriter("sholder0614.csv"); 23 24myPort = new Serial(this, "COM5", 57600); 25myPort.clear(); 26datline = myPort.readStringUntil(lf); 27datline = null; 28 } 29 30void settings(){ 31 size(1200, 600, P3D); 32 } 33 34void draw() { 35 background(0); 36 pushMatrix(); 37 translate(width / 2, height / 2, -30); 38 39while( myPort.available() > 0) { 40 datline = myPort.readStringUntil(lf); 41 if(datline != null){ 42 43float[] splitdata = float(datline.split(",")); 44if(splitdata.length == 4 ) { 45 time = splitdata[0]; 46 xAxisValue = splitdata[1]; 47 yAxisValue = splitdata[2]; 48 zAxisValue = splitdata[3]; 49} 50 51 float xAxisValueSmoothed = xAxisValue * ratio + xAxisValueLast * (1.0 - ratio); //スムージング 52 float yAxisValueSmoothed = yAxisValue * ratio + yAxisValueLast * (1.0 - ratio); 53 54 xAxisValueLast = xAxisValueSmoothed; // 前回の値としてスムージングした値をセット 55 yAxisValueLast = yAxisValueSmoothed; 56 57 float xAxisSinTheta = map(xAxisValueSmoothed, 306, 716, -1, 1); //値を-1から1までの範囲にしてsinθの値とする 58 float yAxisSinTheta = map(yAxisValueSmoothed, 306, 716, -1, 1); 59 60 xAxisSinTheta = constrain(xAxisSinTheta, -1, 1); // 値を-1から1までの範囲に制限 61 yAxisSinTheta = constrain(yAxisSinTheta, -1, 1); 62 63 //println(datline); 64 //println(time); 65 //println(asin(xAxisSinTheta)); 66 //println(-asin(yAxisSinTheta)); 67 68 rotateZ(asin(xAxisSinTheta)); // マウスの代わりに加速度センサの値でコントロール 69 rotateX(-asin(yAxisSinTheta)); 70 71 file.print(time); file.print(","); 72 file.print(xAxisValue);file.print(","); 73 file.println(yAxisValue); 74 } 75 } 76 77scale(100); 78beginShape(QUADS); 79 80fill(255, 0, 0); 81 vertex(-3, 0.5, 0.5); 82 vertex( 3, 0.5, 0.5); 83 vertex( 3, -0.5, 0.5); 84 vertex(-3, -0.5, 0.5); 85 86fill(0, 255, 0); 87 vertex( 3, 0.5, 0.5); 88 vertex( 3, 0.5, -0.5); 89 vertex( 3, -0.5, -0.5); 90 vertex( 3, -0.5, 0.5); 91 92fill(0, 0, 255); 93 vertex( 3, 0.5, -0.5); 94 vertex(-3, 0.5, -0.5); 95 vertex(-3, -0.5, -0.5); 96 vertex( 3, -0.5, -0.5); 97 98fill(255, 255, 0); 99 vertex(-3, 0.5, -0.5); 100 vertex(-3, 0.5, 0.5); 101 vertex(-3, -0.5, 0.5); 102 vertex(-3, -0.5, -0.5); 103 104fill(0, 255, 255); 105 vertex(-3, 0.5, -0.5); 106 vertex( 3, 0.5, -0.5); 107 vertex( 3, 0.5, 0.5); 108 vertex(-3, 0.5, 0.5); 109 110fill(255, 0, 255); 111 vertex(-3, -0.5, -0.5); 112 vertex( 3, -0.5, -0.5); 113 vertex( 3, -0.5, 0.5); 114 vertex(-3, -0.5, 0.5); 115 116endShape(); 117popMatrix(); 118} 119 120void keyPressed() { 121 if (key == ENTER) { 122 file.flush(); 123 file.close(); 124 exit(); 125 } 126}

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

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

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

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

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

y_waiwai

2019/06/24 12:08

滑らかに動かないとはどうなるんでしょうか。 質問を編集し、具体的な説明を追記しましょう
1T2R3M4

2019/06/24 13:00

10fpsは滑らかですか。
guest

回答1

0

ベストアンサー

実機があるわけではないので確認できませんが、プログラム中の待ち時間を減らしてみたらいかがですか。
Processing側のフレームレートも相応の値にしておかないと意味がないかも知れませんが。

投稿2019/06/25 13:55

thkana

総合スコア7639

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問