添加代码,加一个连接电源与切断电源的开关。#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); unsigned long previousMillis = 0; // 上一次流水灯时间 int interval = 2000; // 流水灯间隔时间 void setup() { pixels.begin(); // 初始化 灯带 Serial.begin(9600); // 串口9600 } void loop() { int micValue = analogRead(MIC_PIN); // 读 声音传感器值 if(micValue > 30){ // 判断声音传感器的值是否大于30 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(); // 重置流水灯时间 previousMillis = millis(); } else{ unsigned long currentMillis = millis(); // 获取当前时间 // 如果达到两秒 if(currentMillis - previousMillis >= interval){ // 开始流水灯 for(int i=0; i<NUMPIXELS; i++) { int a = random(0,255); int b = random(0,255); int c = random(0,255); pixels.setPixelColor(i, pixels.Color(a, b, c)); // 蓝 pixels.show(); delay(50); pixels.setPixelColor(i, pixels.Color(0, 0, 0)); // 关 int micValue = analogRead(MIC_PIN); if(micValue > 30){ i=60; } } pixels.show(); // 重置流水灯时间 previousMillis = millis(); } else{ pixels.clear(); // 关all pixels.show(); } } delay(50); }
时间: 2024-03-18 10:45:21 浏览: 259
可以在Arduino上添加一个开关来控制电源的连接和切断。可以使用一个普通的开关,将它连接到Arduino的数字引脚上,然后在代码中添加一个判断语句来控制电源的开关。
代码如下:
#define POWER_PIN 8 // 电源控制引脚
bool powerOn = true; // 标记电源是否开启
void setup() {
// 初始化代码
pinMode(POWER_PIN, OUTPUT); // 将电源控制引脚设为输出模式
digitalWrite(POWER_PIN, HIGH); // 初始状态为开启电源
}
void loop() {
// 循环代码
int micValue = analogRead(MIC_PIN);
if(powerOn && micValue > 30){ // 判断声音传感器的值是否大于30
int brightness = map(micValue, 0, 1023, 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();
previousMillis = millis();
} else if(powerOn){ // 电源开启且未检测到声音
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= interval){
for(int i=0; i<NUMPIXELS; i++) {
int a = random(0,255);
int b = random(0,255);
int c = random(0,255);
pixels.setPixelColor(i, pixels.Color(a, b, c));
pixels.show();
delay(50);
pixels.setPixelColor(i, pixels.Color(0, 0, 0));
int micValue = analogRead(MIC_PIN);
if(micValue > 30){
i=60;
}
}
pixels.show();
previousMillis = millis();
} else{
pixels.clear();
pixels.show();
}
}
// 读取开关状态,控制电源开关
int powerSwitch = digitalRead(POWER_PIN);
if(powerSwitch == LOW){
powerOn = false;
pixels.clear();
pixels.show();
} else{
powerOn = true;
}
delay(50);
}
在上面的代码中,我们定义了一个名为POWER_PIN的常量来表示电源控制引脚。我们还定义了一个名为powerOn的变量来表示电源是否开启。在setup函数中,我们将POWER_PIN设置为输出模式,并将电源初始状态设为开启。
在loop函数中,我们添加了一个判断语句来检测电源开关状态。如果电源开关为开启状态并且检测到声音,则执行灯带控制代码。如果电源开关为开启状态但未检测到声音,则执行流水灯效果。如果电源开关为关闭状态,则关闭灯带并清空所有灯珠。
在loop函数的末尾,我们读取电源控制引脚的状态,如果检测到开关被按下,则将电源状态设置为关闭,并关闭灯带。如果开关未被按下,则将电源状态设置为开启。
阅读全文