|
由于出色的视觉效果,NeoPixel LED目前在电子项目中被广泛使用。这些LED有各种尺寸和形状。在本篇文章中,您将了解NeoPixel LED以及如何使用Arduino控制它们。
什么是NeoPixel? 1962年,当第一颗LED制造和测试时,这件有价值的产品成为我们生活中不可分割的一部分。在大多数电子项目中,您至少可以找到一个LED。使用不同颜色的LED非常吸引人,因此它产生了多色LED或RGB LED。
RGB LED根据红色、绿色和蓝色三种颜色创建所有颜色。例如,红色和蓝色组合产生品红色。在此模型中,每种颜色的红色、绿色和蓝色均为0到255之间的值。例如,洋红色(Magenta)的这些值为255 0 255(红色最大值,蓝色最大值和绿色最小值值)。该数值由十六进制代码表示(2550255 =#FF00FF)。 RGB LED根据此模型制作各种颜色。
要控制每个RGB LED,您需要微控制器的三个数字引脚。例如,如果要控制包含60个LED的RGB LED灯串,为了分别控制每个LED的颜色,您需要180个数字引脚!因此,您必须单独控制每个LED或使用可寻址的LED。
除RGB LED外,可寻址LED是新一代LED,包括控制器IC。该控制器IC(通常为WS2812)允许您通过为每个LED分配地址并提供单线通信来访问具有单个数字引脚的多个LED。但与简单的LED不同,这些类型的LED不能仅通过施加电压来打开,它们还需要微控制器。 NeoPixel是Adafruit的可寻址LED品牌。
为何选择NeoPixel? 能够控制LED灯条中每个LED将为您的项目创造出极佳的视觉效果。但应该注意的是,在像POV这样的非常快速的过程中,不推荐使用NeoPixels。与其他可寻址LED相比,NeoPixels的另一个重要优势是价格更低。 NeoPixels还有环形、条形、方形和圆形等形状,您可以根据您的项目选择合适的形状。
NeoPixels也是可级联的,因此您只需一条命令线和一条电源线即可控制多个NeoPixels。
注意:增加NeoPixel LED的数量将需要更多的RAM,更高的功耗和更多的处理时间,因此请根据微控制器类型选择最佳的NeoPixel。
所需的材料 ● WS2812环形RGB LED模块 ● Arduino Uno R3开发板 ● Arduino IDE
NeoPixel与Arduino连接 引脚分布
下面是NeoPixel与Arduino连接的电路图:
示例1:使用Arduino设置NeoPixel 在本例中,您将打开NeoPixels并使用Arduino UNO分别控制每个LED的颜色和强度。通过NeoPixel Adafruit库使用Arduino设置NeoPixel。 以下是本示例使用的代码: - /*
- NeoPixel LEDs
- modified on 7 May 2019
- by Saeed Hosseini @ Electropeak
- **This code is based on Adafruit NeoPixel library Example**
- https://electropeak.com/learn/
- */
- #include <Adafruit_NeoPixel.h>
- #ifdef __AVR__
- #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
- #endif
- #define PIN 6
- #define NUMPIXELS 7
- Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
- #define DELAYVAL 500 // Time (in milliseconds) to pause between pixels
- void setup() {
- pixels.begin();
- }
- void loop() {
- pixels.clear();
- pixels.setBrightness(10);
- pixels.setPixelColor(0, pixels.Color(255, 255, 255));
- pixels.setPixelColor(1, pixels.Color(255, 0, 0));
- pixels.setPixelColor(2, pixels.Color(0, 255, 0));
- pixels.setPixelColor(3, pixels.Color(0, 0, 255));
- pixels.setPixelColor(4, pixels.Color(255, 0, 255));
- pixels.setPixelColor(5, pixels.Color(255, 255, 0));
- pixels.setPixelColor(6, pixels.Color(0, 255, 255));
- pixels.show();
- }
复制代码代码说明: - Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
复制代码上述函数了LED的数量和Arduino引脚。 此函数执行初始化。 上述函数设定光照亮度。 (最小数字为1,最大数字为255。) - pixels.setPixelColor(Wich LED,Wich color(Red,Green,Blue));
复制代码在指定LED编号(从0到NUMPIXELS-1)后,使用RGB系统定义LED颜色。 显示应用的值。
示例2:使用Arduino实现NeoPixel闪烁模式 在此示例中,我们以闪烁模式设置NeoPixels。 要制作闪烁灯光,必须同时打开和关闭所有LED,并且它们在打开时可以有不同的颜色。 - /*
- NeoPixel LEDs
- modified on 7 May 2019
- by Saeed Hosseini @ Electropeak
- https://electropeak.com/learn/
- */
- #include <Adafruit_NeoPixel.h>
- #ifdef __AVR__
- #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
- #endif
- #define PIN 6
- #define NUMPIXELS 7
- Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
- void NeoBlink(int num, int wait)
- {
- for (int i = 0; i < num; i++)
- {
- pixels.setPixelColor(i, 35, 35, 35);
- }
- pixels.show();
- delay(wait);
- for (int j = 0; j < num; j++)
- {
- pixels.setPixelColor(j, 0, 255, 0);
- }
- pixels.show();
- delay(wait);
- }
- void setup()
- {
- pixels.begin();
- pixels.setBrightness(50);
- }
- void loop()
- {
- NeoBlink(7, 500);
- }
复制代码
示例3:使用Arduino实现NeoPixel渐变色模式 色彩渐变是NeoPixels令人着迷的效果之一。渐变速度越慢,效果越好。 - /*
- NeoPixel LEDs
- modified on 7 May 2019
- by Saeed Hosseini @ Electropeak
- https://electropeak.com/learn/
- */
- #include <Adafruit_NeoPixel.h>
- #ifdef __AVR__
- #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
- #endif
- #define PIN 6
- #define NUMPIXELS 7
- Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
- #define DELAYVAL 500 // Time (in milliseconds) to pause between pixels
- void NeoFade(int FadeSpeed)
- {
- int fspeed;
- for (int i = 0; i < NUMPIXELS; i++) { pixels.setPixelColor(i, 165, 242, 243); } for (int j = 255; j > 0; j=j-2)
- {
- pixels.setBrightness(j);
- pixels.show();
- delay(FadeSpeed);
- }
- }
- void setup() {
- pixels.begin();
- }
- void loop() {
- NeoFade(100);
- }
复制代码
示例4:使用Arduino的NeoPixel随机模式 在此示例中,我们使用random(num1, num2)函数生成并显示num1和num2之间的随机数,以选择颜色和LED。 - /*
- NeoPixel LEDs
- modified on 7 May 2019
- by Saeed Hosseini @ Electropeak
- https://electropeak.com/learn/
- */
- #include <Adafruit_NeoPixel.h>
- #ifdef __AVR__
- #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
- #endif
- #define PIN 6
- #define NUMPIXELS 7
- Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
- #define DELAYVAL 500 // Time (in milliseconds) to pause between pixels
- void setup() {
- pixels.begin();
- }
- void loop() {
- pixels.clear();
- pixels.setPixelColor(random(0, 7), random(0, 255), random(0, 255), random(0, 255));
- pixels.show();
- delay(500);
- }
复制代码
示例5:使用Arduino的NeoPixel彩虹模式 要在NeoPixels上创建效果,网络上最有趣的工具之一是NeoPixel Effects Generator,可让您指定LED和Arduino引脚的数量,在创建效果和所需设置后,您可以点击generate Arduino code然后将生成的代码复制到IDE。 为此,请执行以下步骤: 1. 进入网站后点击Add Led Strip。
2. 单击添加的NeoPixel Strip并指定LED和Arduino引脚的数量。
3. 单击loop部分中的“Add Effect”,然后选择一种效果。
4. 在“Animation”和“Color”部分中应用想要的设置。
5. 单击generate Arduino code并将生成的代码复制到Arduino IDE。
- /*
- This code is generated by:
- https://adrianotiger.github.io/NeoPixel-Effect-Generator/
- */
- #include <Adafruit_NeoPixel.h>
- class Strip
- {
- public:
- uint8_t effect;
- uint8_t effects;
- uint16_t effStep;
- unsigned long effStart;
- Adafruit_NeoPixel strip;
- Strip(uint16_t leds, uint8_t pin, uint8_t toteffects) : strip(leds, pin, NEO_GRB + NEO_KHZ800) {
- effect = -1;
- effects = toteffects;
- Reset();
- }
- void Reset(){
- effStep = 0;
- effect = (effect + 1) % effects;
- effStart = millis();
- }
- };
- struct Loop
- {
- uint8_t currentChild;
- uint8_t childs;
- bool timeBased;
- uint16_t cycles;
- uint16_t currentTime;
- Loop(uint8_t totchilds, bool timebased, uint16_t tottime) {currentTime=0;currentChild=0;childs=totchilds;timeBased=timebased;cycles=tottime;}
- };
- Strip strip_0(7, 6, 7 );
- struct Loop strip0loop0(1, false, 1);
- //[GLOBAL_VARIABLES]
- void setup() {
- //Your setup here:
- strip_0.strip.begin();
- }
- void loop() {
- //Your code here:
- strips_loop();
- }
- void strips_loop() {
- if(strip0_loop0() & 0x01)
- strip_0.strip.show();
- }
- uint8_t strip0_loop0() {
- uint8_t ret = 0x00;
- switch(strip0loop0.currentChild) {
- case 0:
- ret = strip0_loop0_eff0();break;
- }
- if(ret & 0x02) {
- ret &= 0xfd;
- if(strip0loop0.currentChild + 1 >= strip0loop0.childs) {
- strip0loop0.currentChild = 0;
- if(++strip0loop0.currentTime >= strip0loop0.cycles) {strip0loop0.currentTime = 0; ret |= 0x02;}
- }
- else {
- strip0loop0.currentChild++;
- }
- };
- return ret;
- }
- uint8_t strip0_loop0_eff0() {
- // Strip ID: 0 - Effect: Rainbow - LEDS: 7
- // Steps: 8 - Delay: 87
- // Colors: 7 (255.0.0, 0.255.0, 0.0.255, 255.157.0, 255.0.255, 0.255.255, 255.255.255, )
- // Options: toLeft=true,
- if(millis() - strip_0.effStart < 87 * (strip_0.effStep)) return 0x00;
- float factor1, factor2;
- uint16_t ind;
- ......
复制代码
以上就是本篇文章的全部内容。如果遇到问题,请随时在本帖下面进行回复。 |