Ramji Patel
Published © GPL3+

ShiftRegister RGB LED

Control RGB LEDs with Shift Registers

AdvancedFull instructions provided1,491
ShiftRegister RGB LED

Things used in this project

Hardware components

Arduino Nano R3
Arduino Nano R3
×1
Resistor 100 ohm
Resistor 100 ohm
×30
NXP 74HC595 Shift Register
×1
Solderless Breadboard Full Size
Solderless Breadboard Full Size
×1
Jumper wires (generic)
Jumper wires (generic)
×1
USB-A to Mini-USB Cable
USB-A to Mini-USB Cable
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Schematics

Shift Register RGB LED Circuit diagram pdf

PDF File

Code

ShiftRegister RGB LED Code

C/C++
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); 
  }  
 }
}

Credits

Ramji Patel
26 projects • 18 followers
Myself Ramji Patel. I am an Engineering student and pursuing my B-Tech from Institute of engineering and rural Technology Prayagraj, India.
Contact

Comments

Please log in or sign up to comment.