ws2812 LED灯编程
2019-10-01 本文已影响0人
过眼云烟梦
- 对于WS2812编程,arduino集成开发中有一个库Adafruit_NeoPixel可以很方便的让我们进行操作。
- 下面来对这个库中的几个重要方法进行详解
strip.setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b);
第一个参数n是彩带中LED的编号,最接近单片机引脚的编号为0;接下来的三个参数描述像素颜色,分别表示红色、绿色和蓝色的亮度级别,0为最暗,255是最大亮度;
strip.setPixelColor(uint16_t n, uint32_t c);
n是彩带中LED的编号,颜色color是一种32位类型,将红色,绿色和蓝色值合并为一个数字,有时这样做能提高程序的效率。通过下面的方法,可以将红色、绿色和蓝色值转换为32位类型。
uint32_t magenta = strip.Color(red, green, blue);
strip.setBrightness(uint8_t);
一般只在setup()中调用,以保证在整个程序执行过程中LED颜色亮度的一致性。其实,在程序中通过合适的逻辑控制各像素的亮度值,可能动画效果更好。
strip.show();
该方法更新彩带上的全部LED。一个好的习惯是先利用setPixelColor()设置好整个彩带的颜色,然后再调用show()方法,以防止出现动画跳跃而不平滑。
// 呼吸灯效果
#include <Adafruit_NeoPixel.h>
#define PIN 6
#define MAX_LED 60
uint8_t brightness = 0; //LED的亮度
uint8_t fadeAmount = 1; //亮度变化增量,如果觉得呼吸时间过长,可以增大此数据。
Adafruit_NeoPixel strip = Adafruit_NeoPixel( MAX_LED, PIN, NEO_RGB + NEO_KHZ800 );
void setup()
{
strip.begin(); //初始化Adafruit_NeoPixel;
}
void loop()
{
//如果是WS2812B的话,参数是绿红蓝
uint32_t c = strip.Color(255, 0, 255);
strip.setPixelColor( 10, c), //设置第几个灯显示此颜色
strip.setBrightness(brightness);
strip.show();
brightness = brightness + fadeAmount;
if (brightness <= 0 || brightness >= 200) {
fadeAmount = -fadeAmount ; //亮度翻转
}
delay(20);
}