查看: 831|回复: 6

串口处理字符串输出指定统计信息

[复制链接]
  • TA的每日心情
    奋斗
    2021-1-26 19:45
  • 签到天数: 403 天

    [LV.9]以坛为家II

    发表于 2020-11-22 21:01 | 显示全部楼层 |阅读模式
    本帖最后由 topdog 于 2021-1-24 15:04 编辑

    设问串口接收一串字符串,要求打印出全部字符串,统计一共有几个整数,找出最大的整数数值,这个数字在字符串中的位置。

    question9c.JPG


    1,串口接收单个的字符,把它们连接成字符串inputString。

    2,do-while循环与while循环的不同在于:它会先执行循环体,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while 循环至少要执行一次循环体。

    3,字符串处理函数
    myString.indexOf(),在一个字符串中查找一个字符或字符串的索引。默认情况下,搜索从字符串的开头开始,但也可以从给定的索引开始,从而允许至尾端查找字符或字符串的所在索引。myString.indexOf(val, from),小括号里val是查找条件, 题目里给出的空格。from开始搜索的索引。缺省值零。字符串中val的索引,如果没有找到则为-1。

    4,字符串处理函数
    myString.substring(A,B),获取字符串的子字符串。起始索引A是包含性的(对应字符包含在子字符串中),但是可选的结束索引B是独占性的(对应字符不包含在子字符串中)。如果省略了结束索引,则子字符串将继续到字符串的末尾。

    5,字符串处理函数
    myString.toInt()将有效字符串转换为整数。输入字符串应该以一个整数开始。如果字符串包含非整数,函数将停止执行转换。

    6,例如:809,66,829,432,113,971,338,816,590,238,358,330,636,867,  为了看清楚空格位置用逗号标注。SpaceIndex = inputString.indexOf(', ')给出第一个逗号的序列值,然后inputString.substring(0, SpaceIndex).toInt() 第一截取字符串,第二把它转化成整数,再次,去除809形成新的字符串
    inputString.substring(SpaceIndex + 1)。如此循环直到尾端。特别强调867后面有个逗号,如果是空格的话请不要忘记输入。

    7,请注意程序首部是全局变量,在loop花括号里面的是局部变量,运行结束都要清零呦。

    String inputString = "";
    bool Status = false;
    
    void setup()
    {
      Serial.begin(9600);
      inputString.reserve(200);
      Serial.println("Please input");
    }
    
    void loop()
    {
      int SpaceNum = 0;
      int Max = 0;
      int MaxPosition = 0;
      int Position = 0;
      int SpaceIndex = 0;
    
      if (Status)
      {
        Serial.println(inputString);    
    
        do
        {
          SpaceIndex = inputString.indexOf(' ');
    
          if (SpaceIndex != -1)
          {
            SpaceNum = inputString.substring(0, SpaceIndex).toInt();
            inputString = inputString.substring(SpaceIndex + 1);
            ++Position;
            if (SpaceNum > Max)
            {
              Max = SpaceNum;
              MaxPosition = Position;
            }
          }
          else
          {
            Serial.print("Size of input data = ");
            Serial.print(Position);
            Serial.println(" integers");
            Serial.print("Max = ");
            Serial.println(Max);
            Serial.print("Max position = ");
            Serial.println(MaxPosition);
            Serial.println(" ");
            Serial.println("Please input");
    
            inputString = "";
            Serial.flush();
            Status = false;
          }
        } while (inputString.length() > 0);
      }
    }
    
    void serialEvent()
    {
      if (Serial.available())
      {
        char inChar = (char)Serial.read();
    
        inputString += inChar;
    
        if (inChar == '\n')
        {
          Status = true;
        }
      }
    }




  • TA的每日心情

    2020-11-25 03:23
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2020-11-22 23:33 | 显示全部楼层
    感谢前辈详解,获益良多
  • TA的每日心情
    奋斗
    2021-1-26 19:45
  • 签到天数: 403 天

    [LV.9]以坛为家II

     楼主| 发表于 2020-11-22 23:38 | 显示全部楼层
    p1230 发表于 2020-11-22 23:33
    感谢前辈详解,获益良多

    感谢p123的关注和指导,一起学习一起进步。
  • TA的每日心情
    奋斗
    2021-1-26 19:45
  • 签到天数: 403 天

    [LV.9]以坛为家II

     楼主| 发表于 2020-11-22 23:41 | 显示全部楼层

    这是一个很有趣的例子,Aduino字符串处理语法非常独特值得推敲。小巧玲珑,独具匠心。
  • TA的每日心情
    奋斗
    2020-12-16 18:55
  • 签到天数: 84 天

    [LV.6]常住居民II

    发表于 2020-11-26 18:23 | 显示全部楼层
    老师是什么专业的?基本功很扎实,我遇到串口就懵了,前两天那个串口接收再处理的东西到现在还没搞定呢
  • TA的每日心情
    奋斗
    2021-1-26 19:45
  • 签到天数: 403 天

    [LV.9]以坛为家II

     楼主| 发表于 2020-11-26 21:50 | 显示全部楼层
    redtxd 发表于 2020-11-26 18:23
    老师是什么专业的?基本功很扎实,我遇到串口就懵了,前两天那个串口接收再处理的东西到现在还没搞定呢:' ...

    这是给你的两个控制程序 https://www.arduino.cn/thread-102053-1-1.html 都可以用呀!
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    (开源)微信小程序控制esp8266,可远程
    (开源)微信小程序控制es
    流程说明:首先要使esp8266能够联网,能联网就可以控制,使用示例程序,修改WIFI、
    arduino封装了一个无线串口模块LC12S的操作库
    arduino封装了一个无线串
    前一段时间接触到一个比较好用的2.4G无线串口通信模块LC12S, 在淘宝上仅四五块钱,收
    【花雕动手做】快餐盒盖,极低成本搭建机器人实验平台
    【花雕动手做】快餐盒盖,
    吃完快餐粥,除了粥的味道不错之外,我对个快餐盒的圆盖子产生了兴趣,能否做个极低成
    全新AVR芯片ATMEGA328P烧录程序的教程
    全新AVR芯片ATMEGA328P烧
    潜水多年,觉得有义务贡献一些内容,此贴作为最近学习Arduino的一个总结。 玩Arduino
    【Arduino】168种传感器模块系列实验(90)--- ULN2003步进电机
    【Arduino】168种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表