WS2812彩虹代码
时间: 2024-02-18 20:58:26 浏览: 30
WS2812是一种常见的RGB LED灯带,它可以通过控制每个LED的红、绿、蓝三个通道的亮度来实现各种颜色的显示。下面是一个简单的WS2812彩虹代码示例:
```C++
#include <Adafruit_NeoPixel.h>
#define LED_PIN 6
#define LED_COUNT 30
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
strip.show(); // 初始化所有LED为关闭状态
}
void loop() {
rainbow(20); // 彩虹效果,每个LED的颜色逐渐变化
}
void rainbow(uint8_t wait) {
uint16_t i, j;
for (j = 0; j < 256; j++) {
for (i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel((i + j) & 255));
}
strip.show();
delay(wait);
}
}
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if (WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if (WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
```
这段代码使用了Adafruit_NeoPixel库来控制WS2812灯带。在`setup()`函数中,我们初始化了灯带并将所有LED关闭。在`loop()`函数中,我们调用了`rainbow()`函数来实现彩虹效果。`rainbow()`函数使用了`Wheel()`函数来计算每个LED的颜色,然后通过`strip.setPixelColor()`设置LED的颜色,最后通过`strip.show()`来更新LED的显示。