• 探索互联世界的灯光艺术:FastLED库详细介绍及应用实例


    感谢太极创客提供素材

    FastLED库-太极创客
    太极创客B站视频
    在这里插入图片描述

    基础程序

    后面基础程序都一样,只要替换fill_solid(leds, 30, CRGB::Red);显示内容。后面省略基础程序

    /*
     * fillSolid
     * 太极创客 http://www.taichi-maker.com/
     * 03/01/2018
     * 
     * =====================功能说明=====================
     * 使用Arduino Uno开发板通过FastLED库控制WS2812光带。
     * fillSolid库函数使用说明。 
     * 
     * 本示例程序需要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
     
    void setup() { 
      LEDS.addLeds<LED_TYPE, LED_DT, COLOR_ORDER>(leds, NUM_LEDS);  // 初始化光带
      
      FastLED.setBrightness(max_bright);                            // 设置光带亮度
    }
     
    void loop () {       
      // fill_rainbow演示
      fill_solid(leds, 30, CRGB::Red);//将leds光带的从头数30个灯珠设置为红颜色。
      FastLED.show();
      delay(25); 
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    为单一灯赋值 - leds[i] = 0xFF007F;

    RGB赋值方式

    //led赋值方式
      // Example 3: set color via 'hex color code' (0xRRGGBB)
      leds[i] = 0xFF007F;
    
      // Example 4: set color via any named HTML web color
      leds[i] = CRGB::HotPink;
    
      // Example 5: set color via setRGB
      leds[i].setRGB( 50, 100, 150);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    HSV赋值方式

      // Set color from Hue, Saturation, and Value.  
      // Conversion to RGB is automatic.
      leds[i] = CHSV( 160, 255, 255);
    
      // alternate syntax
      leds[i].setHSV( 160, 255, 255);
    
      // set color to a pure, bright, fully saturated, hue
      leds[i].setHue( 160);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    官网像素点操作说明

    将LED光带设置为同一颜色 - fill_solid( 目标, 填充数, 颜色)

    fill_solid(leds, 30, CRGB::Red)
    
    • 1

    以上语句将leds光带的从头数30个灯珠设置为红颜色。

    fill_solid(leds+5, 3, CRGB::Red);
    
    • 1

    以上语句将leds光带的从头数第6个灯珠开始算起的3个灯珠设置为红颜色。

    将LED光带设置为渐变彩虹色 - fill_rainbow(目标, 填充数, 开始颜色, 色差)

    fill_rainbow(leds, 30, beginHue, deltaHue)
    
    • 1

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

    fill_rainbow(leds+5, 30, 0, 1)
    
    • 1

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

    将LED光带设置为渐变色 - fill_gradient_RGB(目标, 开始位置, 开始颜色, 结束位置, 结束颜色);

    fill_gradient_RGB(leds, 0,          CRGB::Red, 29, CRGB::Blue)
    
    • 1

    以上语句将leds光带的从头数30个灯珠设置为渐变色。灯带头部起始颜色为红色。灯带尾部结束颜色为蓝色。灯带中间为由红色到蓝色的渐变色。

    fill_gradient(leds, 0, CHSV(50, 255,255) , 29, CHSV(150,255,255), SHORTEST_HUES)
    
    • 1

    以上语句将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)
    
    • 1

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

    使用色板将LED光带设置为渐变色 - fill_palette (目标灯, 灯数量, 开始位置, 颜色增量, 预设调色板, 亮度, 过渡效果 )

    fill_palette (leds, 30, 0, 8, OceanColors_p, 255, LINEARBLEND )
    
    • 1

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

    fill_palette(leds+5, 15, 31, 5, ForestColors_p, 255, LINEARBLEND );
    
    • 1

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

    FastLED库配有8种预设色板。:haiy
    CloudColors_p 云
    LavaColors_p 熔岩
    OceanColors_p 海洋
    ForestColors_p 森林
    RainbowColors_p 彩虹
    RainbowStripeColors_p
    PartyColors_p 派对
    HeatColors_p 热

    更新LED显示/清屏 - FastLED.show / FastLED.clear(NUM_LEDS)

        FastLED.clear(64);
        FastLED.show();
    
    • 1
    • 2

    在使用FastLED库控制LED时,我们每一次更新了LED的颜色设置以后,都需要 FastLED.show(); 执行语句指令才能将我们刚刚设置好的LED颜色在LED灯珠上显示出来。这一点非常重要,请在使用使用FastLED库控制LED时务必注意这一点。

    获得指定色板中的颜色 - ColorFromPalette

    leds[0] = ColorFromPalette( RainbowColors_p, 0, 128, LINEARBLEND);
    
    • 1

    以上语句将leds光带的第一个灯珠设置为RainbowColors_p色板中颜色序号为0的颜色(红色)。LED亮度为128。色彩过渡为线性过渡效果(LINEARBLEND)。

    leds[9] = ColorFromPalette( OceanColors_p, 120, 255, LINEARBLEND);
    
    • 1

    以上语句将leds光带的第十个灯珠设置为OceanColors_p色板中颜色序号为120的颜色。LED亮度为255。色彩过渡为线性过渡效果(LINEARBLEND)。

    逐渐熄灭LED光带 - fadeToBlackBy( 目标, 灯数量, 降低数量)

    #define twinkleInterval  10    //  闪烁间隔时间 (毫秒)
    #define twinkleChance 800        //  闪烁数量,数值越大闪烁越多(0-255) 
    void loop() {      
      int pos = random8(NUM_LEDS);
      EVERY_N_MILLISECONDS( twinkleInterval ) { 
        if( random8() < twinkleChance) {
          leds[pos] = ColorFromPalette( PartyColors_p, random8(255), 128, LINEARBLEND);
        }   
      }
      EVERY_N_MILLISECONDS( 20 ) { 
        fadeToBlackBy( leds, NUM_LEDS, 10);
      }    
      FastLED.show(); 
      delay(50);       
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    fadeToBlackBy( leds, 30, 10);//渐灭
    fadeLightBy( leds, 30, 10);//渐亮
    
    • 1
    • 2

    以上语句将leds光带的30个灯珠亮度调低10。(注:LED亮度值可选数值范围为0 – 255)

    设置LED光带亮度 - FastLED.setBrightness

    FastLED.setBrightness(128);
    
    • 1

    以上语句将LED亮度设置为128。该亮度为最大亮度(255)的一半左右。

    正弦函数 - beatsin8

    beatsin8(beats_per_minute, lowest, highest);
    
    • 1

    在这里插入图片描述

    随机函数 - random8

    random8();
    
    • 1

    以上语句将返回0-255之间的随机数值。

    random8(10);
    
    • 1

    以上语句将返回0-9之间的随机数值。

    定时执行程序内容(时间间隔单位以秒计算) - EVERY_N_SECONDS –

    EVERY_N_SECONDS(10
    • 1

    以上函数所包含的程序内容将定时执行,执行时间间隔为10秒钟。

    EVERY_N_SECONDS(1
    • 1

    以上函数所包含的程序内容将定时执行,执行时间间隔为1秒钟。

    定时执行程序内容(时间间隔单位以毫秒计算) - EVERY_N_MILLISECONDS

    EVERY_N_MILLISECONDS(100
    • 1

    以上函数所包含的程序内容将定时执行,执行时间间隔为100毫秒。

    EVERY_N_MILLISECONDS(500
    • 1

    以上函数所包含的程序内容将定时执行,执行时间间隔为500毫秒。

    调色板palette

    FastLED官网

    像素参考
    在这里插入图片描述

    在这里插入图片描述

    废话

    导语:在当代科技的融合中,灯光艺术正变得越来越受欢迎。FastLED库作为一个功能强大的灯带控制库,为创造、探索和实现令人惊叹的灯光效果提供了无限可能。本博客将详细介绍FastLED库的功能和特点,并展示一些令人惊叹的实际应用实例。

    正文:

    1. FastLED是什么?

      FastLED是一个适用于Arduino和其他微控制器平台的灯带控制库,它提供了丰富的功能和灵活的选项,为用户创建出色的灯光效果提供了良好的支持。

    2. FastLED的特点和功能

      2.1 灵活性:FastLED库允许用户控制各种类型的LED灯带,包括单色、RGB、RGBW和更多类型。它还支持不同的通信协议,如PWM、SPI等。

      2.2 强大的效果控制:FastLED提供了丰富的效果函数和算法,包括渐变、闪烁、呼吸灯、彩虹、火焰效果等。用户可以轻松地创建各种复杂的灯光效果。

      2.3 可视化编辑器:FastLED库还提供了一个可视化的在线编辑器,使用户能够通过简单的拖拽和选取来创建和调整灯光效果,无需深入编程。

      2.4 兼容性:FastLED库可以在多种平台上运行,并与其他常用的Arduino库和功能兼容。用户可以轻松集成FastLED库到自己的项目中。

    3. FastLED应用实例

      3.1 萤火虫灯效:通过使用FastLED库中的随机效果和亮度变化,可以模拟出萤火虫在夜晚飘扬的效果。这种灯光效果可以用于室内装饰、节日庆祝等场景。

      3.2 音乐可视化:结合外部音频输入,通过FastLED库可以实现灯带的音乐可视化效果。LED灯带可以根据音频节奏和音量的变化,呈现跳动、闪烁等动态的灯光效果。

      3.3 艺术装置:FastLED库为创意艺术家和设计师提供了丰富的灯光效果控制选项,可以用于艺术装置、舞台设计、展览等项目。通过FastLED库,用户可以实现灯光的无限创造和表达。

      3.4 氛围照明:利用FastLED库的渐变效果、色彩调节等功能,可以打造出舒适、温馨的氛围照明。这种灯光效果可以用于家庭、酒吧、咖啡厅等场景,营造出不同的氛围和体验。

    结尾:

    FastLED库是一个令人兴奋和创意无限的灯带控制库,为灯光艺术家、创意爱好者和设计师提供了许多创造的机会。通过灵活的功能和丰富的效果选项,FastLED库让用户能够轻松创造出惊人的灯光效果。无论是在室内装饰、舞台演出还是艺术装置中,FastLED库都将成为你探索互联世界的灯光艺术的得力助手。

  • 相关阅读:
    VUE项目中页面权限和按钮权限
    游戏开发者如何能达到5万月薪?这太难了......
    【微信小程序】如何获得自己当前的定位呢?本文利用逆地址解析、uni-app带你实现
    昱琛航空IPO被终止:曾拟募资5亿 郭峥为大股东
    中国首个基于区块链的分布式算力网络上线
    Intel汇编-在字符串中搜索一个字符
    java 高级面试题(借鉴)(上)
    神经网络模型的训练过程,神经网络模型训练过程
    BP神经网络原理与如何实现BP神经网络
    blender基本操作
  • 原文地址:https://blog.csdn.net/qq_27741499/article/details/132598375