>我有一个关于使用串行通信的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
的(redInt
,greenInt
,blueInt
),但我不知道该怎么做。 我尝试过parseInt
,但它说它不适用于字符串。问题是如何将传入的Serial.read()
保存为字符串,并在检查是否不是字符串后,命令如何将其解析为 3 个单独的int
让我设置颜色?
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 = "";
}