#include <Adafruit_NeoPixel.h>
#define PIN 2
#define NUM_PIXELS 32
#define NUM_PER_RING 16
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM_PIXELS, PIN, NEO_GRB + NEO_KHZ800);
int offset = 0; // the position of the red LEDs
int speed = 50; // initial delay in milliseconds
int speedStep = 1; // how much to change speed each loop
int minSpeed = 5; // fastest
int maxSpeed = 100; // slowest
int direction = 1; // 1 = forward, -1 = backward
void setup() {
pixels.begin();
}
void loop() {
// update LED rings
for (int i = 0; i < NUM_PER_RING; i++) {
int brightness = 0; // default off
if (i == offset || i == (offset + 8) % NUM_PER_RING) {
brightness = 255; // red LEDs
}
// left ring
pixels.setPixelColor(i, pixels.Color(brightness, brightness, 0));
// right ring
pixels.setPixelColor(i + NUM_PER_RING, pixels.Color(brightness, brightness, 0));
}
pixels.show();
// move offset according to direction
offset += direction;
if (offset >= NUM_PER_RING) offset = 0;
if (offset < 0) offset = NUM_PER_RING - 1;
// update speed
speed += speedStep;
// reverse direction and speedStep if limits reached
if (speed >= maxSpeed || speed <= minSpeed) {
speedStep = -speedStep;
direction = -direction; // reverse LED movement
}
delay(speed); // delay controls speed
}