在本教程中,你将学会Arduion与APA102 LED的线路连接,使用外部电源点亮LED,用FastLED库控制LED闪烁。
学会之后有很多方法可以扩展这个项目。例如,你可以使用类似DS18B20温度传感器,改变灯条上的颜色来表示当前的温度。
如果你喜欢用Pi来完成所有的项目,也可以用树莓派控制APA102 LED灯条,也非常好玩。
设备清单
必要设备
- Arduino Uno
- APA102 LED灯条
- 母头直流电源适配器
- 5V,10A交流电源适配器
- 面包板导线
连接Arduino APA102 LED灯条电路
将APA102 LED电路连接到Arduino过程相对简单。这里有张图,照着图做就可以了。
- 将直流电筒适配器的正极引脚(+)连接到APA102上的VCC连接处。
- 将直流管状适配器的负极引脚(-)连接到Arduino上的GND引脚和APA102 LED灯条上的GND连接。
- 将 APA102 的 CKI (CI) 连接线连接到 Arduino 上的引脚 11。
- 将APA102的SDI(DI)连接线连接到Arduino上的引脚13。
特别要注意的是,APA102 LED灯条与桶形连接器和Arduino本身需要连接的地线。
在这个电路中,确保使用单独的电源来为APA102 LED供电,因为从arduino主板中通过太大的电流,主板极有可能会烧毁。
导入APA102 LED灯条控制库
使用FastLED库与Arduino的APA102 RGB LED灯条进行交互。FastLED库的设计就是为了方便与各种LED灯条进行交互,包括本教程中使用的APA102。
- 在Arduino集成开发环境中,在Sketch (1.) -> Include Library (2.) -> Manage Libraries (3.) 中导入 “FastLED “库。
- 在Arduino库管理器中,在文本框中搜索 “fastled”(1. 接下来,找到 “FastLED by Daniel Garcia “并点击 “安装 “按钮(2.)。 安装好 “FastLED “库后,可以继续点击 “关闭 “按钮(3).
用Arduino校准RGB LED灯条
现在可以写程序控制LED灯条了。
- 在Arduino IDE界面内,输入以下几行代码。 我们将为您讲解每一段代码的作用,让您了解如何根据自己的需求进行修改。
#include <FastLED.h>
首先,我们需要包含 “FastLED “库的头文件。
我们将利用这个库来向APA102 LED灯条发送数据,它大大简化了与LED灯条的交互过程。
#define NUM_LEDS 6
#define DATA_PIN 11
#define CLOCK_PIN 13
这里定义几个常数,之后将在整个代码中引用这些常数。 NUM_LEDS:要处理的LED数量。在这个简短的片段中,我们只需要6个LED,因为我们只需要校准灯条。
DATA_PIN: 库输出数据的引脚号,用于控制APA102。
CLOCK_PIN: 库需要用来发送时钟信号的引脚号。这个引脚是APA102带状器所需要的,因为它使用的是SPI接口。
CRGB leds[NUM_LEDS];
接下来,定义一个名为 “LED “的数组,该数组使用FastLED的CRGB作为数据类型。
这个数组将被FastLED库监控,以便它知道哪些LED需要被点亮,以及它们需要的颜色。
void setup() {
delay(2000);
LEDS.addLeds<APA102,DATA_PIN, CLOCK_PIN,RGB>(leds,NUM_LEDS);
}
这个 “setup() “函数是在Arduino设备启动时运行的。
我们首先使用 “delay() “函数。我们使用这个函数是为了在Arduino出现问题时给你一个重新编程的机会。
接下来利用FastLED库的 “addLeds<>() “函数,使用这个函数让与APA102 LED灯条工作。
在这个函数中,要传递LED灯条的型号(APA102)、DATA_PIN和CLOCK_PIN常数以及颜色顺序(现在是RGB)。
还引用了我们创建的 “LEDS “数组和NUM_LEDS。当我们调用 “show() “函数时,库会自动从数组中读取。
void loop() {
leds[0] = CRGB(255,0,0);
leds[1] = CRGB(0,255,0);
leds[2] = CRGB(0,255,0);
leds[3] = CRGB(0,0,255);
leds[4] = CRGB(0,0,255);
leds[5] = CRGB(0,0,255);
FastLED.show();
delay(1000);
}
“loop()“函数在 “setup()“函数触发后自动持续运行。
在这个循环中,为 “LEDS “数组中的每个点定义一个值。
它将点亮灯带的前6个LED,最终应该按照以下顺序显示:1个红色,2个绿色,3个蓝色。 使用 “FastLED “库的 “CRGB() “函数来格式化每个LED的颜色。
设置好每个值后,利用FastLED的库 “show() “函数将新的颜色数组推送到APA102的LED条上。
最后,为了结束这个循环,将脚本延迟1秒。
- 最终的完整代码如下
#include <FastLED.h>
#define NUM_LEDS 6
#define DATA_PIN 11
#define CLOCK_PIN 13
CRGB leds[NUM_LEDS];
void setup() {
delay(2000);
LEDS.addLeds<APA102,DATA_PIN, CLOCK_PIN,RGB>(leds,NUM_LEDS);
}
void loop() {
leds[0] = CRGB(255,0,0);
leds[1] = CRGB(0,255,0);
leds[2] = CRGB(0,255,0);
leds[3] = CRGB(0,0,255);
leds[4] = CRGB(0,0,255);
leds[5] = CRGB(0,0,255);
FastLED.show();
delay(1000);
}
- 现在可以把代码上传到Arduino上了,先点击 “Verify”按钮(1.),然后点击 “Upload”按钮(2)。
- 将代码推送到Arduino后,APA102的RGB LED条应该会亮起。记下现在LED灯条上显示的颜色顺序,应该是红、绿、蓝。它应该是红色、绿色和蓝色。
如果颜色顺序是正确的,可以进行下一步了。
改变颜色顺序 如果颜色的顺序不正确,则需要将颜色顺序记下来。例如,如果它显示为蓝色、绿色和红色,那么你需要记下颜色顺序是BGR。
在代码中,你需要修改 “LEDS.addLeds “一行。
将定义的 “RGB “色序改成你刚才计算出来的新色序。在这个例子中,我们需要将值切换为 “BGR”。
修改后的行看起来应该像下面这样。
LEDS.addLeds<APA102,DATA_PIN, CLOCK_PIN,BGR>(leds,NUM_LEDS);
- 完成修改后,再次验证并重新上传代码到Arduino中。
如果一切正常的话,你的LED灯条上的颜色应该会按照正确的顺序显示出来。
欢迎转载,请留下出处链接:Labno3 » 如何让Arduino点亮APA102 RGB LED灯条