#include <Adafruit_NeoPixel.h>

#define LED_PIN1 12
#define LED_PIN2 3
#define LED_PIN3 8
#define LED_COUNT 24

Adafruit_NeoPixel ring1 = Adafruit_NeoPixel(LED_COUNT, LED_PIN1, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel ring2 = Adafruit_NeoPixel(LED_COUNT, LED_PIN2, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel ring3 = Adafruit_NeoPixel(LED_COUNT, LED_PIN3, NEO_GRB + NEO_KHZ800);

void setup() {
  ring1.begin();
  ring2.begin();
  ring3.begin();
  ring1.setBrightness(150);
  ring2.setBrightness(150);
  ring3.setBrightness(150);
}

void loop() {
  // Chase clockwise
  for (int i = 0; i < LED_COUNT; i++) {
    int j = (i + LED_COUNT - 5) % LED_COUNT;
    int k = (i + LED_COUNT - 5) % LED_COUNT;
    ring1.setPixelColor(i, Wheel(i * 256 / LED_COUNT));
    ring2.setPixelColor(j, Wheel(i * 256 / LED_COUNT));
    ring3.setPixelColor(k, Wheel(i * 256 / LED_COUNT));
    ring1.show();
    ring2.show();
    ring3.show();
    delay(50);
  }
  
  // Chase anticlockwise
  for (int i = LED_COUNT - 1; i >= 0; i--) {
    int j = (i + LED_COUNT - 6) % LED_COUNT;
    int k = (i + LED_COUNT - 3) % LED_COUNT;
    ring1.setPixelColor(i, Wheel(i * 256 / LED_COUNT));
    ring2.setPixelColor(j, Wheel(i * 256 / LED_COUNT));
    ring3.setPixelColor(k, Wheel(i * 256 / LED_COUNT));
    ring1.show();
    ring2.show();
    ring3.show();
    delay(100);
  }
  
  // Repeat the loop after a delay of 1000 milliseconds
  delay(1000);
}

// Input a value 0 to 255 to get a color value.
// The colors are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return ring1.Color(255 - WheelPos * 3, 0, WheelPos * 6);
  } else if(WheelPos < 170) {
    WheelPos -= 85;
    return ring1.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  } else {
    WheelPos -= 170;
    return ring1.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  }
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
ring1:GND
ring1:VCC
ring1:DIN
ring1:DOUT
ring2:GND
ring2:VCC
ring2:DIN
ring2:DOUT
ring3:GND
ring3:VCC
ring3:DIN
ring3:DOUT