0

我有一个关于 Arduino 和 HC-05 模块之间使用串行通信的 BT 通信的问题。我正在尝试通过手机上的 BT 终端控制我的 Arduino nano 上的 RGB 灯模式(将来它将是 Android APP),但我被困在需要检查发送的命令是字母还是字符串的地方颜色。下面是示例:

我想使用将字母 T 设置为命令的模式,所以我有代码:

    if (Serial.available()) {
    mode = Serial.read();

if( mode ==  'T')  {doSomething(); }

它工作得很好,但现在我想发送 BT RGB 颜色,如 255,255,255,然后将其放入代码中

leds[i].r = redInt; 
leds[i].g = greenInt; 
leds[i].b = blueInt;

我尝试将其保存为字符串,然后如果它不是任何模式,请将其解析为int's ( redInt, greenInt, blueInt) 但我不知道该怎么做。我试过了parseInt,但它说它不适用于字符串。问题是如何将传入Serial.read()的字符串保存为字符串,并在检查是否不是之后,如何将其解析为 3 个单独的命令int以让我设置颜色?

4

1 回答 1

0

HC-05/HC-06 把字符串当作一个字符序列。如果您想发送 255,那么 HC-05 会将其视为“2”、“5”、“5”。因此,您的第一项工作是确定它是整数还是字符串。我在整数和字符串之前添加了不同的前缀和一个通用的后缀('#'),通过它我可以确定输入的结尾。希望这对您有所帮助。

while (Serial.available()) {

delay(3);  //small delay to allow input buffer to fill

char c = Serial.read();  //gets one byte from serial buffer
if (c == '#') {
  break;
}  //breaks out of capture loop to print readstring
readString += c;
}

现在,在采取了所有措施之后,您必须在前缀的帮助下弄清楚您采取了什么措施。

if (readString.charAt(0) == 'i')
{
 //"i255,255,255#"
readString.replace("i", "0");
value1 = readString.substring(1, 3).toInt();
value2 = readString.substring(5, 7).toInt();
value3 = readString.substring(8, 11).toInt();

readString = "";

}
else if (readString.charAt(0) == 's')
{
 //Do as you wish
readString = "";
}
于 2019-01-16T08:33:02.883 回答