1

シリアル ポート経由で読み取られているセンサー データをプロットしようとしています。この 2D プロッターの処理サンプル コードを見つけたので、自分のアプリケーションで動作するように変更しようとしています。

ただし、プログラミングは私の頭を少し超えています。3 つの方程式クラスから 3 つの行のデータを取得していることがわかります。mouseX を読み取る部分を、最新のセンサーの更新を指す変数または何かに置き換えたいと思います。センサー データは、ボイドDraw()ループで継続的に更新されます。

/**
 * RollingGraph
 * This sketch makes ise of the RollingLine2DTrace object to
 * draw a dynamically updated plot.
 */

import org.gwoptics.graphics.graph2D.Graph2D;
import org.gwoptics.graphics.graph2D.traces.ILine2DEquation;
import org.gwoptics.graphics.graph2D.traces.RollingLine2DTrace;

class eq implements ILine2DEquation{
    public double computePoint(double x,int pos) {
        return mouseX;
    }
}

class eq2 implements ILine2DEquation{
    public double computePoint(double x,int pos) {
        return mouseY;
    }
}

class eq3 implements ILine2DEquation{
public double computePoint(double x,int pos) {
    if(mousePressed)
        return 400;
    else
        return 0;
    }
}

RollingLine2DTrace r,r2,r3;
Graph2D g;

void setup(){
    size(600,300);

    r  = new RollingLine2DTrace(new eq() ,100,0.1f);
    r.setTraceColour(0, 255, 0);

    r2 = new RollingLine2DTrace(new eq2(),100,0.1f);
    r2.setTraceColour(255, 0, 0);

    r3 = new RollingLine2DTrace(new eq3(),100,0.1f);
    r3.setTraceColour(0, 0, 255);

    g = new Graph2D(this, 400, 200, false);
    g.setYAxisMax(600);
    g.addTrace(r);
    g.addTrace(r2);
    g.addTrace(r3);
    g.position.y = 50;
    g.position.x = 100;
    g.setYAxisTickSpacing(100);
    g.setXAxisMax(5f);
}

void draw(){
    background(200);
    g.draw();
}
4

1 に答える 1

2

あなたが持っているコードが必要なものかどうかは正確にはわかりませんが、シリアル入力を受け取って折れ線グラフを作成する簡単なプログラムを次に示します。お役に立てれば。

    import processing.serial.*;
    Serial myPort;
    int x = 0;


    void setup() {
      size(600, 400);
      println(Serial.list());  //list of available serial ports
      String portName = Serial.list()[0]; //replace 0 with whatever port you want to use.
      myPort = new Serial(this, portName, 9600);
    }


    void draw() {
    }


    void serialEvent(Serial myPort) {
      int inByte = myPort.read();
      println(inByte);
      stroke(90, 76, 99);
      //vertical line with height varying according to input
      line(x, height, x, height - inByte); 
      if (x >=width) {
        x=0;
        background(0);
      }
      x++;
    }
于 2012-12-09T18:24:26.807 に答える