前言
1、最近重温了一下书本,看到结构体这章的时候来了灵感,如果代码比较长,变量比较多,程序的可读性和可维护性很快降低。我是否可以通过使用结构体让代码更简洁?还有我应该专门整理一篇关于LED的教程,之前的代码不是为了方便阅读理解诞生的,如果我要记录使用方法,应该写一篇专门的教程,于是我有了接下来的内容。
2、这一个项目我会向你展示如何使用Arduino nano控制WS2812型号的LED灯带。它同样适用其他Arduino单片机,如果你想,还可以使用ESP32这样的单片机,不过那就得费点心机了。
*首先我会进行简单的介绍,你可以在这一段了解后面会讲到的内容,做一个快速预览。
第一部分,我们设置灯带基础参数并进行初始化操作,我用了两条灯带演示多灯带并行运转如何操作,各位可以参考我的方式设置多灯带,这是很实用的技巧。
第二部分,我会先说明线路搭建的规则,我尽量写得简洁明了,你不需要知道灯带之间是如何连接,现成的灯带只需要关注4个引脚,正极、负极和信号,还有就是Arduino的IO口(简单理解就是信号出入口),让我们把两个固定连接正负极的引脚排除,这样我们就只需要关注灯带的信号Din口和单片机IO口如何连接了。
第三部分,当我们设定好LED参数并且连接好灯带和Arduino,就可以设计灯光发光的模式了,我会给你几个基础的使用方法供各位参考,我会说我们只要掌握三个库函数的使用就可以愉快的控制LED灯带了。( •̀ ω •́ )wink~*
(各位可以先了解一下RGB方式是如何改变颜色的,这里简单说明一下。RGB是红绿蓝的英文缩写,通过RGB就可以搭配出我们所能看见的所有颜色。)
第一部分,LED灯带的参数设置
先看代码,后面有对代码的解释,也可以解释和代码对照看,备注已经很详细了o(* ̄▽ ̄*)ブ
#include <FastLED.h>//添加FastLED库函数
//使用结构体,定义变量使整体更简洁
struct LEDli
{
short r,g,b;
short ledLong;//led亮灯长度
short ledTime;//led延时
}ledOne,ledTw;
//定义LED可用长度,创建两个CRGB类型的数组(用于后续点亮灯珠),定义LED引脚(用宏定义)
#define NUM_LEDS1 10//1号led灯串长度
#define NUM_LEDS2 10
CRGB leds1[NUM_LEDS1];//1号led数组
CRGB leds2[NUM_LEDS2];
#define ledPin1 3//1号灯串串口引脚号
#define ledPin2 6
//
//备注:以上定义了两组宏和两个CRGB数组,方便后续对LED信息设置
//经过测试只能用宏定义或者数字设定引脚号,所以引脚号不放入结构体
void setup() {//只执行一次的程序
//初始化1号灯串结构体:
//结构体可以通过两种方式进行初始化,我会展示两种初始化结构体的方法
//单个结构体变量赋值:
ledOne.r=30;
ledOne.g=60;
ledOne.b=90;//rgb
ledOne.ledLong=1;
ledOne.ledTime=1000;
//统一赋值
ledOne={30,60,100,1,1000};//这种定义方式明显更加方便,不过不太直观
//初始化二号灯串:
ledTw={100,60,30,1,3000};
//进行LED初始化设置
FastLED.addLeds<WS2812,ledPin1,RGB>(leds1,NUM_LEDS1);
FastLED.addLeds<WS2812,ledPin2,RGB>(leds2,NUM_LEDS2);
//填入内容分别是,灯珠类型,灯珠引脚号,颜色方法,(之前定义的CRGB数组,灯串长度)
//设置电压和电流V、Am
Fas