Java 在处理中使用类内的controlp5小部件
我正在使用Processing and controlp5为Arduino构建一个接口,接口上连接了一些传感器。我想要有很多传感器,所以我尝试以模块化的方式构建接口,这样我就可以实例化尽可能多的控制面板,当我的硬件发送遥测数据包时,一次更新所有面板 我已经做了一些类似的工作并绘制了小部件,但是似乎我的回调函数没有被触发——例如,当按下下面代码中的一个按钮时,相应的串行打印输出不会发生。另外,Java 在处理中使用类内的controlp5小部件,java,processing,control-p5,Java,Processing,Control P5,我正在使用Processing and controlp5为Arduino构建一个接口,接口上连接了一些传感器。我想要有很多传感器,所以我尝试以模块化的方式构建接口,这样我就可以实例化尽可能多的控制面板,当我的硬件发送遥测数据包时,一次更新所有面板 我已经做了一些类似的工作并绘制了小部件,但是似乎我的回调函数没有被触发——例如,当按下下面代码中的一个按钮时,相应的串行打印输出不会发生。另外,println(channelOne.currentGain)始终打印0 我不太懂Java,所以我确信我在
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);
}
以下是传感器通道的类定义:
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);
}
}
可以改进的地方很少:
- 无需调用
delay()
draw()
每秒被调用大约60次,但您可以使用(例如framerate(50);
)轻松(干净地)控制
- 您正在SensorChannel内实例化cp5。也许您可以在主草图中创建一个ControlP5实例,并将引用传递给SensorChannel(在将来的多个通道中重新使用该实例)
有多种方法可以挖掘价值。您应该看看示例>贡献库>控制p5>使用
一种应该是直截了当的方法是使用控制器的方法。传递要将控制器插入的对象,只要该对象具有与控制器同名的属性,它就会设置其值:
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)
;
}
}
这是一个建议。请随意探索控制器事件和值的其他ControlP5示例