改变部分代码,使每次流水灯循环直接无时间差。#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; // 流水灯间隔时间 bool isFlowing = false; // 是否正在流水灯 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(); // 显示 isFlowing = false; // 停止流水灯 } else { if (!isFlowing) { // 如果之前没有流水灯,则设置上一次流水灯时间 previousMillis = millis(); isFlowing = true; } unsigned long currentMillis = millis(); // 获取当前时间 // 判断是否到达流水灯时间间隔 if (currentMillis - previousMillis >= interval) { // 流水灯效果 for (int i = 0; i < NUMPIXELS; i++) { pixels.setPixelColor(i, pixels.Color(0, 0, 255)); // 蓝色 pixels.show(); // 显示 delay(50); // 每个灯珠之间的间隔 pixels.setPixelColor(i, pixels.Color(0, 0, 0)); // 关闭 } pixels.show(); // 显示 isFlowing = false; // 停止流水灯 } else { pixels.clear(); // 关闭所有灯珠 pixels.show(); // 显示 } } delay(50); // 0.05秒 }
时间: 2024-03-09 09:44:20 浏览: 59
可以尝试将流水灯效果中的 delay(50) 改为一个更小的值,比如 delay(10),这样每个灯珠之间的间隔就会更短,流水灯效果就可以直接无时间差循环了。代码如下:
```
if (currentMillis - previousMillis >= interval) {
// 流水灯效果
for (int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(0, 0, 255)); // 蓝色
pixels.show(); // 显示
delay(10); // 每个灯珠之间的间隔
pixels.setPixelColor(i, pixels.Color(0, 0, 0)); // 关闭
}
pixels.show(); // 显示
isFlowing = false; // 停止流水灯
}
```
相关问题
#include < SPI.h > #include < Wire.h > #include < Adafruit_GFX.h > #include < Adafruit_SSD1306.h > #include < dht.h >
这些是一些常见的Arduino库的头文件,它们用于在Arduino开发中使用不同的功能和设备。让我为你逐个介绍一下:
1. `SPI.h`:这个库提供了与SPI(串行外设接口)通信相关的函数和常量。SPI是一种串行通信协议,用于在微控制器之间进行高速数据传输。
2. `Wire.h`:这个库提供了与I2C(双线制串行总线)通信相关的函数和常量。I2C是一种用于连接多个设备的串行通信协议,它使用两根线(SDA和SCL)进行数据传输。
3. `Adafruit_GFX.h`:这个库是Adafruit开发的一个图形库,用于在显示屏上绘制各种图形和文本。它提供了一系列函数和类,可以方便地创建自定义的用户界面。
4. `Adafruit_SSD1306.h`:这个库是Adafruit开发的一个针对SSD1306 OLED显示屏的驱动库。它提供了一些函数和类,用于控制和显示内容在OLED屏幕上。
5. `dht.h`:这个库是用于与DHT系列温湿度传感器进行通信的库。它提供了函数和类,用于读取传感器的温度和湿度数据。
#include <Adafruit_GFX.h> //OLED库 #include <Adafruit_SSD1306.h> //
#include <Adafruit_GFX.h>和#include <Adafruit_SSD1306.h>是两个Arduino库文件,用于控制OLED屏幕的显示。其中,Adafruit_GFX库是一个通用的图形库,提供了一系列基础的绘图函数,比如画线、画矩形、画圆等;而Adafruit_SSD1306库则是基于Adafruit_GFX库开发的,专门用于控制SSD1306型号的OLED屏幕。这两个库文件可以在Arduino开发环境中直接安装使用,使得开发者可以方便地在自己的项目中使用OLED屏幕进行信息显示。
阅读全文