arduino中#include <FastLED.h> // 引入FastLED库 #define LED_PIN 7 // 灯带连接的引脚 #define NUM_LEDS 60 // 灯带上LED灯珠的数量 CRGB leds[NUM_LEDS]; // 定义灯光数组 #define SAMPLES 30 // 平衡传感器采样数量 #define THRESHOLD 30 // 平衡传感器阈值 #define DELAY_TIME 10 // 延时时间 int sensorPin = A0; // 平衡传感器连接的引脚 int sensorValue = 0; // 平衡传感器采样值 int samples[SAMPLES]; // 平衡传感器采样数组 int sampleIndex = 0; // 平衡传感器采样索引 void setup() { FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS); // 初始化灯光控制 } void loop() { sensorValue = analogRead(sensorPin); // 读取平衡传感器采样值 samples[sampleIndex] = sensorValue; // 将采样值存入数组中 sampleIndex = (sampleIndex + 1) % SAMPLES; // 更新采样索引 int sum = 0; for (int i = 0; i < SAMPLES; i++) { sum += samples[i]; // 计算采样值总和 } int average = sum / SAMPLES; // 计算采样值平均值 if (abs(average - sensorValue) > THRESHOLD) { // 如果平衡传感器采样值变化超过阈值 int randomEffect = random(0, 3); // 随机选择一种灯光效果 switch (randomEffect) { case 0: rainbow(); // 彩虹效果 break; case 1: confetti(); // 糖果效果 break; case 2: sparkle(); // 闪烁效果 break; } } FastLED.show(); // 更新灯光效果 delay(DELAY_TIME); // 等待一段时间 } void rainbow() { for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CHSV(i * 255 / NUM_LEDS, 255, 255); // 设置HSV颜色 } } void confetti() { for (int i = 0; i < NUM_LEDS; i++) { int randomHue = random(0, 255); // 随机选择一种颜色 leds[i] = CHSV(randomHue, 255, 255); // 设置HSV颜色 } } void sparkle() { for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CRGB::Black; // 先将所有LED灯珠设置为黑色 } int randomIndex = random(0, NUM_LEDS); // 随机选择一个LED灯珠 leds[randomIndex] = CRGB::White; // 将该LED灯珠设置为白色 }的这个代码中加入流水灯效果
时间: 2024-03-25 09:38:25 浏览: 112
FastLED-Serial-Music-Arduino:使用来自音乐的 Winamp 插件的串行数据输入,为您的 LED 灯条提供令人敬畏的可视化效果。 使用 FastLED.h
你可以在loop()函数中添加以下代码来实现流水灯效果:
```
void loop() {
// 读取平衡传感器采样值和更新采样数组的代码省略
if (abs(average - sensorValue) > THRESHOLD) {
// 如果平衡传感器采样值变化超过阈值
int randomEffect = random(0, 4); // 随机选择一种灯光效果,包括流水灯
switch (randomEffect) {
case 0:
rainbow(); // 彩虹效果
break;
case 1:
confetti(); // 糖果效果
break;
case 2:
sparkle(); // 闪烁效果
break;
case 3:
colorWipe(); // 流水灯效果
break;
}
}
FastLED.show(); // 更新灯光效果
delay(DELAY_TIME); // 等待一段时间
}
void colorWipe() {
// 将所有LED灯珠设置为黑色
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CRGB::Black;
}
// 依次点亮每个LED灯珠
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CRGB::Red; // 将该LED灯珠设置为红色
FastLED.show(); // 更新灯光效果
delay(50); // 等待一段时间
leds[i] = CRGB::Black; // 将该LED灯珠设置为黑色
}
}
```
在colorWipe()函数中,我们将所有LED灯珠先设置为黑色,然后依次点亮每个LED灯珠,并将该LED灯珠设置为红色。在点亮每个LED灯珠之后,我们需要更新灯光效果并等待一段时间,以实现流水灯效果。你可以根据需要修改colorWipe()函数中的颜色和等待时间。
阅读全文