int latchPin = 11; // RCLK
int clockPin = 4; // SCLK
int dataPin = 2; // DIO
int numLights=24;
unsigned long light = 0; // Bit pattern for entire display
byte b1 = 0; // byte place holders for each shift register
byte b2 = 0; // extracted from "light"
byte b3 = 0;
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
// Serial.begin(9600);
}
void loop()
{
for (int i = 0; i < numLights*2; i++)
{
int shift = i;
if( i >= numLights ) //if i is above numlights then wee need to start
{ // moving back to the left.
shift = numLights*2 - i - 1;
}
// Extract the bytes of the light patter to be sent out
light = (long)(1)<<shift;
b1 = (byte)((light>>16)&0xFF);
b2 = (byte)((light>>8)&0xFF);
b3 = (byte)((light)&0xFF);
updateShiftRegister(); // shift out b1, b2 and b3
delay(30);
}
}
void updateShiftRegister()
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, b1);
shiftOut(dataPin, clockPin, MSBFIRST, b2);
shiftOut(dataPin, clockPin, MSBFIRST, b3);
digitalWrite(latchPin, HIGH);
}