与其他字符相比,c++/Arduino 处理“?”的方式是否不同



我有一个通过蓝牙与arduino板通信的Android应用程序

所有命令都很好地前后移动,直到我想发送该类型的 comand

"aT?bb"

从安卓应用程序,但是当我在 ardunio 中打印它时,我得到了

"aT%3F"

我正在 android 中记录命令并且它的格式正确 我的问题是 c++/Arduino 处理"?"的方式是否与普通字符不同?

这是我的Arduino代码>

while(bluetooth.available())
{
char toSend = (char)bluetooth.read();
if(toSend != ''){
    if (toSend == 'a'){ i=0 ;}
    inMsg[i] = toSend;
    i++;
  } 
}
if(i == 5 )
{
// mock sending queries
  if(inMsg[2] == '?'){
   if(inMsg[1] == 'T'){
      bluetooth.write("ty1");Serial.println("");
    }else if(inMsg[1] == 'x'){  //normal cycle
       bluetooth.write("xx1");
    }else if(inMsg[1] == 'X'){ Serial.println(""); //booter
       bluetooth.write("XX0");
    }else if(inMsg[1] == 'N'){Serial.println("");  //On time 
       bluetooth.write("on1");
    }else if(inMsg[1] == 'F'){ Serial.println(""); //Off time
       bluetooth.write("of30");
    }else if(inMsg[1] == 'S'){ Serial.println(""); //Speed percent
       bluetooth.write("sp30");
    }
}
// write to console 
  for(int j = 0; j < 5; j++){
    Serial.write(inMsg[j]);
}
// new line
  if(i == 5){Serial.println("");}
  i = 0; // reset buffer
}

aT%3F <- this is mal formed
aS133 <- all the other are as I sent them from android 
aN169
aF192
aS200
aXXXX
aYYYY
ayYYY
axXXX

我的安卓代码 ... 命令 = "aT?bb"; writeCommand(command); ...

private void writeCommand(String command)
{
    for (BluetoothGattCharacteristic characteristic : characteristics)
    {
        if ((characteristic.getProperties() & BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE) >0)
        {
            try {
                characteristic.setValue(URLEncoder.encode(command, "utf-8"));
                gatt.writeCharacteristic(characteristic);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
    }
}

正如上面的评论中所指出的,是URLEncoder正在更改字符串。我现在已经将此方法更改为

private void writeCommand(String command)
{
    for (BluetoothGattCharacteristic characteristic : characteristics)
    {
        if ((characteristic.getProperties() & BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE) >0)
        {
            characteristic.setValue(command);
            gatt.writeCharacteristic(characteristic);
        }else{
            Log.i(TAG,"non write able");
        }
    }
}

相关内容

最新更新