diff --git a/arduino/remembering_clive_wearing_arduino.ino b/arduino/remembering_clive_wearing_arduino.ino index 73e5fc3..7a99a05 100644 --- a/arduino/remembering_clive_wearing_arduino.ino +++ b/arduino/remembering_clive_wearing_arduino.ino @@ -1,22 +1,24 @@ #include // Include Timer1 library -#include // Include SimpleMessageSystem library -// This is programmed for an Arduino Mega controlling lights from outs 22+ -int AC_pin_offset = 22; // lowest out for lights +// Pin outputs for the 18 lights +int AC_pin_offsets[18] = {22, 24, 26, 28, 30, 23, 25, 27, 29, 32, 34, 36, 38, 31, 33, 35, 37, 39}; +int freq = 50; // 50 for EU and 60 for US int dims[18]; // dimmer values unsigned char clock_tick; // variable for Timer1 +char incomingByte; +int val = 0; +int light = 0; +int delim = 0; void setup() { Serial.begin(115200); for(int i = 0; i < 18; i++){ - dims[i] = 256; - // Set the pins to the triacs as outputs (using outs 0 - 17) - pinMode(AC_pin_offset + i, OUTPUT); + dims[i] = 215; + pinMode(AC_pin_offsets[i], OUTPUT); }; attachInterrupt(0, zero_crosss_int, RISING); - // for resoution of 128 steps, set timer so 33 microseconds for 60 Hz or 39 for 50 Hz - Timer1.initialize(39); + Timer1.initialize(1000000 / (freq * 2) / 256); // 8 bit control Timer1.attachInterrupt(timerIsr); // attach the service routine here } @@ -25,7 +27,9 @@ void timerIsr() { clock_tick++; for(int i = 0; i < 18; i++) { if (dims[i] == clock_tick) { - digitalWrite(AC_pin_offset + i, HIGH); // triac on + digitalWrite(AC_pin_offsets[i], HIGH); // triac on + delayMicroseconds(10); // triac On propogation delay (for 60Hz use 8.33, for 50Hz use 10) + digitalWrite(AC_pin_offsets[i], LOW); //triac off } }; } @@ -33,18 +37,18 @@ void timerIsr() { // function to be fired at the zero crossing to dim the light void zero_crosss_int() { clock_tick=0; - for(int i = 0; i < 18; i++){ - digitalWrite(AC_pin_offset + i, LOW); // triac Off - } } void loop(){ - int light = 0; - int val = 0; - // Checks to see if the message is complete and erases any previous messages - if (messageBuild() > 0) { - light = messageGetInt(); - val = messageGetInt(); - dims[light] = val; - } + if (Serial.available() > 0) { // something came across serial + while(1) { + incomingByte = Serial.read(); + if(incomingByte == -1) {break;}; + if(incomingByte < 0) {val = 256 + incomingByte;} else {val = incomingByte;}; + if(val == 253) {delim = 1; continue;}; + if(val == 254) {delim = 0; continue;}; + if(delim == 0) light = val; + if(delim == 1) dims[light] = val; + } + } } diff --git a/supercollider/remembering_clive_wearing_visuals.scd b/supercollider/remembering_clive_wearing_visuals.scd index 049ce92..829e744 100644 --- a/supercollider/remembering_clive_wearing_visuals.scd +++ b/supercollider/remembering_clive_wearing_visuals.scd @@ -25,7 +25,21 @@ projectionWin.view.keyDownAction = { |doc, char, mod, unicode, keycode, key| }; // Connect arduino; edit first arg / port to match index or name of port: SerialPort.listDevices -if(~arduino == 1, { arduino_port = SerialPort( 0, 115200) }, {}); +if(~arduino == 1, { arduino_port = SerialPort("/dev/ttyACM0", 115200); + r= Routine({ + var byte, str, res; + 99999.do{|i| + byte = arduino_port.read; + if(byte==13, { + (str).postln; + str = ""; + }, + { + str= str++byte.asAscii; + }); + }; +}).play; +}, {}); // Get control signals from SynthDef osc_func = OSCFunc.new({arg msg, time; brightness[msg[2]] = msg[3]; },'/tr', s.addr); @@ -52,24 +66,28 @@ projectionWin.drawFunc = { }; projectionWin.refresh; + // Refresh function refresh_func = { while { true } { // updateProjection projectionWin.refresh; - // updateArduino if(~arduino == 1, { // set min and max Brightness between 0 and 1 depending on wattage of light // it is best to keep the min slightly higher than 0 to keep the light from turning completely off {|i| var minBrightness = 0.15, maxBrightness = 0.85; - arduino_port.putAll(i.asString); - arduino_port.put(Char.space); - arduino_port.putAll((((brightness[i] * (maxBrightness - minBrightness) + minBrightness) - 1).abs * 256) - .trunc.asString); - arduino_port.put(Char.space); - arduino_port.put(13); + arduino_port.put(i); + arduino_port.put(253); + //if(brightness[0] < 0 + arduino_port.put(((((brightness[i] * (maxBrightness - minBrightness)) + minBrightness) - 1).abs * 256).asInteger); + arduino_port.put(254); + //arduino_port.put(254); } ! 18 }, {}); // delay 30.reciprocal.wait; } }; -) \ No newline at end of file +) + +//Char.space.asInt + +