#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 int dims[18]; // dimmer values unsigned char clock_tick; // variable for Timer1 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); }; 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.attachInterrupt(timerIsr); // attach the service routine here } // this is the dimmer void timerIsr() { clock_tick++; for(int i = 0; i < 18; i++) { if (dims[i] == clock_tick) { digitalWrite(AC_pin_offset + i, HIGH); // triac on } }; } // 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; } }