// RGB pin numbers #define redPin PWM3 #define greenPin PWM2 #define bluePin PWM4 #define FADESPEED 5 // variables to store current power values int currentPowerValue = 1; // variables to store current preset values // Preset 1 is currently set to fade (work is in the loop) int currentPreset1Value = 0; int currentPreset2Value = 0; int currentPreset3Value = 0; int currentPreset4Value = 0; int currentPreset5Value = 0; int currentPreset6Value = 0; // Variables to store current dimmer values byte lastSetDimmerRed; byte lastSetDimmerGreen; byte lastSetDimmerBlue; // Set everything up at once even if we're not using it, so we don't need to exclude/include on the z-wave network // If we change the channel type, we'll need to exclude/include anyway... ZUNO_SETUP_CHANNELS( ZUNO_SWITCH_BINARY(getterPower, setterPower), ZUNO_SWITCH_BINARY(getterPreset1, setterPreset1), ZUNO_SWITCH_BINARY(getterPreset2, setterPreset2), ZUNO_SWITCH_BINARY(getterPreset3, setterPreset3), ZUNO_SWITCH_BINARY(getterPreset4, setterPreset4), ZUNO_SWITCH_BINARY(getterPreset5, setterPreset5), ZUNO_SWITCH_BINARY(getterPreset6, setterPreset6), ZUNO_SWITCH_MULTILEVEL(getterRed, setterRed), ZUNO_SWITCH_MULTILEVEL(getterGreen, setterGreen), ZUNO_SWITCH_MULTILEVEL(getterBlue, setterBlue) ); void setup() { Serial.begin(9600); Serial.println("Starting"); pinMode(redPin, OUTPUT); //set up red pin as output pinMode(greenPin, OUTPUT); //set up green pin as output pinMode(bluePin, OUTPUT); //set up blue pin as output // If we rebooted for some reason, turn on so we know we're working or the power is back. setterPower(1); } void loop() { // If Preset 1 enabled - Fade between colors if (currentPreset1Value == 1) { int r, g, b; // fade from blue to violet for (r = 0; r < 256; r++) { analogWrite(redPin, r); delay(FADESPEED); } // fade from violet to red for (b = 255; b > 0; b--) { analogWrite(bluePin, b); delay(FADESPEED); } // fade from red to yellow for (g = 0; g < 256; g++) { analogWrite(greenPin, g); delay(FADESPEED); } // fade from yellow to green for (r = 255; r > 0; r--) { analogWrite(redPin, r); delay(FADESPEED); } // fade from green to teal for (b = 0; b < 256; b++) { analogWrite(bluePin, b); delay(FADESPEED); } // fade from teal to blue for (g = 255; g > 0; g--) { analogWrite(greenPin, g); delay(FADESPEED); } } } void setterPower(byte value) { if (value > 0) { // if greater then zero setterPreset1(0); setterPreset2(0); setterPreset3(0); setterPreset4(0); setterPreset5(0); setterPreset6(0); setterRed(99); setterGreen(99); setterBlue(60); currentPowerValue = 1; } else { // if equals zero setterRed(0); setterGreen(0); setterBlue(0); currentPowerValue = 0; setterPreset1(0); setterPreset2(0); setterPreset3(0); setterPreset4(0); setterPreset5(0); setterPreset6(0); } } byte getterPower() { return currentPowerValue; } // Currently set to a color fade via the loop function. void setterPreset1(byte value) { if (value > 0) { // if greater then zero currentPowerValue = 1; // keep power button in the on state currentPreset1Value = 1; // All other presents are off setterPreset2(0); setterPreset3(0); setterPreset4(0); setterPreset5(0); setterPreset6(0); } else { // if equals zero currentPreset1Value = 0; } } byte getterPreset1() { return currentPreset1Value; } void setterPreset2(byte value) { if (value > 0) { // if greater then zero // All other presents are off setterPreset1(0); setterPreset3(0); setterPreset4(0); setterPreset5(0); setterPreset6(0); } else { // if equals zero } // save our value currentPreset2Value = value; } byte getterPreset2() { return currentPreset2Value; } void setterPreset3(byte value) { if (value > 0) { // if greater then zero // All other presents are off setterPreset1(0); setterPreset2(0); setterPreset4(0); setterPreset5(0); setterPreset6(0); } else { // if equals zero } // save our value currentPreset3Value = value; } byte getterPreset3() { return currentPreset3Value; } void setterPreset4(byte value) { if (value > 0) { // if greater then zero // All other presents are off setterPreset1(0); setterPreset2(0); setterPreset3(0); setterPreset5(0); setterPreset6(0); } else { // if equals zero } // save our value currentPreset4Value = value; } byte getterPreset4() { return currentPreset4Value; } void setterPreset5(byte value) { if (value > 0) { // if greater then zero // All other presents are off setterPreset1(0); setterPreset2(0); setterPreset3(0); setterPreset4(0); setterPreset6(0); } else { // if equals zero } // save our value currentPreset5Value = value; } byte getterPreset5() { return currentPreset5Value; } void setterPreset6(byte value) { if (value > 0) { // if greater then zero // All other presents are off setterPreset1(0); setterPreset2(0); setterPreset3(0); setterPreset4(0); setterPreset5(0); } else { // if equals zero } // save our value currentPreset6Value = value; } byte getterPreset6() { return currentPreset6Value; } void setterRed(byte value) { if (value > 99) { // Z-Wave specification says this value can't be more then 99 value = 99; } // now we set the LED brightness analogWrite(redPin, ((long)value) * 255 / 99); // Save current value lastSetDimmerRed = value; } byte getterRed() { // return previously saved value return lastSetDimmerRed; } void setterGreen(byte value) { if (value > 99) { // Z-Wave specification says this value can't be more then 99 value = 99; } // now we set the LED brightness analogWrite(greenPin, ((long)value) * 255 / 99); // Save current value lastSetDimmerGreen = value; } byte getterGreen() { // return previously saved value return lastSetDimmerGreen; } void setterBlue(byte value) { if (value > 99) { // Z-Wave specification says this value can't be more then 99 value = 99; } // now we set the LED brightness analogWrite(bluePin, ((long)value) * 255 / 99); // Save current value lastSetDimmerBlue = value; } byte getterBlue() { // return previously saved value return lastSetDimmerBlue; }