const int ShiftPWM_latchPin=8;
#include <ShiftPWM.h>
const bool ShiftPWM_invertOutputs = false;
const bool ShiftPWM_balanceLoad = false;
unsigned char maxBrightness = 255;
unsigned char pwmFrequency = 75;
int numRegisters = 4;
int numRGBleds = numRegisters*8/3;
void setup()
{
Serial.begin(9600);
// Sets the number of 8-bit registers that are used.
ShiftPWM.SetAmountOfRegisters(numRegisters);
ShiftPWM.SetPinGrouping(1);
ShiftPWM.Start(pwmFrequency,maxBrightness);
}
void loop()
{
ShiftPWM.SetAll(0);
ShiftPWM.PrintInterruptLoad();
ShiftPWM.OneByOneFast();
for(int j=0;j<maxBrightness;j++)
{
ShiftPWM.SetAll(j);
delay(20);
}
for(int j=maxBrightness;j>=0;j--)
{
ShiftPWM.SetAll(j);
delay(20);
}
for(int output=0;output<numRegisters*8-1;output++)
{
ShiftPWM.SetAll(0);
for(int brightness=0;brightness<maxBrightness;brightness++)
{
ShiftPWM.SetOne(output+1,brightness);
ShiftPWM.SetOne(output,maxBrightness-brightness);
delay(1);
}
}
for(int hue = 0; hue<360; hue++)
{
ShiftPWM.SetAllHSV(hue, 255, 255);
delay(50);
}
for(int shift=0;shift<6;shift++)
{
for(int led=0; led<numRGBleds; led++)
{
switch((led+shift)%6)
{
case 0:
ShiftPWM.SetRGB(led,255,0,0);
break;
case 1:
ShiftPWM.SetRGB(led,0,255,0);
break;
case 2:
ShiftPWM.SetRGB(led,0,0,255);
break;
case 3:
ShiftPWM.SetRGB(led,255,128,0);
break;
case 4:
ShiftPWM.SetRGB(led,0,255,255);
break;
case 5:
ShiftPWM.SetRGB(led,255,0,255);
break;
}
}
delay(2000);
}
for(int i=0;i<1000;i++){
ShiftPWM.SetHSV(random(numRGBleds),random(360),255,255);
delay(15);
}
int peak=0;
int prevPeak=0;
int currentLevel = 0;
for(int i=0;i<40;i++)
{
prevPeak = peak;
while(abs(peak-prevPeak)<5)
{
peak = random(numRGBleds);
}
while(currentLevel!=peak)
{
if(currentLevel<peak)
{
currentLevel++;
}
else
{
currentLevel--;
}
for(int led=0;led<numRGBleds;led++)
{
if(led<=currentLevel)
{
int hue = (numRGBleds-1-led)*120/numRGBleds;
ShiftPWM.SetHSV(led,hue,255,255);
}
else
{
ShiftPWM.SetRGB(led,0,0,0);
}
}
delay((64/numRGBleds)*(numRGBleds-currentLevel));
}
}
rgbLedRainbow(numRGBleds, 5, 3, numRegisters*8/3);
rgbLedRainbow(numRGBleds, 10, 3, numRegisters*8/3*4);
}
void rgbLedRainbow(int numRGBLeds, int delayVal, int numCycles, int rainbowWidth)
{
ShiftPWM.SetAll(0);
for(int cycle=0;cycle<numCycles;cycle++)
{
for(int colorshift=0;colorshift<360;colorshift++)
{
for(int led=0;led<numRGBLeds;led++)
{
int hue = ((led)*360/(rainbowWidth-1)+colorshift)%360;
ShiftPWM.SetHSV(led, hue, 255, 255);
}
delay(delayVal);
}
}
}
Comments
Please log in or sign up to comment.