极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16736|回复: 4

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

[复制链接]
发表于 2016-7-20 16:30:50 | 显示全部楼层 |阅读模式
本帖最后由 Dzz 于 2016-7-20 16:30 编辑

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

  8. void setup() {
  9.   Serial.begin(9600);
  10. }

  11. void loop() {
  12.    while (Serial.available()) {
  13.     char inChar = (char)Serial.read();
  14.     inputString += inChar;
  15.     //字符串结束标志,自己定义
  16.     if (inChar == '0') {
  17.       stringComplete = true;
  18.     }
  19.   }
  20.   if (stringComplete) {
  21.     Serial.println(inputString);
  22.     for(i=0;i<inputString.length();i++)
  23.     {
  24.       if(inputString[i]=='#')
  25.       {
  26.         tempBegin=i;
  27.       }
  28.       if(i>tempBegin)
  29.       {
  30.         tempString += inputString[i];
  31.       }
  32.     }
  33.     for(j=0;j<tempString.length()-1;j++)
  34.     {
  35.       outputString += tempString[j];
  36.     }
  37.     Serial.println(outputString);
  38.     outputString = "";
  39.     tempString = "";
  40.     inputString = "";
  41.     stringComplete = false;
  42.   }
  43. }
复制代码


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


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2016-7-20 16:49:29 | 显示全部楼层
谢谢!
回复 支持 反对

使用道具 举报

发表于 2016-7-21 00:13:00 | 显示全部楼层
本帖最后由 LOVE_KE 于 2016-7-21 00:17 编辑

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


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

使用道具 举报

发表于 2016-7-21 00:35:43 | 显示全部楼层
LOVE_KE 发表于 2016-7-21 00:13
我按照 asdffr#156515610 这样就出来不对了  不知道什么情况  用数字是对的  

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

使用道具 举报

 楼主| 发表于 2016-7-22 00:04:21 | 显示全部楼层
LOVE_KE 发表于 2016-7-21 00:35
找到原因了  因为你的tempBegin 初始值是0 所以第一次只能去掉第一个字母   把初始值改大一点就好了 我选 ...

可以把上面的代码优化一下,那是解决网友问题随手写的,可能不太严谨
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 07:28 , Processed in 0.052135 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表