2016-12-01 3 views
1

いくつかのセンサーが接続されたArduinoの場合、Processingとcontrolp5を使用してインターフェースを構築しています。私はセンサーがたくさんあるので、私はセンサーを持っているだけ多くのコントロールパネルをインスタンス化し、ハードウェアがテレメトリーパケットを送信するときに一度にすべてのパネルを更新できるように、モジュール式にインターフェースを構築しようとしています。処理内のクラス内からcontrolp5ウィジェットを使用する

私は何かを作ってウィジェットを描画していますが、コールバック関数が起動していないようです。たとえば、以下のコードのボタンの1つが押されたとき、起こる。また、メインスケッチのprintln(channelOne.currentGain);は、ゲインスライダが何をしているかに関わらず、常に0を表示します。

私はJavaをあまり使っていないので、クラスとその変数がどのように宣言されているのかここで基本的なものがないと確信しています。これを正しく設定する方法については、ここで

は私のメインプログラムである:

import processing.core.PApplet; 

SensorChannel channelOne; 

void setup() 
{ 
    size(800, 450); 
    smooth(); 

    channelOne = new SensorChannel(this, 30, 30); 
} 

void draw() 
{ 
    background(0); 

    println(channelOne.currentGain); 
    delay(20); 
} 

そして、ここではSensorChannelのためのクラス定義である:

import processing.core.PApplet; 
import controlP5.*; 

class SensorChannel { 
    PApplet app; 
    ControlP5 cp5; 

    //Moving line graph 
    Chart chart; 

    //CheckBox buttons; 
    boolean triggered; 
    boolean manualOverride; 
    boolean calibrateBaseline; 
    boolean calibrateGain; 
    boolean calibrateTrigger; 
    boolean selfControl; 

    //Sliders 
    int currentGain; 
    int currentBalance; 
    int currentReading; 
    int currentTrigger; 

    SensorChannel(PApplet papp, int x, int y) 
    { 

    app = papp; 
    cp5 = new ControlP5(papp); 

    println("hello!"); 

    //Line graph 
    chart = cp5.addChart("sensorChart") 
    .setPosition(x+0, y+0) 
    .setSize(306, 220) 
    .setRange(0, 1024) 
    .setView(Chart.LINE) // use Chart.LINE, Chart.PIE, Chart.AREA, Chart.BAR_CENTERED 
    .setStrokeWeight(1.5) 
    .setColorCaptionLabel(color(40)) 
    ; 

    chart.addDataSet("sensorReading"); 
    chart.setData("sensorReading", new float[100]); 
    chart.setColors("sensorReading", color(240)); 

    chart.addDataSet("sensorReading"); 
    chart.setData("sensorReading", new float[100]); 
    chart.setColors("sensorReading", color(140)); 

    //Reading (10bits) 
    //Trigger point (10bits) 

    //Balancing digipot setting (1 byte) 
    cp5.addSlider("currentBalance") 
    .setLabel("Balance Pot") 
    .setPosition(x+0,y+284) 
    .setSize(306,20) 
    .setRange(0,255) 
    ; 
    //Gain setting (1 byte) 
    cp5.addSlider("currentGain") 
    .setLabel("Gain") 
    .setPosition(x+0,y+263) 
    .setSize(306,20) 
    .setRange(0,255) 
    ; 

    //Current Sensor Reading (1 byte) 
    cp5.addSlider("currentReading") 
    .setLabel("Sensor Reading") 
    .setPosition(x+0,y+221) 
    .setSize(306,20) 
    .setRange(0,255) 
    ; 

    //Trigger Point (1 byte) 
    cp5.addSlider("currentTrigger") 
    .setLabel("Trigger Point") 
    .setPosition(x+0,y+242) 
    .setSize(306,20) 
    .setRange(0,255) 
    ; 

    //Misc. Settings Toggles 
    cp5.addToggle("triggered") 
    .setLabel("Trigger") 
    .setPosition(x+0,y+305) 
    .setSize(50,20) 
    ; 

    cp5.addToggle("manualOverride") 
    .setLabel("Override") 
    .setPosition(x+51,y+305) 
    .setSize(50,20) 
    ; 

    cp5.addToggle("calibrateBaseline") 
    .setLabel("C. Baseline") 
    .setPosition(x+102,y+305) 
    .setSize(50,20) 
    ; 

    cp5.addToggle("calibrateGain") 
    .setLabel("C. Gain") 
    .setPosition(x+153,y+305) 
    .setSize(50,20) 
    ; 

    cp5.addToggle("calibrateTrigger") 
    .setLabel("C. Trig") 
    .setPosition(x+204,y+305) 
    .setSize(50,20) 
    ; 

    cp5.addToggle("selfControl") 
    .setLabel("S. Control") 
    .setPosition(x+255,y+305) 
    .setSize(50,20) 
    ; 

    } 

    void triggered(boolean theFlag) 
    { 
    println("Trigger status: " + theFlag); 
    } 

    void manualOverride(boolean theFlag) 
    { 
    println("Manual Override status: " + theFlag); 
    } 

    void calibrateBaseline(boolean theFlag) 
    { 
    println("Calibrate Baseline status: " + theFlag); 
    } 

    void calibrateGain(boolean theFlag) 
    { 
    println("Calibrate Gain status: " + theFlag); 
    } 

    void calibrateTrigger(boolean theFlag) 
    { 
    println("Calibrate Trigger status: " + theFlag); 
    } 

    void selfControl(boolean theFlag) 
    { 
    println("Self Control status: " + theFlag); 
    } 

} 
+0

私の解決策はありますか? –

答えて

0

改善することができるいくつかのものがあります。

  • はありませんdelay()に電話する必要があります。 draw()は1秒間に約60回呼び出されますが、frameRate()(たとえばframerate(50);)を使用して簡単に(しかもきれいに)制御できます。
  • SensorChannel内でcp5をインスタンス化しています。おそらく、メインスケッチで単一のControlP5インスタンスを作成し、SensorChannelへの参照を渡すことができます(複数の将来のチャネルに対してインスタンスを再利用すること)。

値をタップする方法は複数あります。 例>寄稿ライブラリ> ControlP5>使用

まっすぐに進むべき方法は、コントローラのplugTo()メソッドを使用することです。あなたはにコントローラを接続するためにオブジェクトを渡すと、限り、そのオブジェクトがコントローラと同じ名前のプロパティを持っているとして、それはそれは価値があります設定します。

import controlP5.*; 

SensorChannel channelOne; 
ControlP5 cp5; 

void setup() 
{ 
    size(800, 450); 
    smooth(); 
    cp5 = new ControlP5(this); 
    channelOne = new SensorChannel(this,cp5, 30, 30); 
} 

void draw() 
{ 
    background(0); 

    text("currentGain:"+channelOne.currentGain,10,15); 
} 

class SensorChannel{ 
    PApplet app; 
    ControlP5 cp5; 

    //Moving line graph 
    Chart chart; 

    //CheckBox buttons; 
    boolean triggered; 
    boolean manualOverride; 
    boolean calibrateBaseline; 
    boolean calibrateGain; 
    boolean calibrateTrigger; 
    boolean selfControl; 

    //Sliders 
    int currentGain; 
    int currentBalance; 
    int currentReading; 
    int currentTrigger; 

    SensorChannel(PApplet papp, ControlP5 cp5,int x, int y) 
    { 

    app = papp; 
    this.cp5 = cp5; 

    println("hello!"); 

    //Line graph 
    chart = cp5.addChart("sensorChart") 
    .setPosition(x+0, y+0) 
    .setSize(306, 220) 
    .setRange(0, 1024) 
    .setView(Chart.LINE) // use Chart.LINE, Chart.PIE, Chart.AREA, Chart.BAR_CENTERED 
    .setStrokeWeight(1.5) 
    .setColorCaptionLabel(color(40)); 

    chart.addDataSet("sensorReading"); 
    chart.setData("sensorReading", new float[100]); 
    chart.setColors("sensorReading", color(240)); 

    chart.addDataSet("sensorReading"); 
    chart.setData("sensorReading", new float[100]); 
    chart.setColors("sensorReading", color(140)); 

    //Reading (10bits) 
    //Trigger point (10bits) 

    //Balancing digipot setting (1 byte) 
    cp5.addSlider("currentBalance") 
    .setLabel("Balance Pot") 
    .setPosition(x+0,y+284) 
    .setSize(306,20) 
    .setRange(0,255) 
    .plugTo(this) 
    ; 
    //Gain setting (1 byte) 
    cp5.addSlider("currentGain") 
    .setLabel("Gain") 
    .setPosition(x+0,y+263) 
    .setSize(306,20) 
    .setRange(0,255) 
    .plugTo(this); 
    ; 

    //Current Sensor Reading (1 byte) 
    cp5.addSlider("currentReading") 
    .setLabel("Sensor Reading") 
    .setPosition(x+0,y+221) 
    .setSize(306,20) 
    .setRange(0,255) 
    .plugTo(this) 
    ; 

    //Trigger Point (1 byte) 
    cp5.addSlider("currentTrigger") 
    .setLabel("Trigger Point") 
    .setPosition(x+0,y+242) 
    .setSize(306,20) 
    .setRange(0,255) 
    .plugTo(this) 
    ; 

    //Misc. Settings Toggles 
    cp5.addToggle("triggered") 
    .setLabel("Trigger") 
    .setPosition(x+0,y+305) 
    .setSize(50,20) 
    .plugTo(this) 
    ; 

    cp5.addToggle("manualOverride") 
    .setLabel("Override") 
    .setPosition(x+51,y+305) 
    .setSize(50,20) 
    .plugTo(this) 
    ; 

    cp5.addToggle("calibrateBaseline") 
    .setLabel("C. Baseline") 
    .setPosition(x+102,y+305) 
    .setSize(50,20) 
    .plugTo(this) 
    ; 

    cp5.addToggle("calibrateGain") 
    .setLabel("C. Gain") 
    .setPosition(x+153,y+305) 
    .setSize(50,20) 
    .plugTo(this) 
    ; 

    cp5.addToggle("calibrateTrigger") 
    .setLabel("C. Trig") 
    .setPosition(x+204,y+305) 
    .setSize(50,20) 
    .plugTo(this) 
    ; 

    cp5.addToggle("selfControl") 
    .setLabel("S. Control") 
    .setPosition(x+255,y+305) 
    .setSize(50,20) 
    .plugTo(this) 
    ; 

    } 

} 

これは、1つの提案です。コントローラのイベントと値に関する他のControlP5の例を自由に探検してください。

関連する問題