Tutorial.ShftOut13 History

Hide minor edits - Show changes to markup

March 25, 2010, at 12:10 AM by Tom Igoe -
Changed lines 68-69 from:
  digitalWrite(latchPin, HIGH);
to:
  digitalWrite(latchPin, LOW);
Changed line 83 from:
  digitalWrite(latchPin, LOW);
to:
  digitalWrite(latchPin, HIGH);
March 25, 2010, at 12:10 AM by Tom Igoe -
Changed line 23 from:

const int latchPin = 4;

to:

const int latchPin = 8;

Changed line 25 from:

const int clockPin = 3;

to:

const int clockPin = 12;

Changed lines 27-28 from:

const int dataPin = 2;

to:

const int dataPin = 11;

March 24, 2010, at 01:42 PM by Tom Igoe -
Changed lines 4-23 from:

//**************************************************************// // Name : shiftOutCode, Predefined Array Style // // Author : Carlyn Maw, Tom Igoe // // Date : 25 Oct, 2006 // // Version : 1.0 // // Notes : Code for using a 74HC595 Shift Register // // : to count from 0 to 255 // //****************************************************************

//Pin connected to ST_CP of 74HC595 int latchPin = 8; //Pin connected to SH_CP of 74HC595 int clockPin = 12; ////Pin connected to DS of 74HC595 int dataPin = 11;

//holders for infromation you're going to pass to shifting function byte data; byte dataArray[10];

to:

/*

  Shift Register Example
 for two 74HC595 shift registers

 This sketch turns on each of the LEDs attached to two 74HC595 shift registers,
 in sequence from output 0 to output 15.

 Hardware:
 * 2 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
 Modified 23 Mar 2010
 by Tom Igoe

 */

//Pin connected to latch pin (ST_CP) of 74HC595 const int latchPin = 4; //Pin connected to clock pin (SH_CP) of 74HC595 const int clockPin = 3; ////Pin connected to Data in (DS) of 74HC595 const int dataPin = 2;

char inputString[2];

Added lines 34-35:
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
Changed lines 37-53 from:
  //Arduino doesn't seem to have a way to write binary straight into the code 
  //so these values are in HEX.  Decimal would have been fine, too. 
  dataArray[0] = 0xAA; //10101010
  dataArray[1] = 0x55; //01010101
  dataArray[2] = 0x81; //10000001
  dataArray[3] = 0xC3; //11000011
  dataArray[4] = 0xE7; //11100111
  dataArray[5] = 0xFF; //11111111
  dataArray[6] = 0x7E; //01111110
  dataArray[7] = 0x3C; //00111100
  dataArray[8] = 0x18; //00011000
  dataArray[9] = 0x00; //00000000

  //function that blinks all the LEDs
  //gets passed the number of blinks and the pause time
  blinkAll(2,500); 
to:
  Serial.println("reset");
Changed lines 41-53 from:

  for (int j = 0; j < 10; j++) {
    //load the light sequence you want from array
    data = dataArray[j];
    //ground latchPin and hold low for as long as you are transmitting
    digitalWrite(latchPin, 0);
    //move 'em out
    shiftOut(dataPin, clockPin, data);   
    //return the latch pin high to signal chip that it 
    //no longer needs to listen for information
    digitalWrite(latchPin, 1);
    delay(1000);
to:
  // iterate over the 16 outputs of the two shift registers
  for (int thisLed = 0; thisLed < 16; thisLed++) {
    // write data to the shift registers:
    registerWrite(thisLed, HIGH);
    // if this is not the first LED, turn off the previous LED:
    if (thisLed > 0) {
      registerWrite(thisLed - 1, LOW);
    } 
    // if this is  the first LED, turn off the highest LED:
    else {
      registerWrite(15, LOW);
    } 
    // pause between LEDs:
    delay(250);
Added line 56:
Changed lines 59-105 from:
to:

// This method sends bits to the shift registers:

void registerWrite(int whichPin, int whichState) {

  // the bits you want to send. Use an unsigned int,
  // so you can use all 16 bits:
  unsigned int bitsToSend = 0;    

  // turn off the output so the pins don't light up
  // while you're shifting bits:
  digitalWrite(latchPin, HIGH);

  // turn on the next highest bit in bitsToSend:
  bitWrite(bitsToSend, whichPin, whichState);

  // break the bits into two bytes, one for 
  // the first register and one for the second:
  byte registerOne = highByte(bitsToSend);
  byte registerTwo = lowByte(bitsToSend);

  // shift the bytes out:
  shiftOut(dataPin, clockPin, MSBFIRST, registerTwo);
  shiftOut(dataPin, clockPin, MSBFIRST, registerOne);

  // turn on the output so the LEDs can light up:
  digitalWrite(latchPin, LOW);
Deleted lines 85-105:

//blinks the whole register based on the number of times you want to //blink "n" and the pause between them "d" //starts with a moment of darkness to make sure the first blink //has its full visual effect. void blinkAll(int n, int d) {

  digitalWrite(latchPin, 0);
  shiftOut(dataPin, clockPin, 0);
  digitalWrite(latchPin, 1);
  delay(200);
  for (int x = 0; x < n; x++) {
    digitalWrite(latchPin, 0);
    shiftOut(dataPin, clockPin, 255);
    digitalWrite(latchPin, 1);
    delay(d);
    digitalWrite(latchPin, 0);
    shiftOut(dataPin, clockPin, 0);
    digitalWrite(latchPin, 1);
    delay(d);
  }

}

November 02, 2006, at 01:35 AM by Carlyn Maw -
Added lines 1-2:
November 02, 2006, at 01:35 AM by Carlyn Maw -
Added lines 1-132:

Share