Arduino蓝牙通讯

时间:2019-01-16 00:29:33

标签: c++ arduino arduino-ide serial-communication hc-05

我对使用串行通讯在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的(redIntgreenInt,{{1 }}),但我不知道该怎么做。我尝试使用blueInt,但这是说它不适用于字符串。问题是如何将传入的parseInt保存为字符串,并且在检查是否为字符串后,该命令如何将其解析为3个单独的Serial.read()以让我设置颜色?

1 个答案:

答案 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 = "";
}