Arduino Knight Rider Project

Saturday, August 28, 2010 07:25 PM

I've always wanted to build a Knight Rider style LED array (minus the swoosh sound). It just so happens that a few months ago I ordered an arduino. I finally assembled the "proto shield" for it, and one of the first things I wanted to test out is if I can make something like this. I'm pleased to report it took about an hour of hacking and it works. Check out the video.

posted using snapp.me

Schematic

Parts List

  • 1 x Arduino
  • 5 x Red LED's
  • 5 x 1k ohm (1/4 watt) Resistors
  • 16 guage insolated solid copper wire (about 6 inches will do, you'll also probably need some wire strippers and side cutters)

Code

I think the following code could be optimized a lot. However the whole purpose of this experiment was to test if something like this is quick and relatively easy to hack up.

/*
 *  Knight Rider
 * 
 *  Ever watch Knight Rider? Yes that 80's show with that awesome car named Kit?
 *
 *  Want that same effect for your car?
 *
 *  Here it is.
 *
 *  created 28 August 2010
 *  by Nicholas Granado
 *  
 */

int DELAY = 100;
int LONG_DELAY = 500;
int MODE = 0;
int START = 9;
int LENGTH = 14;
//       PINS: 0 1 2 3 4 5 6 7 8 9 0 1 2 3
int state[] = {0,0,0,0,0,0,0,0,0,1,0,0,0,0};
int pin;

void setup()   {                
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

void load_pin_state() {
  for(pin = START; pin < LENGTH; pin++) {
    if(state[pin] == 0) {
      digitalWrite(pin, LOW);
    }
    else if(state[pin] == 1) {
      digitalWrite(pin, HIGH);    
    }
  }

  if(state[START] == 1 || state[LENGTH - 1] == 1) {
    delay(LONG_DELAY);
  } else {
    delay(DELAY);
  }
}

void loop()                     
{
  load_pin_state();

  if(MODE == 0) {

    for(pin = START; pin < LENGTH; pin++) {
      if(state[pin] == 1) {
        state[pin] = 0;
        state[pin + 1] = 1;

        if((pin + 1) == (LENGTH - 1)) {
          MODE = 1;
        }

        break;
      }
    } // end for loop

  } else {

    for(pin = LENGTH - 1; pin >= START; pin--) {
      if(state[pin] == 1) {
        state[pin] = 0;
        state[pin - 1] = 1;

        if((pin - 1) == START){
          MODE = 0;
        }

        break;
      }
    } // end for loop

  }// end mode  
}

Summary

The arduino hardware platform makes building circuits and interfacing them with a micro-controller fun. My next goal is to build something a bit more complicated and useful.