ws2812 LED灯编程

  • 对于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 

#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);
  }

你可能感兴趣的:(ws2812 LED灯编程)