编写一段代码 使用esp8266点亮256个ws2812,实现七种图案依次变换
时间: 2024-05-08 07:19:57 浏览: 132
好的,以下是代码实现:
```c
#include <Adafruit_NeoPixel.h>
#define LED_PIN 2
#define NUM_LEDS 256
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
pixels.begin();
}
void loop() {
// 定义七种不同的图案
uint32_t colors[7] = {
pixels.Color(255, 0, 0), // 红色
pixels.Color(255, 255, 0), // 黄色
pixels.Color(0, 255, 0), // 绿色
pixels.Color(0, 255, 255), // 青色
pixels.Color(0, 0, 255), // 蓝色
pixels.Color(255, 0, 255), // 紫色
pixels.Color(255, 255, 255), // 白色
};
// 七种图案的总数
int totalPatterns = 7;
// 循环切换七种不同的图案
for(int i=0; i<totalPatterns; i++) {
switchPattern(colors[i]); // 切换到下一个图案
delay(2000); // 保持当前图案2秒钟
}
}
// 下一个图案函数
void switchPattern(uint32_t color) {
// 第一种图案:所有灯变为指定颜色
showAllColor(color);
delay(2000);
// 第二种图案:随机亮灯
randomOn(color);
delay(1000);
clearAll(); // 熄灭所有LED,准备下一个图案
// 第三种图案:奇数位置灯亮的颜色
oddOn(color);
delay(1000);
clearAll();
// 第四种图案:偶数位置灯亮的颜色
evenOn(color);
delay(1000);
clearAll();
// 第五种图案:左侧为指定颜色,右侧全熄灭
leftOn(color);
delay(1000);
clearAll();
// 第六种图案:右侧为指定颜色,左侧全熄灭
rightOn(color);
delay(1000);
clearAll();
// 第七种图案:互换左右两侧灯的颜色
swapSides(color);
delay(1000);
clearAll();
}
// 全部点亮为指定颜色
void showAllColor(uint32_t color) {
for(int i=0; i<NUM_LEDS; i++) {
pixels.setPixelColor(i, color);
pixels.show();
}
}
// 随机点亮LED
void randomOn(uint32_t color) {
for(int i=0; i<NUM_LEDS; i++) {
pixels.setPixelColor(random(NUM_LEDS), color);
pixels.show();
}
}
// 奇数位置点亮
void oddOn(uint32_t color) {
for(int i=0; i<NUM_LEDS; i+=2) {
pixels.setPixelColor(i, color);
pixels.show();
}
}
// 偶数位置点亮
void evenOn(uint32_t color) {
for(int i=1; i<NUM_LEDS; i+=2) {
pixels.setPixelColor(i, color);
pixels.show();
}
}
// 左侧点亮,右侧全灭
void leftOn(uint32_t color) {
for(int i=0; i<NUM_LEDS/2; i++) {
pixels.setPixelColor(i, color);
pixels.show();
}
}
// 右侧点亮,左侧全灭
void rightOn(uint32_t color) {
for(int i=NUM_LEDS/2; i<NUM_LEDS; i++) {
pixels.setPixelColor(i, color);
pixels.show();
}
}
// 交换左右两侧的颜色
void swapSides(uint32_t color) {
for(int i=0; i<NUM_LEDS/2; i++) {
pixels.setPixelColor(i, pixels.getPixelColor(NUM_LEDS-i-1));
pixels.setPixelColor(NUM_LEDS-i-1, color);
pixels.show();
}
}
// 熄灭所有灯
void clearAll() {
pixels.clear();
pixels.show();
}
```
这段代码使用了 Adafruit 的 NeoPixel 库,通过 ESP8266 连接到了 WS2812 LED。其中,`switchPattern` 函数切换七种不同的图案,`showAllColor` 函数点亮所有LED,`randomOn` 函数随机点亮LED,`oddOn` 函数点亮奇数位置LED,`evenOn` 函数点亮偶数位置LED,`leftOn` 函数左侧点亮,右侧全熄灭,`rightOn` 函数右侧点亮,左侧全熄灭,`swapSides` 函数交换左右两侧的颜色,`clearAll` 函数熄灭所有LED。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![7z](https://img-home.csdnimg.cn/images/20241231044736.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)