main
commit
bfd5be7cb8
5 changed files with 350 additions and 0 deletions
@ -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…
Reference in new issue