//DHCP-based OSC server test code //for use with IDE 1.0.5 //for use with W5100 or W5200 based ethernet shields #include #include #include #include //You need to remove SLIP*.* from the OSC Library folder to avoid HardwareSerial conflict with Conceptinetics library #include // you can find this written on the board of some Arduino Ethernets or shields //byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0xFB, 0xCF }; byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xC5, 0x3C }; // NOTE: Alternatively, you can assign a fixed IP to configure your // Ethernet shield. // byte ip[] = { 192, 168, 0, 154 }; int serverPort = 8000; //TouchOSC (incoming port) int destPort = 9000; //TouchOSC (outgoing port) //Create UDP message object EthernetUDP Udp; //DMX Shield // Create a DMX Master controller object (#channels, RW/Pin) Conceptinetics // Connect middle pin of Slave jumper on DMX shield to pin 7 on the Arduino // This is account the Ethernet shield uses pin 2 if I recall correctly. //Number of channels, pin assigned to control read and write operations on the DMX shield DMX_Master dmx_master ( 200 , 7 ); //arrays to hold the values of the fixtures ///////////////////DIM, Strobe, Chg Type, Chg Rate, R,G,B,W,A,U float fix_01[10] = {0,0,0,0,0,0,0,0,0,0}; float fix_02[10] = {0,0,0,0,0,0,0,0,0,0}; float fix_03[10] = {0,0,0,0,0,0,0,0,0,0}; float fix_04[10] = {0,0,0,0,0,0,0,0,0,0}; void setup(){ // Enable DMX master interface and start transmitting dmx_master.enable (); if (Ethernet.begin(mac) == 0) { //Serial.println("Failed to configure Ethernet using DHCP"); // no point in carrying on, so do nothing forevermore: while(true); } Udp.begin(serverPort); //set the dimmers to max OSCMessage msgOUT("/1/fdr_dim_01"); float value = 255; msgOUT.add(value); Udp.beginPacket(Udp.remoteIP(), destPort); msgOUT.send(Udp); // send the bytes Udp.endPacket(); // mark the end of the OSC Packet msgOUT.empty(); // free space occupied by message } void loop(){ //process received messages OSCMsgReceive(); } //set up for 10 channel operation of fixtures void OSCMsgReceive(){ OSCMessage msgIN; int size; if((size = Udp.parsePacket())>0){ while(size--) msgIN.fill(Udp.read()); if(!msgIN.hasError()){ //msgIN.route("/1/fdr_11",func11); //Dimmer msgIN.route("/1/fdr_12",func12); //Strobe msgIN.route("/1/fdr_13",func13); //a multi button actually, not a fader sends values 1,2,3,4. Color Jump, Gradual, Pulse, Sound msgIN.route("/1/fdr_14",func14); //Control speed for multi button msgIN.route("/1/fdr_15",func15); //RED msgIN.route("/1/fdr_16",func16); //GRN msgIN.route("/1/fdr_17",func17); //BLU msgIN.route("/1/fdr_18",func18); //WHT msgIN.route("/1/fdr_19",func19); //AMB msgIN.route("/1/fdr_20",func20); //Uv msgIN.route("/1/tgl_Police", funcPolice); msgIN.route("/1/btn_Whiteout", funcWhiteout); msgIN.route("/1/btn_Blackout", funcBlackout); } } } /////////////////FIXTURE 01 void func11(OSCMessage &msg, int addrOffset){ float value = msg.getFloat(0); dmx_master.setChannelValue (11, value); OSCMessage msgOUT("/1/lbl_11"); msgOUT.add(value); fix_01[0] = value; Udp.beginPacket(Udp.remoteIP(), destPort); msgOUT.send(Udp); // send the bytes Udp.endPacket(); // mark the end of the OSC Packet msgOUT.empty(); // free space occupied by message } void func12(OSCMessage &msg, int addrOffset){ float value = msg.getFloat(0); dmx_master.setChannelValue (12, value); OSCMessage msgOUT("/1/lbl_12"); msgOUT.add(value); fix_01[1] = value; Udp.beginPacket(Udp.remoteIP(), destPort); msgOUT.send(Udp); // send the bytes Udp.endPacket(); // mark the end of the OSC Packet msgOUT.empty(); // free space occupied by message } void func13(OSCMessage &msg, int addrOffset){ float value = msg.getFloat(0); value = value * 50; dmx_master.setChannelValue (13, value); OSCMessage msgOUT("/1/lbl_13"); msgOUT.add(value); fix_01[2] = value; Udp.beginPacket(Udp.remoteIP(), destPort); msgOUT.send(Udp); // send the bytes Udp.endPacket(); // mark the end of the OSC Packet msgOUT.empty(); // free space occupied by message } void func14(OSCMessage &msg, int addrOffset){ float value = msg.getFloat(0); dmx_master.setChannelValue (14, value); OSCMessage msgOUT("/1/lbl_14"); msgOUT.add(value); fix_01[3] = value; Udp.beginPacket(Udp.remoteIP(), destPort); msgOUT.send(Udp); // send the bytes Udp.endPacket(); // mark the end of the OSC Packet msgOUT.empty(); // free space occupied by message } void func15(OSCMessage &msg, int addrOffset){ float value = msg.getFloat(0); dmx_master.setChannelValue (15, value); OSCMessage msgOUT("/1/lbl_15"); msgOUT.add(value); fix_01[4] = value; Udp.beginPacket(Udp.remoteIP(), destPort); msgOUT.send(Udp); // send the bytes Udp.endPacket(); // mark the end of the OSC Packet msgOUT.empty(); // free space occupied by message } void func16(OSCMessage &msg, int addrOffset){ float value = msg.getFloat(0); dmx_master.setChannelValue (16, value); OSCMessage msgOUT("/1/lbl_16"); msgOUT.add(value); fix_01[5] = value; Udp.beginPacket(Udp.remoteIP(), destPort); msgOUT.send(Udp); // send the bytes Udp.endPacket(); // mark the end of the OSC Packet msgOUT.empty(); // free space occupied by message } void func17(OSCMessage &msg, int addrOffset){ float value = msg.getFloat(0); dmx_master.setChannelValue (17, value); OSCMessage msgOUT("/1/lbl_17"); msgOUT.add(value); fix_01[6] = value; Udp.beginPacket(Udp.remoteIP(), destPort); msgOUT.send(Udp); // send the bytes Udp.endPacket(); // mark the end of the OSC Packet msgOUT.empty(); // free space occupied by message } void func18(OSCMessage &msg, int addrOffset){ float value = msg.getFloat(0); dmx_master.setChannelValue (18, value); OSCMessage msgOUT("/1/lbl_18"); msgOUT.add(value); fix_01[7] = value; Udp.beginPacket(Udp.remoteIP(), destPort); msgOUT.send(Udp); // send the bytes Udp.endPacket(); // mark the end of the OSC Packet msgOUT.empty(); // free space occupied by message } void func19(OSCMessage &msg, int addrOffset){ float value = msg.getFloat(0); dmx_master.setChannelValue (19, value); OSCMessage msgOUT("/1/lbl_19"); msgOUT.add(value); fix_01[8] = value; Udp.beginPacket(Udp.remoteIP(), destPort); msgOUT.send(Udp); // send the bytes Udp.endPacket(); // mark the end of the OSC Packet msgOUT.empty(); // free space occupied by message } void func20(OSCMessage &msg, int addrOffset){ float value = msg.getFloat(0); dmx_master.setChannelValue (20, value); OSCMessage msgOUT("/1/lbl_20"); msgOUT.add(value); fix_01[9] = value; Udp.beginPacket(Udp.remoteIP(), destPort); msgOUT.send(Udp); // send the bytes Udp.endPacket(); // mark the end of the OSC Packet msgOUT.empty(); // free space occupied by message } //////////////////////PRESETS////////////////// void funcBlackout(OSCMessage &msg, int addrOffset){ //turn off all the lights int i; for (i = 5; i <= 10; i++) { int x = 0; dmx_master.setChannelValue ( i + 10, x); dmx_master.setChannelValue ( i + 20, x); dmx_master.setChannelValue ( i + 30, x); dmx_master.setChannelValue ( i + 40, x); } } void funcWhiteout(OSCMessage &msg, int addrOffset){ //turn off all the lights funcBlackout; int msShort = 5; dmx_master.setChannelValue ( 18, 255); dmx_master.setChannelValue ( 28, 255); dmx_master.setChannelValue ( 38, 255); dmx_master.setChannelValue ( 48, 255); //fade each fixture up to white for (int j = 1; j <= 4; j++){ //46 channels so far for (int i = 0; i <= 255; i++){ dmx_master.setChannelValue ( (j * 10) + 1, i); delay(msShort); } } } void funcPolice(OSCMessage &msg, int addrOffset){ float value = 0; //TouchOSC expects float values OSCMessage msgOUT("/1/tgl_Police"); msgOUT.add(value); Udp.beginPacket(Udp.remoteIP(), destPort); msgOUT.send(Udp); // send the bytes Udp.endPacket(); // mark the end of the OSC Packet msgOUT.empty(); // free space occupied by message int msOn = 75; int msOff = 25; funcBlackout; //red, fixture 01(ch 11) and 03(ch 31) dmx_master.setChannelValue ( 15, 255); dmx_master.setChannelValue ( 35, 255); dmx_master.setChannelValue ( 27, 255); dmx_master.setChannelValue ( 47, 255); for (int i = 0; i < 5; i++){ dmx_master.setChannelValue ( 11, 255); dmx_master.setChannelValue ( 31, 255); delay(msOn); dmx_master.setChannelValue ( 11, 0); dmx_master.setChannelValue ( 31, 0); delay(msOff); } //blue fixture 02(ch 23) and 04(ch 43) for (int i = 0; i < 5; i++){ dmx_master.setChannelValue ( 21, 255); dmx_master.setChannelValue ( 41, 255); delay(msOn); dmx_master.setChannelValue ( 21, 0); dmx_master.setChannelValue ( 41, 0); delay(msOff); } //restore what was going on before for (int i = 1; i <= 10; i = i + 1) { int x = fix_01[i]; dmx_master.setChannelValue ( i + 10, x); } for (int i = 1; i <= 10; i = i + 1) { int x = fix_02[i]; dmx_master.setChannelValue ( i + 20, x); } for (int i = 1; i <= 10; i = i + 1) { int x = fix_03[i]; dmx_master.setChannelValue ( i + 30, x); } for (int i = 1; i <= 10; i = i + 1) { int x = fix_04[i]; dmx_master.setChannelValue ( i + 40, x); } }