ken0137 发表于 2014-7-9 16:25:33

如何将发向串口的数据分解

将一个命令发到下位机上,然后下位机解析命令
比如命令格式为:"Command -Pin -Max -Min",
Command:命令,字符串
Pin:pin脚,字符串
Max:最大值,浮点数
Min:最小值,浮点数
空格+-,“ -”是分隔符
不知道如何将这四个部分从命令中解析出来
自己试了一下,总是得不到想要的结果String comdata="";
intmark = 0;
void setup()
{
Serial.begin(9600);   //使用9600的波特率进行串口通讯/
}
void loop()
{
String StrComm,StrPort,StrMax,StrMin;
while(Serial.available() > 0)
{
    comdata += char(Serial.read());
    delay(2);
    mark = 1;
}
if(mark == 1)
{
    int count=0,SI=0;
    Serial.println(comdata);
    Serial.println(comdata.length());
    for(int i = 0; i < comdata.length() ; i++)
    {
      //get command
      if (comdata == ' ' && comdata == '-')
      {
      if (count=0)
      {
          for(int j=0;j<i;j++)
          {StrComm+=comdata;count=1;SI=i;}
          Serial.println("0:");
          continue;      
      }
      if (count=1)
      {
         for(int j=SI+2;j<i;j++)
         {StrPort+=comdata;count=2;SI=i;}   
         Serial.println("1:");      
         continue;   
      }
      if (count=2)
      {
         for(int j=SI+2;j<i;j++)
         {StrMax+=comdata;count=3;SI=i;}
         Serial.println("2:");
         continue;   
      }   
      if (count=3)
      {
         for(int j=SI+2;j<i;j++)
         {StrMin+=comdata;count=4;SI=i;}
         Serial.println("3:");
         continue;
      }         
      }   
    }
    mark = 0;
    Serial.println(StrComm);
    Serial.println(StrPort);
    Serial.println(StrMax);
    Serial.println(StrMin);
}
}

sinbadcool 发表于 2014-7-9 16:43:27

1、将下列代码下载到arudino里String inputString = "";         // a string to hold incoming data
boolean stringComplete = false;// whether the string is complete

void setup()
{
// initialize serial:
Serial.begin(9600);
// reserve 200 bytes for the inputString:
inputString.reserve(200);
}

void loop()
{
String ss;// print the string when a newline arrives:
if (stringComplete)
{
    for(int i=0;i<3;i++)
    {
      ss=inputString.substring(0,inputString.indexOf("-"));
      Serial.println(ss);
      inputString=inputString.substring(inputString.indexOf("-")+1,inputString.length());
    }
    ss=inputString.substring(0,inputString.length()-1);
    Serial.println(ss);
    // clear the string:
    inputString = "";
    stringComplete = false;
}
}

/*
SerialEvent occurs whenever a new data comes in the
hardware serial RX.This routine is run between each
time loop() runs, so using delay inside loop can delay
response.Multiple bytes of data may be available.
*/
void serialEvent()
{
while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString += inChar;
    // if the incoming character is a newline, set a flag
    // so the main loop can do something about it:
    if (inChar == '\n') {
      stringComplete = true;
    }
}
}

2、打开arduino的串口监视器,波特率选9600,发送方式选Newline
3、在串口监视器中输入“Command -Pin -Max -Min”后回车,观察返回的值

ken0137 发表于 2014-7-14 20:27:44

sinbadcool 发表于 2014-7-9 16:43 static/image/common/back.gif
1、将下列代码下载到arudino里2、打开arduino的串口监视器,波特率选9600,发送方式选Newline
3、在串口监 ...

发送后,一点反应都没有
页: [1]
查看完整版本: 如何将发向串口的数据分解