일부 센서가 연결된 Arduino의 경우 Processing 및 controlp5를 사용하여 인터페이스를 구축하고 있습니다. 많은 센서를 갖고 싶습니다. 그래서 인터페이스를 모듈 방식으로 구축하려고합니다. 따라서 센서가있는만큼 많은 컨트롤 패널을 인스턴스화하고, 하드웨어가 원격 측정 패킷을 보낼 때 모든 패널을 한 번에 업데이트 할 수 있습니다.처리에서 클래스 내에서 controlp5 위젯 사용
나는 위젯을 그리며 작동하지만 콜백 함수가 트리거되지 않은 것처럼 보입니다. 예를 들어, 아래 코드의 버튼 중 하나를 누르면 해당 직렬 출력이 표시되지 않습니다. 우연히 있다. 또한 메인 스케치의 println(channelOne.currentGain);
은 게인 슬라이더가 무엇을 하든지간에 항상 0을 인쇄합니다.
나는 많은 자바를 사용하지 않으므로 클래스와 변수가 어떻게 선언되는지에 대한 기본적인 내용을 여기에서 놓치고 있다고 확신한다. 올바르게 설정하는 방법에 대한 조언을 많이 주시면 감사하겠습니다! 여기
내 주요 프로그램 :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);
}
}
내 솔루션에 문제가 있습니까? –