#include <FastLED.h> #define LED_PIN 3 #define LED_PIN_2 6 // 定义第二条灯带的引脚 #define LED_COUNT 42 #define LED_COUNT_2 7 // 定义第二条灯带的 LED 数量 #define BRIGHTNESS 255 #define BRIGHTNESS_2 255 #define LED_TYPE WS2812B #define COLOR_ORDER GRB CRGB leds[LED_COUNT]; CRGB leds_2[LED_COUNT_2]; // 定义第二条灯带的 LED 数组 int brightness2 = 0; // 定义初始亮度为 100 void setup() { FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, LED_COUNT); FastLED.addLeds<LED_TYPE, LED_PIN_2, COLOR_ORDER>(leds_2, LED_COUNT_2); // 添加第二条灯带 FastLED.setBrightness(BRIGHTNESS); FastLED.setBrightness(BRIGHTNESS_2); } void loop() { /太阳灯带**/ // 将第二条灯带的所有 LED 设置为黄色 for (int i = 0; i < LED_COUNT_2; i++) { leds_2[i] = CRGB(255, 255, 0); } // 每隔2秒增加亮度 static unsigned long lastUpdateTime = 0; unsigned long currentTime = millis(); if (currentTime - lastUpdateTime >= 1000) { lastUpdateTime = currentTime; brightness2 -= 10; if (brightness2 > 255) { brightness2 = 0; } } // 设置第二条灯带的亮度 FastLED.setBrightness(BRIGHTNESS_2); // 更新 LED 灯带 FastLED.show(); }为什么第二条灯带亮度没有变化
时间: 2024-03-17 07:45:44 浏览: 54
根据你提供的代码,第二条灯带的亮度没有变化是因为在循环中虽然有修改亮度变量brightness2的代码,但是并没有将修改后的brightness2的值赋给第二条灯带的亮度。
你可以尝试在循环中添加以下代码来将修改后的亮度值赋给第二条灯带:
```
FastLED.setBrightness(brightness2);
```
这样就可以根据brightness2的值来控制第二条灯带的亮度了。
相关问题
#include <FastLED.h> #define LED_PIN 3 #define LED_COUNT 42 #define BRIGHTNESS 255 #define LED_TYPE WS2812B #define COLOR_ORDER GRB CRGB leds[LED_COUNT]; void setup() { FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, LED_COUNT); FastLED.setBrightness(BRIGHTNESS); } void loop() { int center = LED_COUNT / 2; // 计算中心位置 int brightness = 0; int fadeAmount = 5; int delayTime = 25; // 初始化延时时间为50毫秒 //红色从两端开始亮起 /*for (int i = 0; i <= center; i++) { leds[i].setRGB(0, 255, 0); // 从第一个灯开始向中间亮起,设置红色 leds[LED_COUNT - 1 - i].setRGB(255, 0, 0); // 从最后一个灯开始向中间亮起,设置红色 FastLED.show(); delay(delayTime); // 延时 delayTime -= 1; // 延时时间逐渐减少 } delayTime = 25; // 重置延时时间为50毫秒 for (int i = 0; i <= center; i++) { leds[i].setRGB(0,0, 0); // 从第一个灯开始向中间熄灭 leds[LED_COUNT - 1 - i].setRGB(0, 0, 0); // 从最后一个灯开始向中间熄灭 FastLED.show(); delay(delayTime); // 延时 delayTime += 1; // 延时时间逐渐增加 } */ // 从中心位置开始向两端亮起 for (int i = center; i >= 0; i--) { leds[i].setRGB(0, 255, 0); // 从中心位置开始向两端亮起,设置红色 leds[LED_COUNT - 1 - i].setRGB(0, 255, 0); // 从中心位置开始向两端亮起,设置红色 FastLED.show(); delay(delayTime); // 延时 delayTime += 1; // 延时时间逐渐减少 } delayTime = 25; // 重置延时时间为50毫秒 for (int i = center; i >= 0; i--) { leds[i].setRGB(0, 0, 0); // 从中心位置开始向两端熄灭 leds[LED_COUNT - 1 - i].setRGB(0, 0, 0); // 从中心位置开始向两端熄灭 FastLED.show(); delay(delayTime); // 延时 delayTime -= 1; // 延时时间逐渐增加 } }另外增加一条灯带
如果你需要增加一条灯带,需要先确定新灯带的引脚和LED数量。假设新灯带的引脚为6,LED数量为20,那么你需要在代码中添加以下内容:
```
#define LED_PIN_2 6
#define LED_COUNT_2 20
CRGB leds_2[LED_COUNT_2];
void setup() {
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, LED_COUNT);
FastLED.addLeds<LED_TYPE, LED_PIN_2, COLOR_ORDER>(leds_2, LED_COUNT_2);
FastLED.setBrightness(BRIGHTNESS);
}
void loop() {
// 程序的其他部分不变
// 在需要控制新灯带的地方,使用leds_2数组代替leds数组即可
}
```
这样,在setup函数中,你需要添加一行代码来初始化新灯带的设置。在loop函数中,如果需要控制新灯带的亮灭,就使用新的leds_2数组。
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灯珠设置为白色 }的这个代码中加入流水灯效果
你可以在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()函数中的颜色和等待时间。
阅读全文