用arduino uno开发板,30个ws2812b灯珠,微动开关。用开关触发流水灯效果,每按一次开关,触发一次,可以不停触发。
时间: 2023-12-18 13:03:32 浏览: 117
炫彩流水灯_arduino炫彩流水灯_
5星 · 资源好评率100%
首先,你需要将WS2812B灯珠连接到Arduino Uno开发板上。你可以将灯珠的数据引脚连接到Arduino Uno的数字引脚上,比如说数字引脚6。然后,将开关连接到Arduino Uno的数字引脚上,比如说数字引脚2。
接下来,你需要下载并安装Adafruit Neopixel库,这个库可以让你更方便地控制WS2812B灯珠。你可以在Arduino IDE中选择"工具" -> "库管理器",然后搜索"Adafruit Neopixel"并安装它。
接下来,你可以使用以下代码实现你的需求:
```C++
#include <Adafruit_NeoPixel.h>
#define LED_PIN 6
#define NUM_LEDS 30
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
#define SWITCH_PIN 2
int switchState = LOW;
int lastSwitchState = LOW;
void setup() {
strip.begin();
strip.show(); // Initialize all pixels to off
pinMode(SWITCH_PIN, INPUT_PULLUP);
}
void loop() {
switchState = digitalRead(SWITCH_PIN);
if (switchState == HIGH && lastSwitchState == LOW) {
// If the switch is pressed and was not pressed before, trigger the effect
waterfallEffect();
}
lastSwitchState = switchState;
}
void waterfallEffect() {
// Set all pixels to off
for (int i = 0; i < NUM_LEDS; i++) {
strip.setPixelColor(i, 0);
}
strip.show();
// Iterate through each pixel and turn it on
for (int i = 0; i < NUM_LEDS; i++) {
strip.setPixelColor(i, 255, 0, 0); // Red color
strip.show();
delay(50);
}
// Iterate through each pixel and turn it off
for (int i = NUM_LEDS - 1; i >= 0; i--) {
strip.setPixelColor(i, 0);
strip.show();
delay(50);
}
}
```
在这个代码中,我们首先定义了WS2812B灯珠的数据引脚和数量,以及开关的数字引脚。在setup函数中,我们初始化了灯珠和开关的引脚模式,并将开关的引脚设置为上拉输入。
在loop函数中,我们读取开关的状态。如果开关被按下并且之前没有被按下,我们就调用waterfallEffect函数来触发流水灯效果。
在waterfallEffect函数中,我们首先将所有灯珠设置为关闭状态。然后,我们使用一个for循环逐个点亮每个灯珠,并且使用delay函数来控制流水的速度。最后,我们再次使用一个for循环逐个关闭每个灯珠。
你可以根据自己的需求更改代码中的延迟时间和灯珠颜色。希望这可以帮助到你!
阅读全文