ESP32 WS2812彩灯 调用FastLED库

/******************头文件定义************************/

#include <FastLED.h> //加载灯带头文件

/******************头文件定义************************/

#include <Arduino.h>

/******************宏定义***********************/

#define NUM_LEDS 60                                //灯珠数量

#define LED_TYPE WS2812                            //灯带型号

#define COLOR_ORDER GRB                            //输入颜色的顺序 根据手册决定

CRGB leds[NUM_LEDS];                               //构建灯珠对象

#define ARRAY_SIZE(A) (sizeof(A) / sizeof((A)[0])) //求数组长度 总长度/单个长度

/******************宏定义***********************/

/****************外部电路引脚定义**********************/

#define DATA_PIN 3 //灯带引脚定义

/****************外部电路引脚定义**********************/

/*********************变量数组等定义************************/

CHSV myHSV(80, 255, 200);          //定义色板 色调,饱和度,亮度

uint8_t gCurrentPatternNumber = 0; // 函数数组下标

uint8_t gHue = 0;                  // 颜色转换标志位CHSV myHSV(0,255,200);//色调,饱和度,亮度 All_colors所用

uint8_t max_bright = 200;          //亮度

/*********************变量数组等定义************************/

/*****************函数数组定义*********************/

typedef void (*SimplePatternList[])(); //创建函数数组指针

SimplePatternList gPatterns = {All_colors, Run_light, rainbow_run, confetti, juggle};

//循环遍历的模式列表。每个模式定义为下面的一个单独的函数。

/*****************函数数组定义*********************/


 

void nextPattern(void) //进入下一个函数

{

    gCurrentPatternNumber = ((gCurrentPatternNumber + 1) % ARRAY_SIZE(gPatterns));

    // 类似数组下标++   取余是为了进行下一周期循环

}

void All_colors(void) //所有统一颜色渐变色

{

    myHSV.h += 5;                      //色调每次自加

    fill_solid(leds, NUM_LEDS, myHSV); //全部点亮HSV颜色

}

void rainbow_run(void) //整体流水彩虹灯

{

    fill_rainbow(leds, NUM_LEDS, gHue, 9); // 1.对象 2.灯珠数量 3.起始位置 4.每加一次的色调差

}

void confetti(void) //随机位置亮随机颜色

{

    fadeToBlackBy(leds, NUM_LEDS, 50);                            //以50的速度逐渐熄灭

    leds[random8(NUM_LEDS)] = CHSV(gHue + random8(64), 200, 178); //随机灯珠亮随机颜色

    // random8是随机数函数

}

void Run_light(void) //流水彩虹灯

{

    uint8_t i;                         //自加变量

    for (i = 0; i < NUM_LEDS - 3; i++) // i<总灯带数-3 为了快速反弹-3 开启循环

    {

        leds[i] = CHSV(i * 2, 255, 192);   //第i个灯 CHSV(1.亮的颜色 2.饱和度 3.亮度)

        delay(30);                         //速度调节

        FastLED.show();                    // show LED

        fadeToBlackBy(leds, NUM_LEDS, 80); //以80速度逐渐熄灭

    }

    for (i = NUM_LEDS - 2; i > 0; i--) //往返效果

    {

        leds[i] = CHSV(i * 2, 255, 192);   //第i个灯 CHSV(1.亮的颜色 2.饱和度 3.亮度)

        delay(30);                         //速度调节

        FastLED.show();                    // show LED

        fadeToBlackBy(leds, NUM_LEDS, 80); //以80速度逐渐熄灭

    }

}

void juggle(void) //正弦函数灯珠渐变颜色

{

    fadeToBlackBy(leds, NUM_LEDS, 20); //以20的速度逐渐熄灭

    uint8_t dothue = 0;                //颜色变化的变量

    for (int i = 0; i < 8; i++)

    {

        leds[beatsin8(i + 7, 0, NUM_LEDS - 1)] = CHSV(dothue, 200, 200); //点亮的灯珠以正弦函数确定

        dothue += 32;                                                    //色调加32

    }

}

/*把WS2812Init放入setup函数*/

void WS2812Init(void)

{

    delay(1000); //上电延迟

    FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);

    //初始化灯带模板 无需变动复制粘贴即可

    FastLED.setBrightness(max_bright); //初始化亮度

}

/*把WS2812Run放入loop函数*/

void WS2812Run(void)

{

    gPatterns[gCurrentPatternNumber]();      //首先调用第一个函数

    FastLED.show();                          // show灯带

    delay(50);                               // 运行下一个函数之间延迟

    EVERY_N_MILLISECONDS(10) { gHue += 10; } // 10毫秒执行一次gHue++

    EVERY_N_SECONDS(8) { nextPattern(); }    // 8秒调用nextPattern();函数一次

}

/********************主函数************************/

void setup()

{

        WS2812Init();

}

void loop()

{

        WS2812Run();

}

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值