我正在使用外部应用程序将我的RGB外设与我的WS2812B Strip同步。我想在应用程序未运行时创建一个可以切换到的默认颜色,但在软件中启用条带2秒后,它会恢复为我设置的默认颜色(255,255,255)。
#include <Adafruit_NeoPixel.h>
#define PIN 6
#define NUMPIXELS 30
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB +
NEO_KHZ800);
void setup() {
pixels.begin();
Serial.begin(19200, SERIAL_8E1);
}
void loop() {
for (int w = 0; w < NUMPIXELS; w++) {
pixels.setPixelColor(w, 255, 255, 255);
}
pixels.show();
int w = 0;
if (Serial.available()) {
int n = 0;
for (int n = 0; n < 3; n++) {
byte rgb[3];
Serial.readBytes(rgb, 3);
uint32_t r = int(rgb[0]);
uint32_t g = int(rgb[1]);
uint32_t b = int(rgb[2]);
for (int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, r, g, b);
}
pixels.show();
}
}
}
答案 0 :(得分:1)
函数Serial.available()
做的不是你期望的事情:
如果有可用的通信伙伴,您希望它返回。而是检查是否有可供读取的字节:
获取可从串行端口读取的字节数(字符数)。 (来源:https://www.arduino.cc/en/Serial/Available)
这意味着:您的Arduino已经用完了要读取的字节数,因为它会过快地清空管道。因此,由于没有更多的字节需要读取,它只会使LED显示为白色。
旁注:if条件应该更改以反映这一点(参见Arduino网站上的帖子):
if (Serial.available() > 0) {