我对使用串行通讯在Arduino和HC-05模块之间进行BT通信有疑问。我正在尝试通过手机上的BT终端控制Arduino nano上的RGB灯的模式(将来将是Android APP),但是我卡在需要检查发送的命令是字母还是字符串的地方颜色。下面是示例:
我想使用将字母T设置为命令的模式,所以我有代码:
if (Serial.available()) {
mode = Serial.read();
if( mode == 'T') {doSomething(); }
它工作正常,但现在我想发送255,255,255这样的BT RGB颜色,然后将其放入代码中
leds[i].r = redInt;
leds[i].g = greenInt;
leds[i].b = blueInt;
我尝试将其保存为字符串,然后如果不是任何模式,请将其解析为int
的(redInt
,greenInt
,{{1 }}),但我不知道该怎么做。我尝试使用blueInt
,但这是说它不适用于字符串。问题是如何将传入的parseInt
保存为字符串,并且在检查是否为字符串后,该命令如何将其解析为3个单独的Serial.read()
以让我设置颜色?
答案 0 :(得分: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 = "";
}