Learn Arduino with Olympia Circuits
Learn Arduino
  • Home
    • Get Started
    • How to Use This Site
  • Electronics
    • The Basics
    • Electricity Flows like Water
    • Electronic Components
    • The Arno Board
  • Programming
    • The Basics
    • setup and loop Blocks
    • Variables and Arrays
    • Connecting with the Pins
    • Flow Control >
      • if Statement
      • Loops
      • Delays
    • Functions
    • Serial Communication
    • USB
    • Some Thoughts
  • Projects
    • Projects 1 >
      • 1.01: Blink
      • 1.02 Blink x2
      • 1.03 Blink Faster
      • 1.04 LED Chase!
      • 1.05 Wait To Blink
      • 1.06 Blink a Little Faster Now
      • 1.07 LED Fade
      • 1.08 RGB Blink
      • 1.09 Change RGB Color with SW1
      • 1.10 Fade RGB Colors
      • 1.11 Reaction Time Game
    • Projects 2 >
      • 2.01 Hello World
      • 2.02 Talk Back
      • 2.03 ASCII Values
      • 2.04 Ski Game
      • 2.05 Demonstration of the String Object
    • Projects 3 >
      • 3.01 Read the Potentiometer
      • 3.02 ASCIIbet Soup
      • 3.03 Potentiometer sets LED Brightness
      • 3.04 Potentiometer Sets Blink Rate
      • 3.05 LED Chase, Part II
    • Projects 4 >
      • 4.01 Bringing the Piezo to Life
      • 4.02 Controlling the Piezo with a Function
      • 4.03 Piezo C Major
      • 4.04 Piezo Greensleaves
      • 4.05 Piezo Metronome
      • 4.06 Piezo as an Input
      • 4.07 Piezo as an Input 2
      • 4.08 Metronome II
      • 4.09 Piezo Playback
      • 4.10 Piezo Fireworks
      • 4.11 Piezo Mosquito
    • Projects 5 >
      • 5.01 The Phototransistor
      • 5.02 Light and Sound
      • 5.03 Light and Sound II
    • Projects 6 >
      • 6.01 EEPROM
      • 6.02 I2C Address Scan
      • 6.03 Read the I2C Temperature Sensor
      • 6.04 High Temperature Alarm
    • Projects 7 >
      • 7.01 Arno Phone Home
      • 7.02 Keyboard Alphabet
      • 7.03 Move Mouse
      • 7.04 Draw Squares
    • Special Projects >
      • Bike Light Demo
  • References
    • Arno Pin Key
    • Arno Schematic
    • Project Index

Project 1.04 LED chase!

 We’ve only used two LEDs so far, but on the Arno board we can control a total of four single LEDs and the RGB LED.  In this project we’ll use the four single LEDs to create a “chase” illusion.  Upload this project and watch the LEDs run in circles around the board.


Concepts: for loop, nested loop, arrays

Circuits:
  • Circuit 1


  • Select Sketch

    ///////////////////////////////////////////////////
    //Project 3 LED Chase
    int LEDS[4] = {6,7,8,13};
    int wait = 60;
    void setup(){
    for(int k = 0; k < 4; k++){
    pinMode(LEDS[k],OUTPUT);
    }
    }
    void loop(){
    for(wait = 250; wait >= 10; wait = wait - 3){
    for(int k = 0; k < 4; k++){
    digitalWrite(LEDS[k],HIGH);
    delay(wait);
    digitalWrite(LEDS[k],LOW);
    }
    }
    }
    ///////////////////////////////////////////////////

    We use an int array to access the four LEDs rather than referencing each one separately.  This simplifies our sketch since we can use a for loop to go through elements 0 to 3 of the array, which contain the pin numbers for the single LEDs:

    int LEDS[4] = {6,7,8,13};

    We use our first for loop in the setup() block to set the pinMode of each LED.  Remember, that the for loop repeats everything in the block that starts with { and ends with } until the conditional statement is no longer true.  We start with k=0 since the first element in an array is always 0:

      for(int k = 0; k < 4; k++){

        pinMode(LEDS[k],OUTPUT);

      }

    In the loop() block we use nested for loops.  This means that one loop is inside of the other.  The outer loop controls how quickly we move between the LEDs.  It decrements the variable wait between 250 and 10 in steps of 3:

    for(wait = 250; wait >= 10; wait = wait - 3){

    The inner loop goes through each of its values for every cycle of the outer loop.  You might think of these loops like gears.  Picture a small gear (the inner loop) up against a larger gear (the outer loop).  Every time the large gear turns once, the small gear turns many times.  Our inner loop cycles through each of the LEDs, switching them on and off according to the value of wait:

        for(int k = 0; k < 4; k++){

          digitalWrite(LEDS[k],HIGH);

          delay(wait);

          digitalWrite(LEDS[k],LOW);

        }

    Before we finish up, we need the closing brackets for the outer loop and the loop() block:

      }

    }

    Now we’re done!


    Back to Projects 1

    Copyright Olympia Circuits LLC 2014. All Rights Reserved.