学习WS2812的第二天(2)

发布于:2023-01-10 ⋅ 阅读:(758) ⋅ 点赞:(0)
#include "FastLED.h"            // 此示例程序需要使用FastLED库

#define NUM_LEDS 30             // LED灯珠数量
#define DATA_PIN 9              // Arduino输出控制信号引脚
#define LED_TYPE WS2812         // LED灯带型号
#define COLOR_ORDER GRB         // RGB灯珠中红色、绿色、蓝色LED的排列顺序

uint8_t max_bright = 128;       // LED亮度控制变量,可使用数值为 0 ~ 255, 数值越大则光带亮度越高

CRGB leds[NUM_LEDS];            // 建立光带leds

void setup() { 
  Serial.begin(9600);           // 启动串行通讯
  delay(1000);                  // 稳定性等待

  LEDS.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);  // 初始化光带
  
  FastLED.setBrightness(max_bright);                            // 设置光带亮度
}

void loop() { 
  //依次点亮和熄灭光带中灯珠,产生"移动"效果
  for (int i = 0; i <= NUM_LEDS; i++) {
    leds[i] = CRGB::Red;
    FastLED.show();
    delay(50);
    leds[i] = CRGB::Black;
    FastLED.show();
    delay(50);    
  }
  delay(500);
}

此代码的效果是让ws2812的灯带一颗一颗的亮。

fillRainbow

fillRainbow函数将LED光带设置为渐变彩虹色

用法

fill_rainbow(leds, 30, beginHue, deltaHue)
以上语句将leds光带的从头数30个灯珠设置为渐变彩虹色。beginHue参数为起始色调数值。deltaHue为相邻LED灯珠色调差。

fill_rainbow(leds+5, 30, 0, 1)
以上语句将leds光带的从头数30个灯珠设置为渐变彩虹色。起始色调数值为0。相邻LED灯珠色调差为1

/*
 * fillRainbow
 * 太极创客 http://www.taichi-maker.com/
 * 03/01/2018
 * 
 * =====================功能说明=====================
 * 使用Arduino Uno开发板通过FastLED库控制WS2812光带。
 * fillRainbow库函数使用说明。 
 * 
 * 本示例程序需要Arduino第三方库FastLED。如有需要,可通过以下链接下载该库:
 * http://www.taichi-maker.com/homepage/download/#library-download
 * 
 * 如需了解如何为Arduino IDE安装第三方库,请参见以下链接地址的视频教程:
 * http://www.taichi-maker.com/homepage/reference-index/arduino-library-index/install-arduino-library/
 *  
 * =====================电路连接======================
 * 此示例程序中,Arduino输出控制信号引脚为9号引脚。
 * 
 * 如需获得详细电路连接说明图,请参阅太极创客网站中
 * 有关WS2812 LED光带方面的相关内容,太极创客网站地址:
 * 
 *  http://WWW.TAICHI-MAKER.COM
 * 
 * 此示例程序为配合太极创客制作的
 * 《零基础入门学用ARDUINO教程-智能应用篇》使用
 */
#include "FastLED.h"            // 此示例程序需要使用FastLED库

#define NUM_LEDS 30             // LED灯珠数量
#define LED_DT 9                // Arduino输出控制信号引脚
#define LED_TYPE WS2812         // LED灯带型号
#define COLOR_ORDER GRB         // RGB灯珠中红色、绿色、蓝色LED的排列顺序

uint8_t max_bright = 128;       // LED亮度控制变量,可使用数值为 0 ~ 255, 数值越大则光带亮度越高

CRGB leds[NUM_LEDS];            // 建立光带leds

uint8_t beginHue = 0;
uint8_t deltaHue = 1;

void setup() { 
  LEDS.addLeds<LED_TYPE, LED_DT, COLOR_ORDER>(leds, NUM_LEDS);  // 初始化光带
  
  FastLED.setBrightness(max_bright);                            // 设置光带亮度
}

void loop () {       
  // fill_rainbow演示
  fill_rainbow(leds, NUM_LEDS, beginHue, deltaHue); 
  FastLED.show();
  delay(25); 
} 

fillGradient

fillGradient函数将LED光带设置为渐变色。

用法

fill_gradient_RGB(leds, 0,          CRGB::Red, 29, CRGB::Blue)
以上语句将leds光带的从头数30个灯珠设置为渐变色。灯带头部起始颜色为红色。灯带尾部结束颜色为蓝色。灯带中间为由红色到蓝色的渐变色。

fill_gradient(leds, 0, CHSV(50, 255,255) , 29, CHSV(150,255,255), SHORTEST_HUES)
以上语句将leds光带的从头数30个灯珠设置为渐变色。灯带头部起始颜色为HSV(50, 255,255)色彩。灯带尾部结束颜色为CHSV(150,255,255)色彩。灯带颜色过度采用短色调过渡方式。

fill_gradient(leds, 0, CHSV(50, 255,255) , 29, CHSV(150,255,255), LONGEST_HUES)
以上语句将leds光带的从头数30个灯珠设置为渐变色。灯带头部起始颜色为HSV(50, 255,255)色彩。灯带尾部结束颜色为CHSV(150,255,255)色彩。灯带颜色过度采用长色调过渡方式。

什么是CHSV??

色调H

 色调参数取值范围为0~255。如上图所示,从红色开始按逆时针方向计算。红色为0,绿色为85,蓝色为170。

饱和度S(也可以想象是颜色深浅)
饱和度S表示颜色接近光谱色的程度。取值范围为0~255,值越大,颜色越饱和(越接近本色)。值越小,颜色越接近白色。当数值为零时,颜色为白色。

明亮度V
明亮度V表示颜色明亮的程度,取值范围为0~255。对于FastLED库来说,该数值越大,则控制光带的亮度越亮。反之数值越小,则控制光带的亮度越低。当数值为零时,光带完全熄灭。

fillPalette

fillPalette函数使用色板将LED光带设置为渐变色。

用法

fill_palette (leds, 30, 0, 8, OceanColors_p, 255, LINEARBLEND )
以上语句将leds光带的从头数30个灯珠设置为渐变色。渐变色的色彩全部来自FastLED预设色板OceanColors_p。灯带头部第一个灯珠的色板色彩序号为0,相邻的两个灯珠见色板色彩序列号差8。色彩过渡为线性过渡效果。

fill_palette(leds+5, 15, 31, 5, ForestColors_p, 255, LINEARBLEND );
以上语句将leds光带从头数的第6个灯带开始15个灯珠设置为渐变色。渐变色的色彩全部来自FastLED预设色板ForestColors_p。起始色板色彩序号为31,相邻的两个灯珠见色板色彩序列号差5。色彩过渡为线性过渡效果

/*
 * fillPalette
 * 太极创客 http://www.taichi-maker.com/
 * 03/01/2018
 * 
 * =====================功能说明=====================
 * 使用Arduino Uno开发板通过FastLED库控制WS2812光带。
 * fillPalette库函数使用说明。 
 * 
 * 本示例程序需要Arduino第三方库FastLED。如有需要,可通过以下链接下载该库:
 * http://www.taichi-maker.com/homepage/download/#library-download
 * 
 * 如需了解如何为Arduino IDE安装第三方库,请参见以下链接地址的视频教程:
 * http://www.taichi-maker.com/homepage/reference-index/arduino-library-index/install-arduino-library/
 *  
 * =====================电路连接======================
 * 此示例程序中,Arduino输出控制信号引脚为9号引脚。
 * 
 * 如需获得详细电路连接说明图,请参阅太极创客网站中
 * 有关WS2812 LED光带方面的相关内容,太极创客网站地址:
 * 
 *  http://WWW.TAICHI-MAKER.COM
 * 
 * 此示例程序为配合太极创客制作的
 * 《零基础入门学用ARDUINO教程-智能应用篇》使用
 */
/*
 * fillPalette-4
 * 太极创客 http://www.taichi-maker.com/
 * 03/01/2018
 * 
 * =====================功能说明=====================
 * 使用Arduino Uno开发板通过FASTLED库控制WS2812光带。
 * 使用fill_palette函数通过用户自定义色板点亮LED光带。
 * 
 * 本示例程序需要Arduino第三方库FastLED。如有需要,可通过以下链接下载该库:
 * http://www.taichi-maker.com/homepage/download/#library-download
 * 
 * 如需了解如何为Arduino IDE安装第三方库,请参见以下链接地址的视频教程:
 * http://www.taichi-maker.com/homepage/reference-index/arduino-library-index/install-arduino-library/
 *  
 * =====================电路连接======================
 * 此示例程序中,Arduino输出控制信号引脚为9号引脚。
 * 
 * 如需获得详细电路连接说明图,请参阅太极创客网站中
 * 有关WS2812 LED光带方面的相关内容,太极创客网站地址:
 * 
 *  http://WWW.TAICHI-MAKER.COM
 * 
 * 此示例程序为配合太极创客制作的
 * 《零基础入门学用ARDUINO教程-智能应用篇》使用
 */
#include "FastLED.h"            // 此示例程序需要使用FastLED库

#define NUM_LEDS 30             // LED灯珠数量
#define LED_DT 9                // Arduino输出控制信号引脚
#define LED_TYPE WS2812         // LED灯带型号
#define COLOR_ORDER GRB         // RGB灯珠中红色、绿色、蓝色LED的排列顺序

uint8_t max_bright = 128;       // LED亮度控制变量,可使用数值为 0 ~ 255, 数值越大则光带亮度越高

CRGB leds[NUM_LEDS];            // 建立光带leds       

CRGBPalette16 myColorPalette = CRGBPalette16(  //用户自定义RGB色板
                                CRGB::Green,  CRGB::Green,  CRGB::Black,  CRGB::Black,  
                                CRGB::Purple, CRGB::Purple, CRGB::Black,  CRGB::Black,
                                CRGB::Green,  CRGB::Green,  CRGB::Black,  CRGB::Black,
                                CRGB::Purple, CRGB::Purple, CRGB::Black,  CRGB::Black );
                          
CHSVPalette16 myHSVColorPalette = CHSVPalette16 ( //用户自定义HSV色板
                   CHSV(0, 255, 200),  CHSV(15, 255, 200),  CHSV(31, 255, 200), CHSV(47, 255, 200),
                   CHSV(0, 255, 0),    CHSV(15, 255, 0),    CHSV(31, 255, 0),   CHSV(47, 255, 0),
                   CHSV(0, 255, 200),  CHSV(15, 255, 200),  CHSV(31, 255, 200), CHSV(47, 255, 200),
                   CHSV(0, 0, 200),    CHSV(15, 0, 200),    CHSV(31, 0, 200),   CHSV(47, 0, 200));   
                               
const TProgmemPalette16 myProgmemPalette PROGMEM = { //用户自定义PROGMEM色板
                              CRGB::Red,  CRGB::Gray,  CRGB::Blue,   CRGB::Black,
                              CRGB::Red,  CRGB::Gray,  CRGB::Blue,   CRGB::Black,
                              CRGB::Red,  CRGB::Red,   CRGB::Gray,   CRGB::Gray,
                              CRGB::Blue, CRGB::Blue,  CRGB::Black,  CRGB::Black };    
uint8_t colorIndex;

void setup() {                                           
  LEDS.addLeds<LED_TYPE, LED_DT, COLOR_ORDER>(leds, NUM_LEDS);  
  FastLED.setBrightness(max_bright);             
}

void loop () {       
  fill_palette (leds,    NUM_LEDS,   128,          8,            myProgmemPalette, 255,   LINEARBLEND );
//fill_palette (led名称, 光珠数字,   起始颜色序号, 光珠间颜色差, palette色盘名,    亮度,  TBlendType blendType)
//fill_palette (leds,    NUM_LEDS,   128,          8,            myColorPalette, 255,   LINEARBLEND );
//fill_palette (leds,    NUM_LEDS,   128,          8,            myHSVColorPalette, 255,   LINEARBLEND );
  FastLED.show();
  delay(25);
}