reng 4 months ago
commit bfd5be7cb8
  1. 105
      LightControl/LightControl.pde
  2. 124
      LightControl/control.pde
  3. 61
      LightControl/light.pde
  4. 55
      LightControl/settings.pde
  5. 5
      LightControl/settings.xml

@ -0,0 +1,105 @@
import dmxP512.*;
import processing.serial.*;
import controlP5.*;
import oscP5.*;
import netP5.*;
OscP5 oscP5;
NetAddress myRemoteLocation;
int OSC_PORT=8888;
ControlP5 cp5;
DmxP512 dmxOutput;
int universeSize=128;
String DMXPRO_PORT="COM3";//case matters ! on windows port must be upper cased.
int DMXPRO_BAUDRATE=115000;
int LIGHT_COUNT=1;
Light[] lights;
int last_enter_time=0;
void setup(){
size(400, 400, JAVA2D);
load();
dmxOutput=new DmxP512(this,universeSize,false);
try{
dmxOutput.setupDmxPro(DMXPRO_PORT,DMXPRO_BAUDRATE);
}catch(Exception e){
println(e);
}
lights=new Light[LIGHT_COUNT];
for(int i=0;i<LIGHT_COUNT;++i){
lights[i]=new Light(i*3+1);
}
setupControl();
oscP5 = new OscP5(this,OSC_PORT);
}
void draw(){
background(0);
drawLight();
for(int i=0;i<LIGHT_COUNT;++i){
lights[i].update();
}
pushStyle();
fill(0,180,180);
textSize(20);
text(nfc(frameRate,2), 50, height-50);
popStyle();
}
//<>//
void drawLight(){
pushMatrix();
//translate(width/2, 0);
for(int i=0;i<LIGHT_COUNT;++i){
lights[i].draw(0,i*height/LIGHT_COUNT, width,height/LIGHT_COUNT);
}
popMatrix();
}
void updateLight(float val){
for(int i=0;i<LIGHT_COUNT;++i){
lights[i].setColor(val);
}
}
void oscEvent(OscMessage theOscMessage) {
/* print the address pattern and the typetag of the received OscMessage */
String addr=theOscMessage.addrPattern();
float value=float(theOscMessage.get(0).stringValue());
print("### received an osc message.");
print(" addrpattern: "+addr);
println(" val:"+value);
if(addr.equals("/light")){
updateLight(value);
}
}

@ -0,0 +1,124 @@
Accordion accordion;
int light_min=50;
int light_max=150;
int MARGIN=2;
int SLIDER_H=20;
int SLIDER_W=250;
int SLIDER_FONT=12;
ControlFont control_font;
void setupControl(){
cp5=new ControlP5(this);
PFont pfont = createFont("Arial",SLIDER_FONT,true);
control_font = new ControlFont(pfont,SLIDER_FONT);
Group group_settings=cp5.addGroup("Settings");
//group_settings.getCaptionLabel().setFont(control_font);
//group_settings.setHeight(SLIDER_H);
controlP5.Textfield f1=addText("DMXPRO_PORT", DMXPRO_PORT,0,0,SLIDER_W/2,SLIDER_H);
f1.moveTo(group_settings);
controlP5.Textfield f2=addText("DMXPRO_BAUDRATE", str(DMXPRO_BAUDRATE),SLIDER_W/2,0,SLIDER_W/2,SLIDER_H);
f2.moveTo(group_settings);
controlP5.Textfield f3=addText("OSC_PORT", str(OSC_PORT),0,SLIDER_H,SLIDER_W/2,SLIDER_H);
f3.moveTo(group_settings);
cp5.addTextlabel("note")
.setPosition(0,SLIDER_H*4)
.setText("***Restart on your own!")
.setColorValue(color(255,0,0))
.setFont(control_font)
.moveTo(group_settings);
Group group_color=cp5.addGroup("Light");
//group_color.getCaptionLabel().setFont(control_font);
//group_color.setHeight(SLIDER_H);
controlP5.Slider s1=addSlider("light_min",0,255,light_min,0,0,SLIDER_W,SLIDER_H);
s1.moveTo(group_color);
controlP5.Slider s2=addSlider("light_max",0,255,light_max,0,SLIDER_H,SLIDER_W,SLIDER_H);
s2.moveTo(group_color);
accordion=cp5.addAccordion("acc")
.setPosition(SLIDER_H,SLIDER_H*3)
.setWidth(SLIDER_W)
.addItem(group_settings)
.addItem(group_color);
accordion.setCollapseMode(Accordion.MULTI);
accordion.getCaptionLabel().setFont(control_font);
accordion.getValueLabel().setFont(control_font);
cp5.addButton("load")
.setPosition(SLIDER_H,SLIDER_H)
.setSize(SLIDER_W/2,SLIDER_H);
//.getCaptionLabel().setFont(control_font);
cp5.addButton("save")
.setPosition(SLIDER_H+SLIDER_W/2,SLIDER_H)
.setSize(SLIDER_W/2,SLIDER_H);
//.getCaptionLabel().setFont(control_font);
cp5.addButton("triggerLight")
.setPosition(SLIDER_H,SLIDER_H*2)
.setSize(SLIDER_W,SLIDER_H)
.setColorBackground(color(120,120,0));
//.getCaptionLabel().setFont(control_font);
}
controlP5.Slider addSlider(String name, float min, float max, float value, int x, int y, int w, int h){
controlP5.Slider slider=cp5.addSlider(name)
.setRange(min,max)
.setValue(value)
.setPosition(x,y)
.setSize(w,h)
.setBroadcast(true);
cp5.getController(name)
.getCaptionLabel()
.setFont(control_font)
.toUpperCase(false)
.setSize(SLIDER_FONT);
slider.getValueLabel()
.setFont(control_font)
.setSize(SLIDER_FONT);
return slider;
}
controlP5.Textfield addText(String name, String value, int x, int y, int w, int h){
controlP5.Textfield text=cp5.addTextfield(name)
.setText(value)
.setPosition(x,y)
.setSize(w,h)
.setAutoClear(false);
cp5.getController(name)
.getCaptionLabel()
.setFont(control_font)
.toUpperCase(false)
.setSize(SLIDER_FONT);
text.getValueLabel()
.setFont(control_font)
.setSize(SLIDER_FONT);
return text;
}

@ -0,0 +1,61 @@
// float[] COLOR={60,10,0};
float border=4;
class Light{
int start_channel;
float dest_value;
float value;
float last_time;
float phi;
Light(int channel_){
start_channel=channel_;
value=light_min;
last_time=millis();
phi=random(100);
}
void update(){
}
void reset(){
setColor(0);
}
void setColor(float val){
dest_value=val;
// for(int i=0;i<3;++i){
// dmxOutput.set(start_channel+i,int(val*COLOR[i]));
// }
dmxOutput.set(start_channel, constrain(int(val*(light_max-light_min)+light_min), 0,255));
//dmxOutput.set(start_channel+1, constrain(int(val*color_ww),0,255));
//dmxOutput.set(start_channel+2,0);
}
void draw(float x, float y, float w, float h){
int val_draw=int(dest_value*(light_max-light_min)+light_min);
//println(val_draw);
pushStyle();
fill(val_draw);
stroke(255);
rect(x+border,y+border,w-border*2,h-2*border);
fill(255);
textSize(24);
textAlign(CENTER);
//text(nfc(value,2), x+w/2,y+h/2);
text(nfc(dest_value,3), x+w/2,y+h/2);
popStyle();
}
}

@ -0,0 +1,55 @@
XML xml;
void load(){
try{
xml=loadXML("settings.xml");
if(!xml.hasChildren()){
println("Empty XML!");
return;
}
XML colorww=xml.getChild("COLOR");
light_min=colorww.getInt("light_min");
light_max=colorww.getInt("light_max");
XML dmx=xml.getChild("DMXPRO");
DMXPRO_PORT=dmx.getString("TUIO_PORT");
DMXPRO_BAUDRATE=dmx.getInt("BAUDRATE");
universeSize=dmx.getInt("UNIVERSE");
XML osc=xml.getChild("OSC");
OSC_PORT=osc.getInt("OSC_PORT");
}catch (Exception e) {
println(e);
}
}
void save(){
XML tmp = new XML("settings");
XML colorww=tmp.addChild("COLOR");
colorww.setInt("light_min", light_min);
colorww.setInt("light_max", light_max);
XML dmx=tmp.addChild("DMXPRO");
dmx.setString("TUIO_PORT",DMXPRO_PORT);
dmx.setInt("BAUDRATE",DMXPRO_BAUDRATE);
dmx.setInt("UNIVERSE",universeSize);
XML osc=tmp.addChild("OSC");
osc.setInt("OSC_PORT", OSC_PORT);
saveXML(tmp, "settings.xml");
}

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<settings>
<COLOR light_max="150" light_min="51"/>
<DMXPRO BAUDRATE="115000" TUIO_PORT="COM3" UNIVERSE="128"/>
</settings>
Loading…
Cancel
Save