## Knight Rider Overkill

This is an extension to the learning loops example. I wired two potentiometers up to the analog inputs 0 and 1. From these I read the values to determine the delay and the brightness of the LEDs. In addition, the intensity of the LED's is faded instead of being just on/off as the wave moves back and forth. This requires using the PWM capable ports (5, 6, 9, 10, 11) for the LED outputs.

```/*
*  Knight Rider Overkill
*
*  speed and brightness.
*
* In ASCII art the extra wiring looks something like this:
*
*          +-+ potentiometer
*          |0|
*          +-+
*         / | \
*      5v   |   Gnd
*           |
*         inputPin
*/
int speedPin = 0;  // pin to read the potentiometer for speed
int intenPin = 1;  // pin to read the potentiometer for brightness

#define NUMLIGHTS 5
int pins[NUMLIGHTS] = { 5, 6, 9, 10, 11 };

void setup()
{
int lightPin;

for (lightPin=0 ; lightPin < NUMLIGHTS ; lightPin++) {
pinMode(pins[lightPin], OUTPUT);
}
}

void loop()
{
static int pos = 0;       // the position of the brightest light in the light array
static int direction = 1; // the direction the bright spot is travelling (1 or -1)
int light;
int speed = analogRead(speedPin);  // how fast the light moves
int inten = analogRead(intenPin) >> 2;  // read the value and divide by 4 to get range 0 .. 255

if (inten > 255) inten = 255;

for (light=0 ; light < NUMLIGHTS ; light++) {
if (light == pos) {  // The light at this position is set bright
analogWrite(pins[light], inten);
} else if ( light == (pos+1) || light == (pos-1)) {
// This makes the two lights adjacent to the bright one glow at reduced intensity.
// It makes for a nicer effect
analogWrite(pins[light], inten>>4);
} else {
// Digital I/O pins 5 & 6 don't seem to go dark if I do analogWrite(pins[light], 0)
// By doing digitalWrite it all looks correct
digitalWrite(pins[light], 0);
}
}

// move the light position
pos += direction;
// if we've reached the end, reverse directions
if (pos >= (NUMLIGHTS-1)) direction = -1;
if (pos <= 0) direction = 1;
delay(speed);
}

```