yenan1001 发表于 2014-8-30 21:43:05

已解决/ 串口读取字符串,分隔处理问题

本帖最后由 yenan1001 于 2014-8-30 23:19 编辑

答案见回帖。


第一个数据没问题,但是后面的数据看起来都是累加上一次的。不知道问题在哪里。
请各位帮我看看。


我参考了这个教程:
http://www.geek-workshop.com/thread-260-1-1.html

下面是程序,基本没改:
int k = 0;

while (Serial.available() > 0)
{
    comdata += char(Serial.read());   
   delay(10);

   mark=1;
}
   
if(mark == 1)//如果接收到数据则执行comdata分析操作,否则什么都不做。
    {
   Serial.println(comdata);
   Serial.println(comdata.length());
       for(int i = 0; i < comdata.length() ; i++)
       {
         if(comdata == ',')
         {
         k++;
         }
         else
         {
         numdata = numdata * 10 + (comdata - '0');
         }
       }
       comdata = String("");
       mark = 0;
       comdata="";
       long numdata = {0};

得到如下结果:
100301,286,80,183         //接收到的串口数据,准确没有问题
17                                  //接收到数据的长度,正确
301                              //100301-100000,正确
28.60                           //286*0.1, 正确
80                                 //第三个数,正确
183                               //第四个数,正确
1                                  //计数,正确
3                                  //返回k的值
100301,286,80,182      //接收到的第二组数据
17                              //正确
-12691                         //有问题
28628.60                     //看起来是上一次的286又被加上了
8080                           //上一次的80没有清空
-13426                        //有问题
2                              //计数,正确
3                                 //返回k的值
100310,286,80,181       //第三组数据
17
-24970
28628628.00
21648
9061
3
3
100301,286,80,182
17
-3411
-147652256.00
2192
17214
4
3

yenan1001 发表于 2014-8-30 21:54:06

找到问题了,自问自答:

numdata = {0}; 不可以用来清空数组numdata[]
需要用
   for(int p=0;p<4;p++)
   {numdata=0;}

高人可以解释下为啥吗?

a1039752256 发表于 2014-8-30 22:31:03

yenan1001 发表于 2014-8-30 21:54
找到问题了,自问自答:

numdata = {0}; 不可以用来清空数组numdata[]


规定是这样啊…这样写只是把numdata清零
页: [1]
查看完整版本: 已解决/ 串口读取字符串,分隔处理问题