#include <FastLED.h>

#define TOUCH_PIN_BRIGHTNESS 13  // 触摸引脚13用于亮度调节
#define TOUCH_PIN_FLASH 12       // 触摸引脚12用于闪烁模式切换
#define TOUCH_PIN_COLOR 14       // 触摸引脚14用于彩带颜色切换
#define LED_PIN 2                // LED串连接的引脚
#define NUM_LEDS 30              // LED数量
int mycolor = 0;
CRGB leds[NUM_LEDS];      // 用于存储LED颜色数据的数组
bool isFlashing = false;  // 闪烁模式标志
                          //touch 最大65  手摸20以下 但是运行环境 触摸达不到20以下,20-50间,应该设置为50
const int ConstTouch = 50;
void setup() {
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);  // 初始化LED串
  pinMode(TOUCH_PIN_BRIGHTNESS, INPUT);                   // 设置触摸引脚为输入
  pinMode(TOUCH_PIN_FLASH, INPUT);
  pinMode(TOUCH_PIN_COLOR, INPUT);
}

void loop() {
  int lhdu = touchRead(TOUCH_PIN_BRIGHTNESS);
  delay(300);
  // 亮度调节
  if (lhdu < ConstTouch) {
    if (FastLED.getBrightness() > 250) {
      FastLED.setBrightness(50);
    }
    FastLED.setBrightness(FastLED.getBrightness() + 50);  // 增加亮度
    delay(100);
  }

  // 闪烁模式切换
  int sjuo = touchRead(TOUCH_PIN_FLASH);
  delay(300);
  if (sjuo < ConstTouch) {
    isFlashing = !isFlashing;  // 切换闪烁模式状态
    delay(100);
  }

  // 彩带颜色切换
  int bmse = touchRead(TOUCH_PIN_COLOR);
  delay(300);
  if (bmse < ConstTouch) {
    mycolor++;
    if (mycolor > 2) {
      mycolor = 0;
    }
    if (mycolor == 0) {
      fill_solid(leds, NUM_LEDS, CRGB(CHSV(0, 255, 255)));  // 红色
    }
    if (mycolor == 1) {
      fill_solid(leds, NUM_LEDS, CRGB(CHSV(85, 255, 255)));
    }
    if (mycolor == 2) {
      fill_solid(leds, NUM_LEDS, CRGB(CHSV(170, 255, 255)));
    }
    // 这里可以添加切换不同颜色的逻辑
    delay(100);
  }

  if (isFlashing) {
    static bool state = false;
    state = !state;
    fill_solid(leds, NUM_LEDS, state ? CRGB::Black : CRGB(CHSV(100, 255, 255)));  // 闪烁效果
    if (mycolor == 0) {
      fill_solid(leds, NUM_LEDS, state ? CRGB::Black : CRGB(CHSV(0, 255, 255)));
    }
    if (mycolor == 1) {
      fill_solid(leds, NUM_LEDS, state ? CRGB::Black : CRGB(CHSV(85, 255, 255)));
    }
    if (mycolor == 2) {
      fill_solid(leds, NUM_LEDS, state ? CRGB::Black : CRGB(CHSV(170, 255, 255)));
    }
  } else {
    // 常亮颜色
    if (mycolor == 0) {
      fill_solid(leds, NUM_LEDS, CRGB(CHSV(0, 255, 255)));  // 红色
    }
    if (mycolor == 1) {
      fill_solid(leds, NUM_LEDS, CRGB(CHSV(85, 255, 255)));
    }
    if (mycolor == 2) {
      fill_solid(leds, NUM_LEDS, CRGB(CHSV(170, 255, 255)));
    }
  }

  FastLED.show();  // 显示当前颜色
  delay(10);       // 延时以避免CPU过载
}