
// higher number is slower
int speed = 20;
// change spread to make the bell curve wiser or narrower
float spread = 0.12;
// set the postion to start outside of 0 to 1 so the first LED is dark
float bellCurveCenter = -spread;
float ledPos[3] = {.25, .5, .75};
int ledIndex[3] = {5, 10, 11};
void setup()
{
for (int i=0; i<3; i++){
pinMode(ledIndex[i], OUTPUT);
}
}
void loop()
{
// this is the juicy part
for (int i=0; i< 3; i++) {
// finding the distance of each LED from the center of our bell curve
float distance = abs(ledPos[i]-bellCurveCenter);
// this is the formula for the bell curve, multiply by 255 to put in the proper range for brightness
float brightness = exp(-0.5*pow(distance/spread, 2.))*255;
analogWrite(ledIndex[i],brightness);
}
// move the center
// you could adjust the speed with a potentiometer
if (millis()%speed==0)
bellCurveCenter += .01;
// start it over when it reaches the end
// reset based on the spread so that it fades all the way out before resetting
if (bellCurveCenter>1+spread) {
bellCurveCenter = -spread;
}
}