arduion实现灯带的第一个灯珠和倒数第一个灯珠亮然后依次亮到中间的代码
时间: 2024-04-21 08:22:18 浏览: 246
以下是一个示例代码,可以实现灯带的第一个灯珠和倒数第一个灯珠先亮起,然后依次向中间点亮的效果:
```cpp
#include <FastLED.h>
#define NUM_LEDS 20 // 灯带上LED的数量
#define DATA_PIN 6 // 灯带数据引脚
CRGB leds[NUM_LEDS]; // 存储每个LED的颜色
void setup() {
FastLED.addLeds<WS2812, DATA_PIN, GRB>(leds, NUM_LEDS); // 初始化灯带
}
void loop() {
static int startIndex = 0; // 起始索引,从第一个LED开始
static int endIndex = NUM_LEDS - 1; // 结束索引,从最后一个LED开始
static int delayTime = 100; // 延迟时间,控制点亮速度
// 点亮当前位置的LED
leds[startIndex] = CRGB::Red;
leds[endIndex] = CRGB::Red;
FastLED.show(); // 更新LED显示
delay(delayTime); // 延迟一段时间
// 熄灭当前位置的LED
leds[startIndex] = CRGB::Black;
leds[endIndex] = CRGB::Black;
// 更新起始索引和结束索引
startIndex++;
endIndex--;
// 判断是否已经点亮到了中间位置
if (startIndex > endIndex) {
// 点亮中间位置的LED
int middleIndex = NUM_LEDS / 2;
leds[middleIndex] = CRGB::Red;
FastLED.show(); // 更新LED显示
delay(delayTime); // 延迟一段时间
// 重置起始索引、结束索引和延迟时间,准备下次循环
startIndex = 0;
endIndex = NUM_LEDS - 1;
delayTime = 100;
// 熄灭所有LED
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CRGB::Black;
}
}
}
```
这段代码会先点亮第一个灯珠和倒数第一个灯珠,然后逐渐向中间点亮其他灯珠,直到所有LED都点亮。然后会重置起始索引、结束索引和延迟时间,准备下次循环,并将所有LED熄灭。
请注意,上述代码仅供参考,您可能需要根据您的具体硬件和需求进行适当的修改。
阅读全文