【发布时间】:2020-11-07 00:38:46
【问题描述】:
我正在尝试使用蓝牙 + Adafruit NeoPixel 在我的移动设备上管理一些 LED 灯条。我几乎完成了草图,但我发现 RGB 的数字没有像我预期的那样出现,我找不到我做错了什么。
想象一下,我从我的手机发送了以下 RGB 代码“0,19,255”,当我检查控制台时,我看到以下结果:
如您所见,前两行没问题,但第三行我们可以看到 2550。0 不应该在那里,我无法弄清楚问题所在。
所以我决定隔离代码并尽量保持最低限度来确定根本原因,这就是代码:
#include <SoftwareSerial.h>
#include <Adafruit_NeoPixel.h>
SoftwareSerial BT (10, 11);
#define PIN 2
#define NUMPIXELS 144
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRBW + NEO_KHZ800);
int red = "";
void setup() {
Serial.begin(9600);
Serial.println("Ready");
BT.begin(38400);
pixels.begin();
pixels.show();
pixels.setBrightness(20);
}
void loop() {
while (BT.available()>0){
red = BT.parseInt();
Serial.println(red);
}
}
【问题讨论】:
-
String red = ""; red = BT.parseInt();除非我弄错了,否则parseInt返回一个int而不是字符串。 -
@kaylum 哎呀,你是对的。我已更改,但问题仍然存在。
-
是否有可能在接收“21”和“19”之间接收到两个数字“255”和“0”并且它们被解析为“2550”?您能否以某种方式确保数字被单独解析,例如发送一些 arduino 期望但忽略的东西。比如发送“0X”、“21X”、“255X”、“0X”、“19X”、“255X”。这将允许将稍微太慢的 arduino 与移动设备发送的内容同步。
-
看起来 255 和 0 之间没有分隔符:
0,21,2550,19,255。 -
@zdf 你是一个比我更敏锐的观察者/读者。我建议做一个答案。