改变部分代码,使灯带在音量大时渐亮音量小时渐灭。#include <Adafruit_NeoPixel.h> #define PIN 6 // 灯带数据-Arduino引脚 #define NUMPIXELS 60 // 灯珠数量 #define MIC_PIN A0 // 声音传感器-Arduino引脚 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); void setup() { pixels.begin(); // 初始化 灯带 Serial.begin(9600); // 串口9600 } void loop() { int micValue = analogRead(MIC_PIN); // 读 声音传感器值 if(micValue > 50){ // 判断声音传感器的值是否大于50 int brightness = map(micValue, 0, 1023, 0, 255); // 将数值映射到0-255范围内 int a = random(0,255); int b = random(0,255); for(int i=0; i<NUMPIXELS; i++) { pixels.setPixelColor(i, pixels.ColorHSV(a, b, brightness)); // 灯珠亮度 } pixels.show(); // 显示 } else{ pixels.clear(); // 关闭所有灯珠 pixels.show(); // 显示 } delay(100);//0.01秒 }
时间: 2024-01-15 09:03:47 浏览: 67
Adafruit_NeoPixel.rar
你可以尝试在原来的代码基础上,利用一个变量来记录上一次的亮度,然后根据当前的音量值和上一次的亮度值来计算出新的亮度值。这样可以让灯带在音量大时渐亮,音量小时渐灭。具体的代码实现如下:
```
#include <Adafruit_NeoPixel.h>
#define PIN 6 // 灯带数据-Arduino引脚
#define NUMPIXELS 60 // 灯珠数量
#define MIC_PIN A0 // 声音传感器-Arduino引脚
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int lastBrightness = 0; // 上一次的亮度值
void setup() {
pixels.begin(); // 初始化 灯带
Serial.begin(9600); // 串口9600
}
void loop() {
int micValue = analogRead(MIC_PIN); // 读 声音传感器值
if (micValue > 50) { // 判断声音传感器的值是否大于50
int currentBrightness = map(micValue, 0, 1023, 0, 255); // 将数值映射到0-255范围内
if (currentBrightness > lastBrightness) { // 音量大于上一次时,灯光渐亮
for (int i = lastBrightness; i <= currentBrightness; i++) {
int a = random(0, 255);
int b = random(0, 255);
for (int j = 0; j < NUMPIXELS; j++) {
pixels.setPixelColor(j, pixels.ColorHSV(a, b, i)); // 灯珠亮度
}
pixels.show(); // 显示
delay(10); // 延时一段时间,让灯光渐变
}
} else if (currentBrightness < lastBrightness) { // 音量小于上一次时,灯光渐灭
for (int i = lastBrightness; i >= currentBrightness; i--) {
int a = random(0, 255);
int b = random(0, 255);
for (int j = 0; j < NUMPIXELS; j++) {
pixels.setPixelColor(j, pixels.ColorHSV(a, b, i)); // 灯珠亮度
}
pixels.show(); // 显示
delay(10); // 延时一段时间,让灯光渐变
}
} else { // 音量和上一次相等时,直接显示灯光
int a = random(0, 255);
int b = random(0, 255);
for (int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.ColorHSV(a, b, currentBrightness)); // 灯珠亮度
}
pixels.show(); // 显示
}
lastBrightness = currentBrightness; // 记录当前亮度值
} else {
pixels.clear(); // 关闭所有灯珠
pixels.show(); // 显示
lastBrightness = 0; // 重置亮度值
}
delay(100); //0.01秒
}
```
在这段代码中,我们新增了一个 `lastBrightness` 变量来记录上一次的亮度值。然后在判断音量大小时,我们根据当前的音量值和上一次的亮度值来计算出新的亮度值。如果新的亮度值大于上一次的亮度值,我们就让灯光渐亮;如果新的亮度值小于上一次的亮度值,我们就让灯光渐灭;如果新的亮度值和上一次的亮度值相等,我们就直接显示灯光。这样就可以让灯带在音量大时渐亮,音量小时渐灭。
阅读全文