2016-11-09 4 views
1

コードを保存し、表示するための処理:アルドゥイーノ - データ私のArduinoのための

#include<EngduinoThermistor.h> 
void setup() 
{ 
    Serial.begin(9600); 
    EngduinoThermistor.begin(); 
}void loop() 
{ 
    float temp; 
    temp = EngduinoThermistor.temperature(); 
    Serial.println(temp); 
    delay(1000); 
} 

コード私の処理のために:私は処理を理解するために本当にハード試みたが、私はまだない

import processing.serial.*; 
    Serial port; 
    float x = 0; 


    void setup() { 
     size(500, 400); 
     println(Serial.list()); 
     String portName = Serial.list()[0]; 
     port = new Serial(this, "/dev/tty.usbmodem1411", 9600); 
    } 


    void draw() { 
    } 

    void serialEvent(Serial port) { 
     float inByte = port.read(); 
     println(inByte); 
     stroke(90, 76, 99); 
     line(x, height, x, height - inByte); 
     if (x >=width) { 
     x=0; 
     background(200); 
     } 
     x++; 
    } 

arduinoによって送信されたデータに基づいてグラフを描画する方法を理解する。私は主に問題がライン部分であると思います。私は前のポイントと新しいポイントを結ぶ線を描く方法を知らない。

しかし、全体的な問題でも動作しない問題がある場合は?:(

+1

多分あなたは関数を呼び出す必要があります... –

答えて

0

それはタイプの質問「どのように私はこれを行うのですか」一般的に答えるのは難しい......。スタックオーバーフローは、「複数の特定のために設計されています私は、Xを試してみましたYを期待しますが、Zではなく」タイプの質問を持って言われていること、私は一般的な意味で助けしようとするでしょう:。。

は小さなステップにダウンあなたの問題をブレークを忘れる

Arduino for a second。ハードコードされたいくつかのグラフに基づいてグラフを表示する小さなサンプルスケッチを作成できますかデータ?まずそれを働かせてください。

これを取得したら、ハードコードされた値以外の値に基づいてグラフを作成してみてください。ランダムな値やマウスの位置に基づく値などを試してみてください。Arduinoに接続するのではなく、ダイナミックなグラフを作成することです。

これとは別に、グラフを無視してArduinoに接続する基本的なスケッチをもう一度見てください。 Arduinoから取得した値をコンソールに出力します。

最後に、別々に動作するものがすべてある場合は、それらを接続してArduinoのデータに基づいてグラフを作成する方が簡単になります。

この手順のいずれかで問題が発生した場合は、MCVEと特定の質問を投稿できます。がんばろう。

0

Engduino Thermistor Documentation(pdfリンク)によると、値は浮動小数点型です。

println()を使用して値を送信しているため、浮動小数点値と共に送信される改行文字('\n')があります。これは実際にはProcessing SerialのbufferUntil()関数と組み合わせて使用​​すると便利です。

主な欠落成分は、実際に受信した文字列からfloatを解析しています。ここ は、基本的な変換例です:

String temperatureString = "37.5"; 
float temperatureFloat = float(temperatureString); 

あなたは最終的にフロートに変換し、それは空白文字を削除するにはtrim()そして、文字列を取得するには、シリアルのreadString()を使用することができます。

temperature = float(port.readString().trim()); 

それはまた良いことです変換が成功したかどうかを確認するアイデア:

if(!Float.isNaN(temperature)){ 
     println("read temperature",temperature); 
     x++; 
    } 

全体的にエラーをチェックするのは良い考えですので、ここではversioです上記のことを行い、シリアルポートとコメントを確認します:

import processing.serial.*; 
//serial port 
Serial port; 
//x position of current value on graph 
float x = 0; 
//current temperature reading 
float temperature; 

void setup() { 
    size(500, 400); 
    background(200); 

    String[] portNames = Serial.list(); 
    println(portNames); 
    String portName = "not found"; 
    //loop through available serial ports and look for an Arduino (on OSX something like /dev/tty.usbmodem1411) 
    for(int i = 0 ; i < portNames.length; i++){ 
    if(portNames[i].contains("tty.usbmodem")){ 
     portName = portNames[i]; 
     break; 
    } 
    } 
    //try to open the serial port 
    try{ 
    port = new Serial(this, portName, 9600); 
    //buffer until new line character (since values are send via println() from Arduino) 
    port.bufferUntil('\n'); 
    }catch(Exception e){ 
    System.err.println("Arduino port " + portName); 
    e.printStackTrace(); 
    } 
} 


void draw() { 
    //draw graph 
    stroke(90, 76, 99); 
    //you might want to map the temperature to sketch dimensions) 
    line(x, height, x, height - temperature); 
    if (x >=width) { 
    x=0; 
    background(200); 
    } 
} 

void serialEvent(Serial port) { 
    try{ 
    //read the string, trim it (in case there's a '\n' character), then convert it to a float 
    temperature = float(port.readString().trim()); 
    //check if the float conversion was successfull (didn't get a NaN value) 
    if(!Float.isNaN(temperature)){ 
     println("read temperature",temperature); 
     x++; 
    } 
    }catch(Exception e){ 
    System.err.println("error parsing value from serial port"); 
    e.printStackTrace(); 
    } 
} 
関連する問題