In this project it was used the Piranha Super-flux RGB Led of common anode, and the PIC18F25K20, in order to generate combinations of colors. It has two function modes, automatic that generate the color sequence that is stored in the μC memory, and the manual mode in which you can select one of the seven possible colors.
The control of the RGB led is made with PWM(Pulse With Modulation), because PIC18F25K20 only have 2 PWM outputs (Hardware), I did the PWM by software to have 3 PWM outputs for that I use TIMER0 and for the Manual mode I use IOC(interrupt on change).
In this project I use push buttons to change between modes and to change the colors. But if we use the button as in the circuit (1) we have a problem. The problem with this configuration, due to the mechanical nature of any switch that may contains spring return action of some kind, there wont be a clean transition from a state to another, but instead there will be a series of high and low states spikes. To solve that problem we have to implement a de-bouncing system, it can be done by hardware or software. We can use a RC delay circuit or it can be done with a schmitt trigger, but both ways will increase the price. So I done by software the de-bounce.
Example of code to do de-bounce:
It can be done in a different away but this way works for me.
I use a 7812 voltage regulator to keep the voltage stable in the RGB led and for μC I use an LM317 voltage Regulator. To calculate the output of LM317 I use this equation:
I use different resistor values on the RGB Led because which color have a different VF (Forward Voltage) in order to have the same LUX for each color. To calculate the resister I use these equations: