#include <Adafruit_NeoPixel.h>

// 定义连接 NeoPixel 环的引脚和 LED 数量
#define PIN            8    // 连接 NeoPixel 环的数据引脚
#define NUMPIXELS      16    // LED 数量

// 创建 NeoPixel 对象
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();              // 初始化 NeoPixel 库
  strip.show();                // 初始化所有 LED 为 OFF
}

void loop() {
  // 依次点亮每个 LED
  for (int i = 0; i < NUMPIXELS; i++) {
    strip.setPixelColor(i, strip.Color(0, 0, 255-i*10));  // 点亮红色 LED
    strip.show();              // 更新显示
    delay(100);                // 延时 100 毫秒
    strip.setPixelColor(i, strip.Color(0, 0, 255-i*10));    // 熄灭当前 LED
    strip.show();              // 更新显示
  }
  for (int i = 0; i < NUMPIXELS; i++) {
    strip.setPixelColor(i, strip.Color(255-i*10, 0, 0));  // 点亮红色 LED
    strip.show();              // 更新显示
    delay(100);                // 延时 100 毫秒
    strip.setPixelColor(i, strip.Color(255-i*10, 0, 0));    // 熄灭当前 LED
    strip.show();              // 更新显示
  }
  for (int i = 0; i < NUMPIXELS; i++) {
    strip.setPixelColor(i, strip.Color(255-i*10, 255-i*10, 0));  // 点亮红色 LED
    strip.show();              // 更新显示
    delay(100);                // 延时 100 毫秒
    strip.setPixelColor(i, strip.Color(255-i*10, 255-i*10, 0));    // 熄灭当前 LED
    strip.show();              // 更新显示
  }
  for (int i = 0; i < NUMPIXELS; i++) {
    strip.setPixelColor(i, strip.Color(255-i*10, 0, 255-i*10));  // 点亮红色 LED
    strip.show();              // 更新显示
    delay(100);                // 延时 100 毫秒
    strip.setPixelColor(i, strip.Color(255-i*10, 0, 255-i*10));    // 熄灭当前 LED
    strip.show();              // 更新显示
  }

  // 反向依次点亮 LED
  for (int i = 0; i < NUMPIXELS; i++) {
    strip.setPixelColor(i, strip.Color(0, 255-i*10, 255-i*10));  // 点亮绿色 LED
    strip.show();              // 更新显示
    delay(100);                // 延时 100 毫秒
    strip.setPixelColor(i, strip.Color(0, 255-i*10, 255-i*10));    // 熄灭当前 LED
    strip.show();              // 更新显示
  }
}