电子说
课程目标
电路搭建
所需材料
ArduinoUNO * 1
RGB灯带30个LED * 1
电路连接
程序编写
练习一:单个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毫秒
}
}
全部0条评论
快来发表一下你的评论吧 !