Arduino使用字符串

时间:2016-12-09 08:48:51

标签: c++11 arduino

我试图让我的arduino uno通过串口监视器接收命令。该命令将始终作为#RANDOM_COMMAND%发送,因此我需要从字符串中删除#和%。下面的代码可行,但我被告知它不安全,因为有时连接会被破坏,命令也不会被完全接收。

      // wait for a message to come in
  if (Serial.available() > 0) {
    message = Serial.readStringUntil('%');
    int beginMessage = message.indexOf('#') + 1;
    command = message.substring(beginMessage);
  }
  // if the message is "REMOTE_CONTROL" then switch to the program mode for message receiving
  if (command == "REMOTE_CONTROL") {
    programMode = 4;
  }

  if (programMode == 4) {
    //digitalWrite(lampRemote, HIGH);
    if (command.startsWith("SET_RED:"))
    {
      int colourIndex = command.indexOf(':') + 1;
      r = command.substring(colourIndex).toInt();
    }
    else if (command.startsWith("SET_GREEN:"))
    {
      int colourIndex = command.indexOf(':') + 1;
      g = command.substring(colourIndex).toInt();
    }
    else if (command.startsWith("SET_BLUE:"))
    {
      int colourIndex = command.indexOf(':') + 1;
      b = command.substring(colourIndex).toInt();
    }
    ShowColor(b, r, g);
  }

是否有其他方法通过串行监视器接收字符串,然后安全地删除#和%符号?我对编程很新,所以越简单越好!

谢谢!

1 个答案:

答案 0 :(得分:0)

当然,任何通讯都可以以某种方式中断。

您唯一要避免的是您的代码停止工作。只要你继续监听新命令,如果你在某些时候收到破坏的命令并不重要。只需处理下一个。 您可以简单地忽略它们,或者如果收到无效命令,通常会更好地发送错误消息。因此,与您的设备通话的人都会知道出了问题。 如果您收到有效命令,请发送收据。