' ' Program: RGB LED Fader ' Author: (c) 2008 by A Fox Consulting & Design ' http://www.afox-consulting.com ' Date: 01/07/2008 ' RGB LED(s) hooked up to the BASIC Stamp via 3 LM358 op amps ' used as voltage followers. PWM out on I/O pins 0,1,2 for R,G,B. ' 220 ohm resisters between LM358 outputs and common anode RGB ' LED cathodes. Use 1mf capacitors to ground on I/O pins rather than ' the listed 0.1mf to cover brief moment when issuing a PWM when ' pin drops to 0 volts (this caused brightness of element to spike ' a bit before fade down). Use 2.2k resisters rather than 10k to ' keep cap. charge time down to around 40ms. ' {$STAMP BS2} ' {$PBASIC 2.5} _RED CON 0 _GREEN CON 1 _BLUE CON 2 ' High and Low PWM settings for each color component. ' Did this so we don't waste time PWMing in ranges that don't ' change LED brightness. HRPWM CON 192 LRPWM CON 32 HGPWM CON 160 LGPWM CON 32 HBPWM CON 144 LBPWM CON 32 FadeIdx VAR Byte Function VAR Byte l VAR Byte a VAR Byte b VAR Byte c VAR Byte _ColorPin VAR Byte ' Format: ,[,,...] ' 0 - Fade Red Channel ' 1 - Fade Green Channel ' 2 - Fade Blue Channel ' 3 - Set Red Channel ' 4 - Set Green Channel ' 5 - Set Blue Channel ' 6 - Stop ' 7 - Pause *100 ms ' 8 - Reset to data index ' 9 - Reset to top of data FadeData DATA _RED, HRPWM, LRPWM DATA _GREEN, HGPWM, LGPWM DATA _RED, LRPWM, HRPWM DATA _BLUE, HBPWM, LBPWM DATA _GREEN, LGPWM, HGPWM DATA _RED, HRPWM, LRPWM DATA _BLUE, LBPWM, HBPWM DATA _RED, LRPWM, HRPWM DATA 7, 10 DATA 3, 0 DATA 4, 0 DATA 5, 0 DATA 7, 20 DATA 3, 255 DATA 4, 255 DATA 5, 255 DATA 7, 10 DATA 9 ' Skip back after first fade setup: DIRL = %11111111 OUTL = %11111111 FadeIdx = 0 PAUSE 500 cycle: READ FadeData+FadeIdx, Function SELECT Function CASE 0,1,2 ' Single Channel Fade READ FadeData+FadeIdx+1, a READ FadeData+FadeIdx+2, b FOR l = a TO b PWM Function, l, 10 NEXT IF b > a THEN ' If we're fading an element to black HIGH Function ' make sure to TOTALLY charge the capacitor ENDIF ' so element is completely off. FadeIdx=FadeIdx+3 CASE 3,4,5 ' Single Channels Set READ FadeData+FadeIdx+1, a PWM (Function-3), a, 10 FadeIdx=FadeIdx+2 CASE 6 DeadEnd: GOTO DeadEnd CASE 7 ' Pause READ FadeData+FadeIdx+1, a PAUSE (a*100) FadeIdx = FadeIdx + 2 CASE 8 ' Reset to pointer of data stack READ FadeData+FadeIdx+1, a FadeIdx = a CASE 9 ' Reset to top of data stack FadeIdx = FadeData ENDSELECT GOTO cycle