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