用arduino uno开发板,30个ws2812b灯珠,微动按键。编程实现按键触发流星效果,每按一次按键,触发一次,支持同时触发多个流星。
时间: 2023-11-26 18:03:33 浏览: 502
控制器:用于控制WS2812B LED的Arduino代码
首先,需要安装 FastLED 库,这个库可以帮助我们控制 ws2812b 灯珠。在 Arduino IDE 中打开“工具”菜单,选择“库管理器”,搜索“FastLED”并安装。
接下来,将 ws2812b 灯珠连接到 Arduino Uno 开发板的数字引脚 6 上,并将微动按键连接到数字引脚 2 上。
代码如下:
```cpp
#include <FastLED.h>
#define NUM_LEDS 30 // 灯珠数量
#define DATA_PIN 6 // 灯珠数据引脚
#define BUTTON_PIN 2 // 按键引脚
CRGB leds[NUM_LEDS]; // 创建灯珠数组
void setup() {
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS); // 初始化灯珠
pinMode(BUTTON_PIN, INPUT_PULLUP); // 初始化按键
}
void loop() {
if (digitalRead(BUTTON_PIN) == LOW) { // 按键被按下
int numMeteors = random(1, 5); // 随机生成流星数量
for (int i = 0; i < numMeteors; i++) {
int meteorStart = random(NUM_LEDS); // 随机生成流星起点
int meteorLength = random(5, 15); // 随机生成流星长度
int meteorColor = random(0xFF0000, 0xFFFFFF); // 随机生成流星颜色
for (int j = meteorStart; j < meteorStart + meteorLength && j < NUM_LEDS; j++) {
leds[j] = meteorColor; // 设置流星颜色
}
FastLED.show(); // 显示灯珠效果
delay(random(50, 150)); // 延迟一段时间
for (int j = meteorStart; j < meteorStart + meteorLength && j < NUM_LEDS; j++) {
leds[j] = CRGB::Black; // 关闭流星
}
FastLED.show(); // 显示灯珠效果
delay(random(50, 150)); // 延迟一段时间
}
}
}
```
代码解析:
1. 在 `setup()` 函数中,使用 FastLED 库的 `addLeds()` 函数初始化灯珠,并将按键引脚设置为输入模式并启用上拉电阻。
2. 在 `loop()` 函数中,使用 `digitalRead()` 函数检测按键是否被按下。
3. 如果按键被按下,则随机生成 1 到 4 个流星,每个流星都有一个随机的起点、长度和颜色。
4. 对于每个流星,使用一个循环将灯珠从起点开始设置为流星颜色,然后使用 `FastLED.show()` 函数显示灯珠效果,并延迟一段时间。
5. 然后再次使用循环将灯珠从起点开始设置为黑色,使用 `FastLED.show()` 函数显示灯珠效果,并再次延迟一段时间。
6. 循环结束后,程序返回到检测按键的状态,等待下一次按键触发。
通过这段代码,我们可以实现用 Arduino Uno 开发板控制 ws2812b 灯珠,按下微动按键触发流星效果。
阅读全文