Arduino篇—FastLED库文件项目应用

电子说

1.3w人已加入

描述

课程目标

  • 单个LED的控制方法
  • LED的运动模式
  • LED的多种颜色控制

电路搭建

所需材料

ArduinoUNO * 1
RGB灯带30个LED * 1

电路连接

RGB

程序编写

练习一:单个LED闪烁

代码方式:

/* 项目名称: WS2812单个LED闪烁
 * 项目时间:2022.04.21
 * 项目作者:MRX
 */
#include "FastLED.h"


#define LEDS_NUM 30    //定义led灯珠的数量
#define DATA_PIN 9     //UNO输出控制信号引脚
#define LED_TYPE WS2812 //LED灯带型号
#define COLOR_ORDER GRB //RGB灯珠中三种颜色LED的排序


uint8_t bright = 128;  //LED亮度控制,范围为0~255,数值越大LED越亮


CRGB leds[LEDS_NUM];   //创建灯带leds


void setup() {
  Serial.begin(9600);
  delay(1000);


  LEDS.addLeds(leds,LEDS_NUM);  //初始化灯带


  FastLED.setBrightness(bright);
}


void loop() {
    leds[0] = CRGB::Red;   //设置灯带中第一个灯珠颜色为红色,leds[0]为第一个
    FastLED.show();        //更新LED色彩
    delay(500);            //等待500毫秒

    leds[0] = CRGB::Black;   //熄灭灯带第一个灯珠
    FastLED.show();          //更新LED色彩
    delay(500);              //等待500毫秒
  }
}

相关知识:

**uint8_t:**其取值范围为0255,由于FastLED库做定义的LED亮度范围刚好在0255,从最优角度来看,这里使用这个变量类型刚好合适。

练习二:移动的LED

代码形式:

/* 项目名称: WS2812单个LED闪烁移动
 * 项目时间:2022.04.21
 * 项目作者:MRX
 */
#include "FastLED.h"


#define LEDS_NUM 30    //定义led灯珠的数量
#define DATA_PIN 9     //UNO输出控制信号引脚
#define LED_TYPE WS2812 //LED灯带型号
#define COLOR_ORDER GRB //RGB灯珠中三种颜色LED的排序


uint8_t bright = 128;  //LED亮度控制,范围为0~255,数值越大LED越亮


CRGB leds[LEDS_NUM];   //创建灯带leds


void setup() {
  Serial.begin(9600);
  delay(1000);


  LEDS.addLeds(leds,LEDS_NUM);  //初始化灯带


  FastLED.setBrightness(bright);
}


void loop() {
  for(int i = 0;i <= LEDS_NUM; i++ ){  
    leds[i] = CRGB::Red;   //设置灯带中第一个灯珠颜色为红色
    FastLED.show();        //更新LED色彩
    delay(50);            //等待50毫秒

    leds[i] = CRGB::Black;   //熄灭灯带第一个灯珠
    FastLED.show();          //更新LED色彩
    delay(50);              //等待50毫秒
  }
}

作用域符号”::“: 符号的前面一般是类名称,后面一般是该类的成员名称,C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分。

练习三:三色灯移动

代码形式:

/* 项目名称: WS2812单个LED三种颜色循环闪烁
 * 项目时间:2022.04.21
 * 项目作者:MRX
 */
#include "FastLED.h"


#define LEDS_NUM 30    //定义led灯珠的数量
#define DATA_PIN 9     //UNO输出控制信号引脚
#define LED_TYPE WS2812 //LED灯带型号
#define COLOR_ORDER GRB //RGB灯珠中三种颜色LED的排序


uint8_t bright = 128;  //LED亮度控制,范围为0~255,数值越大LED越亮


CRGB leds[LEDS_NUM];   //创建灯带leds


void setup() {
  Serial.begin(9600);
  delay(1000);


  LEDS.addLeds(leds,LEDS_NUM);  //初始化灯带


  FastLED.setBrightness(bright);
}


void loop() {
  for(int i = 0;i <= LEDS_NUM; i++ ){  
    leds[i] = CRGB::Red;   //设置灯带中第一个灯珠颜色为红色
    FastLED.show();        //更新LED色彩
    delay(50);            //等待500毫秒


    leds[i] = CRGB::Green;   //设置灯带中第一个灯珠颜色为绿色
    FastLED.show();        //更新LED色彩
    delay(50);            //等待50毫秒


    leds[i] = CRGB::Blue;   //设置灯带中第一个灯珠颜色为蓝色
    FastLED.show();        //更新LED色彩
    delay(50);            //等待50毫秒

    leds[i] = CRGB::Black;   //熄灭灯带第一个灯珠
    FastLED.show();          //更新LED色彩
    delay(50);              //等待50毫秒
  }
}

练习四:多个三色灯移动

代码形式:

/* 项目名称: WS2812多个LED循环移动
 * 项目时间:2022.04.21
 * 项目作者:MRX
 */
#include "FastLED.h"


#define LEDS_NUM 30    //定义led灯珠的数量
#define DATA_PIN 9     //UNO输出控制信号引脚
#define LED_TYPE WS2812 //LED灯带型号
#define COLOR_ORDER GRB //RGB灯珠中三种颜色LED的排序


uint8_t bright = 128;  //LED亮度控制,范围为0~255,数值越大LED越亮


CRGB leds[LEDS_NUM];   //创建灯带leds


void setup() {
  Serial.begin(9600);
  delay(1000);


  LEDS.addLeds(leds,LEDS_NUM);  //初始化灯带


  FastLED.setBrightness(bright);
}


void loop() {
  for(int i = 0;i <= 30; i++ ){  
    leds[i-1] = CRGB::Red;
    leds[i] = CRGB::Red;   //设置灯带中第一个灯珠颜色为红色
    leds[i+1] = CRGB::Red;
    FastLED.show();        //更新LED色彩
    delay(50);            //等待500毫秒


    leds[i-1] = CRGB::Green;
    leds[i] = CRGB::Green;   //设置灯带中第一个灯珠颜色为绿色
    leds[i+1] = CRGB::Green;
    FastLED.show();        //更新LED色彩
    delay(50);            //等待50毫秒


    leds[i-1] = CRGB::Blue;
    leds[i] = CRGB::Blue;   //设置灯带中第一个灯珠颜色为蓝色
    leds[i+1] = CRGB::Blue;
    FastLED.show();        //更新LED色彩
    delay(50);            //等待50毫秒

    leds[i-1] = CRGB::Black;
    leds[i] = CRGB::Black;   //熄灭灯带第一个灯珠
    leds[i+1] = CRGB::Black;
    FastLED.show();          //更新LED色彩
    delay(50);              //等待50毫秒
  }
}
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分