Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void loop()
- {
- // We're going to use the same functions we played with back
- // in circuit 04, "Multiple LEDs", we've just replaced
- // digitalWrite() with a new function called shiftWrite()
- // (see below). We also have a new function that demonstrates
- // binary counting.
- // To try the different functions below, uncomment the one
- // you want to run, and comment out the remaining ones to
- // disable them from running.
- oneAfterAnother(); // All on, all off
- //oneOnAtATime(); // Scroll down the line
- //pingPong(); // Like above, but back and forth
- //randomLED(); // Blink random LEDs
- //marquee();
- //binaryCount(); // Bit patterns from 0 to 255
- }
- void shiftWrite(int desiredPin, boolean desiredState)
- // This function lets you make the shift register outputs
- // HIGH or LOW in exactly the same way that you use digitalWrite().
- // Like digitalWrite(), this function takes two parameters:
- // "desiredPin" is the shift register output pin
- // you want to affect (0-7)
- // "desiredState" is whether you want that output
- // to be HIGH or LOW
- // Inside the Arduino, numbers are stored as arrays of "bits",
- // each of which is a single 1 or 0 value. Because a "byte" type
- // is also eight bits, we'll use a byte (which we named "data"
- // at the top of this sketch) to send data to the shift register.
- // If a bit in the byte is "1", the output will be HIGH. If the bit
- // is "0", the output will be LOW.
- // To turn the individual bits in "data" on and off, we'll use
- // a new Arduino commands called bitWrite(), which can make
- // individual bits in a number 1 or 0.
- {
- // First we'll alter the global variable "data", changing the
- // desired bit to 1 or 0:
- bitWrite(data,desiredPin,desiredState);
- // Now we'll actually send that data to the shift register.
- // The shiftOut() function does all the hard work of
- // manipulating the data and clock pins to move the data
- // into the shift register:
- shiftOut(datapin, clockpin, MSBFIRST, data);
- // Once the data is in the shift register, we still need to
- // make it appear at the outputs. We'll toggle the state of
- // the latchPin, which will signal the shift register to "latch"
- // the data to the outputs. (Latch activates on the high-to
- // -low transition).
- digitalWrite(latchpin, HIGH);
- digitalWrite(latchpin, LOW);
- }
- /*
- oneAfterAnother()
- This function will light one LED, delay for delayTime, then light
- the next LED, and repeat until all the LEDs are on. It will then
- turn them off in the reverse order.
- */
- void oneAfterAnother()
- {
- int index;
- int delayTime = 100; // Time (milliseconds) to pause between LEDs
- // Make this smaller for faster switching
- // Turn all the LEDs on:
- // This for() loop will step index from 0 to 7
- // (putting "++" after a variable means add one to it)
- // and will then use digitalWrite() to turn that LED on.
- for(index = 0; index <= 7; index++)
- {
- shiftWrite(index, HIGH);
- delay(delayTime);
- }
- // Turn all the LEDs off:
- // This for() loop will step index from 7 to 0
- // (putting "--" after a variable means subtract one from it)
- // and will then use digitalWrite() to turn that LED off.
- for(index = 7; index >= 0; index--)
- {
- shiftWrite(index, LOW);
- delay(delayTime);
- }
- }
- /*
- oneOnAtATime()
- This function will step through the LEDs, lighting one at at time.
- */
- void oneOnAtATime()
- {
- int index;
- int delayTime = 100; // Time (milliseconds) to pause between LEDs
- // Make this smaller for faster switching
- // step through the LEDs, from 0 to 7
- for(index = 0; index <= 7; index++)
- {
- shiftWrite(index, HIGH); // turn LED on
- delay(delayTime); // pause to slow down the sequence
- shiftWrite(index, LOW); // turn LED off
- }
- }
- /*
- pingPong()
- This function will step through the LEDs, lighting one at at time,
- in both directions.
- */
- void pingPong()
- {
- int index;
- int delayTime = 100; // time (milliseconds) to pause between LEDs
- // make this smaller for faster switching
- // step through the LEDs, from 0 to 7
- for(index = 0; index <= 7; index++)
- {
- shiftWrite(index, HIGH); // turn LED on
- delay(delayTime); // pause to slow down the sequence
- shiftWrite(index, LOW); // turn LED off
- }
- // step through the LEDs, from 7 to 0
- for(index = 7; index >= 0; index--)
- {
- shiftWrite(index, HIGH); // turn LED on
- delay(delayTime); // pause to slow down the sequence
- shiftWrite(index, LOW); // turn LED off
- }
- }
- /*
- randomLED()
- This function will turn on random LEDs. Can you modify it so it
- also lights them for random times?
- */
- void randomLED()
- {
- int index;
- int delayTime = 100; // time (milliseconds) to pause between LEDs
- // make this smaller for faster switching
- // The random() function will return a semi-random number each
- // time it is called. See http://arduino.cc/en/Reference/Random
- // for tips on how to make random() more random.
- index = random(8); // pick a random number between 0 and 7
- shiftWrite(index, HIGH); // turn LED on
- delay(delayTime); // pause to slow down the sequence
- shiftWrite(index, LOW); // turn LED off
- }
- /*
- marquee()
- This function will mimic "chase lights" like those around signs.
- */
- void marquee()
- {
- int index;
- int delayTime = 200; // Time (milliseconds) to pause between LEDs
- // Make this smaller for faster switching
- // Step through the first four LEDs
- // (We'll light up one in the lower 4 and one in the upper 4)
- for(index = 0; index <= 3; index++)
- {
- shiftWrite(index, HIGH); // Turn a LED on
- shiftWrite(index+4, HIGH); // Skip four, and turn that LED on
- delay(delayTime); // Pause to slow down the sequence
- shiftWrite(index, LOW); // Turn both LEDs off
- shiftWrite(index+4, LOW);
- }
- }
- /*
- binaryCount()
- Numbers are stored internally in the Arduino as arrays of "bits",
- each of which is a 1 or 0. Just like the base-10 numbers we use
- every day, The position of the bit affects the magnitude of its
- contribution to the total number:
- Bit position Contribution
- 0 1
- 1 2
- 2 4
- 3 8
- 4 16
- 5 32
- 6 64
- 7 128
- To build any number from 0 to 255 from the above 8 bits, just
- select the contributions you need to make. The bits will then be
- 1 if you use that contribution, and 0 if you don't.
- This function will increment the "data" variable from 0 to 255
- and repeat. When we send this value to the shift register and LEDs,
- you can see the on-off pattern of the eight bits that make up the
- byte. See http://www.arduino.cc/playground/Code/BitMath for more
- information on binary numbers.
- */
- void binaryCount()
- {
- int delayTime = 1000; // time (milliseconds) to pause between LEDs
- // make this smaller for faster switching
- // Send the data byte to the shift register:
- shiftOut(datapin, clockpin, MSBFIRST, data);
- // Toggle the latch pin to make the data appear at the outputs:
- digitalWrite(latchpin, HIGH);
- digitalWrite(latchpin, LOW);
- // Add one to data, and repeat!
- // (Because a byte type can only store numbers from 0 to 255,
- // if we add more than that, it will "roll around" back to 0
- // and start over).
- data++;
- // Delay so you can see what's going on:
- delay(delayTime);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement