Dzz 发表于 2016-7-20 16:30:50

Arduino根据标志位输出标志位后的字符串

本帖最后由 Dzz 于 2016-7-20 16:30 编辑

比发送123#321654,然后先判断标志位#,然后保存后面的321654。
问题很简单,首先判断标字符串结束,我们为字符串添加一个字符串结束标志位'0',然后判断标志位#;String inputString = "";          //串口接收的字符串
String tempString = "";         //临时存储
String outputString = "";         // 串口最终输出字符串   
boolean stringComplete = false;   //字符串结束标志位
int tempBegin = 0;   
int i=0;
int j=0;

void setup() {
Serial.begin(9600);
}

void loop() {
   while (Serial.available()) {
    char inChar = (char)Serial.read();
    inputString += inChar;
    //字符串结束标志,自己定义
    if (inChar == '0') {
      stringComplete = true;
    }
}
if (stringComplete) {
    Serial.println(inputString);
    for(i=0;i<inputString.length();i++)
    {
      if(inputString=='#')
      {
      tempBegin=i;
      }
      if(i>tempBegin)
      {
      tempString += inputString;
      }
    }
    for(j=0;j<tempString.length()-1;j++)
    {
      outputString += tempString;
    }
    Serial.println(outputString);
    outputString = "";
    tempString = "";
    inputString = "";
    stringComplete = false;
}
}


选中测试板卡,编译烧录,打开串口测试结果


从测试可以看出,发送123#3216540,其中0为字符串标志位,可以根据自己需要设置,得到我们想要的结果

dreamlang123 发表于 2016-7-20 16:49:29

谢谢!:lol:lol

LOVE_KE 发表于 2016-7-21 00:13:00

本帖最后由 LOVE_KE 于 2016-7-21 00:17 编辑

我按照 asdffr#156515610 这样就出来不对了不知道什么情况用数字是对的


但是我重新复杂 粘贴 发送 一边 又对了   第一遍手输入 出来的不对好郁闷

LOVE_KE 发表于 2016-7-21 00:35:43

LOVE_KE 发表于 2016-7-21 00:13 static/image/common/back.gif
我按照 asdffr#156515610 这样就出来不对了不知道什么情况用数字是对的




找到原因了因为你的tempBegin 初始值是0 所以第一次只能去掉第一个字母   把初始值改大一点就好了 我选的100 只要输入不超过100个字符就没有问题:lol

Dzz 发表于 2016-7-22 00:04:21

LOVE_KE 发表于 2016-7-21 00:35 static/image/common/back.gif
找到原因了因为你的tempBegin 初始值是0 所以第一次只能去掉第一个字母   把初始值改大一点就好了 我选 ...

可以把上面的代码优化一下,那是解决网友问题随手写的,可能不太严谨
页: [1]
查看完整版本: Arduino根据标志位输出标志位后的字符串