0% found this document useful (0 votes)
70 views

Servo

This document contains Arduino code to control 8 LEDs using a 74HC595 shift register chip rather than individual pins on the Arduino. It defines pin connections to the shift register for data, clock, and latch. The code uses bitwise operations to send 8-bit values to light specific LEDs by shifting the bits out to the register which then lights the corresponding LEDs. Functions are included to update all LEDs, change a single LED, and shift the bits out slowly for observation.

Uploaded by

api-277007871
Copyright
© © All Rights Reserved
Available Formats
Download as ODT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
70 views

Servo

This document contains Arduino code to control 8 LEDs using a 74HC595 shift register chip rather than individual pins on the Arduino. It defines pin connections to the shift register for data, clock, and latch. The code uses bitwise operations to send 8-bit values to light specific LEDs by shifting the bits out to the register which then lights the corresponding LEDs. Functions are included to update all LEDs, change a single LED, and shift the bits out slowly for observation.

Uploaded by

api-277007871
Copyright
© © All Rights Reserved
Available Formats
Download as ODT, PDF, TXT or read online on Scribd
You are on page 1/ 4

/* --------------------------------------------------------* | Arduino Experimentation Kit Example Code

|
* | CIRC-05 .: 8 More LEDs :. (74HC595 Shift Register) |
* --------------------------------------------------------*
* We have already controlled 8 LEDs however this does it in a
slightly
* different manner. Rather than using 8 pins we will use just three
* and an additional chip.
*
*
*/
//Pin Definitions
//Pin Definitions
//The 74HC595 uses a serial communication
//link which has three pins
int data = 2;
int clock = 3;
int latch = 4;
//Used for single LED manipulation
int ledState = 0;
const int ON = HIGH;
const int OFF = LOW;
/*
* setup() - this function runs once when you turn your Arduino on
* We set the three control pins to outputs
*/
void setup()
{
pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(latch, OUTPUT);
}

/*
* loop() - this function will start after setup finishes and then repeat
* we set which LEDs we want on then call a routine which sends
the states to the 74HC595
*/
void loop()
// run over and over again
{
int delayTime = 100; //the number of milliseconds to delay
between LED updates
for(int i = 0; i < 256; i++){
updateLEDs(i);
delay(delayTime);
}
}

/*
* updateLEDs() - sends the LED states set in ledStates to the
74HC595
* sequence
*/
void updateLEDs(int value){
digitalWrite(latch, LOW); //Pulls the chips latch low
shiftOut(data, clock, MSBFIRST, value); //Shifts out the 8 bits to
the shift register
digitalWrite(latch, HIGH); //Pulls the latch high displaying the data
}
/*
* updateLEDsLong() - sends the LED states set in ledStates to the
74HC595
* sequence. Same as updateLEDs except the shifting out is done
in software
* so you can see what is happening.
*/
void updateLEDsLong(int value){
digitalWrite(latch, LOW); //Pulls the chips latch low
for(int i = 0; i < 8; i++){ //Will repeat 8 times (once for each bit)

int bit = value & B10000000; //We use a "bitmask" to select only
the eighth
//bit in our number (the one we are addressing this time through
value = value << 1;
//we move our number up one bit value so
next time bit 7 will be
//bit 8 and we will do our math on it
if(bit == 128){digitalWrite(data, HIGH);} //if bit 8 is set then set our
data pin high
else{digitalWrite(data, LOW);}
//if bit 8 is unset then set the
data pin low
digitalWrite(clock, HIGH);
//the next three lines pulse the
clock pin
delay(1);
digitalWrite(clock, LOW);
}
digitalWrite(latch, HIGH); //pulls the latch high shifting our data
into being displayed
}
//These are used in the bitwise math that we use to change
individual LEDs
//For more details http://en.wikipedia.org/wiki/Bitwise_operation
int bits[] = {B00000001, B00000010, B00000100, B00001000,
B00010000, B00100000, B01000000, B10000000};
int masks[] = {B11111110, B11111101, B11111011, B11110111,
B11101111, B11011111, B10111111, B01111111};
/*
* changeLED(int led, int state) - changes an individual LED
* LEDs are 0 to 7 and state is either 0 - OFF or 1 - ON
*/
void changeLED(int led, int state){
ledState = ledState & masks[led]; //clears ledState of the bit we
are addressing
if(state == ON){ledState = ledState | bits[led];} //if the bit is on we

will add it to le
//dState
updateLEDs(ledState);
shift register
}

//send the new LED state to the

You might also like