68 lines
1.7 KiB
Text
68 lines
1.7 KiB
Text
/*
|
|
Shift Register Example
|
|
for 74HC595 shift register
|
|
|
|
This sketch turns reads serial input and uses it to set the pins
|
|
of a 74HC595 shift register.
|
|
|
|
Hardware:
|
|
* 74HC595 shift register attached to pins 2, 3, and 4 of the Arduino,
|
|
as detailed below.
|
|
* LEDs attached to each of the outputs of the shift register
|
|
|
|
Created 22 May 2009
|
|
Created 23 Mar 2010
|
|
by Tom Igoe
|
|
|
|
*/
|
|
|
|
//Pin connected to latch pin (ST_CP) of 74HC595
|
|
const int latchPin = 8;
|
|
//Pin connected to clock pin (SH_CP) of 74HC595
|
|
const int clockPin = 12;
|
|
////Pin connected to Data in (DS) of 74HC595
|
|
const int dataPin = 11;
|
|
|
|
void setup() {
|
|
//set pins to output because they are addressed in the main loop
|
|
pinMode(latchPin, OUTPUT);
|
|
pinMode(dataPin, OUTPUT);
|
|
pinMode(clockPin, OUTPUT);
|
|
Serial.begin(9600);
|
|
Serial.println("reset");
|
|
}
|
|
|
|
void loop() {
|
|
if (Serial.available() > 0) {
|
|
// ASCII '0' through '9' characters are
|
|
// represented by the values 48 through 57.
|
|
// so if the user types a number from 0 through 9 in ASCII,
|
|
// you can subtract 48 to get the actual value:
|
|
int bitToSet = Serial.read() - 48;
|
|
|
|
// write to the shift register with the correct bit set high:
|
|
registerWrite(bitToSet, HIGH);
|
|
}
|
|
}
|
|
|
|
// This method sends bits to the shift register:
|
|
|
|
void registerWrite(int whichPin, int whichState) {
|
|
// the bits you want to send
|
|
byte bitsToSend = 0;
|
|
|
|
// turn off the output so the pins don't light up
|
|
// while you're shifting bits:
|
|
digitalWrite(latchPin, LOW);
|
|
|
|
// turn on the next highest bit in bitsToSend:
|
|
bitWrite(bitsToSend, whichPin, whichState);
|
|
|
|
// shift the bits out:
|
|
shiftOut(dataPin, clockPin, MSBFIRST, bitsToSend);
|
|
|
|
// turn on the output so the LEDs can light up:
|
|
digitalWrite(latchPin, HIGH);
|
|
|
|
}
|
|
|