用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

点击进入授权页面

只需一步,快速开始

  • QQ空间
  • 回复
  • 收藏
  • TA的每日心情
    郁闷
    2018-1-21 16:38
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    参考了诸多大佬的成功经验,编写了一个程序,功能是:
    从串口输入一组各位数字“N,N”,经过程序计算后输出结果。
    由于未知原因,每次输入的数字都会与之前输入的数字叠加,之后再进入计算,试过一些方法清零,但是没有效果。

    ——————程序分割线——————


    String comdata = "";
    int numdata[2] = {0},mark = 0;
    void setup()
    {
      Serial.begin(9600);
    }

    void loop()
    {
      int j = 0;
      int i = 0;
      while (Serial.available() > 0)
      {
        comdata += char(Serial.read());
        delay(2);
        mark = 1;
      }
      if(mark == 1)
      {
        Serial.println(comdata);
        Serial.println(comdata.length());

        for(i = 0; i < comdata.length()-1 ; i++)
        {
          if(comdata == ',')
          {
            j++;
          }
       else
          {
            //numdata[j] = numdata[j] * 10 + (comdata - '0');
          numdata[j] += (comdata - '0');
          }
        }

        i= 0;//尝试清零
        j=0;//尝试清零
        comdata = String("");
    Serial.print(numdata[0]);
    Serial.print("_");
    Serial.println(numdata[1]);
    Serial.print("pos1{");
            if(numdata[0]<=4)//计算第一个动作
          {
            int a = numdata[0]*15;
            Serial.print(a);
            Serial.print(",0,");
            }
            else if(numdata[0]=6)
            {
              Serial.print(135);
              Serial.print(",1,");
              }
           else if(numdata[0]=5)
            {
              Serial.print(45);
              Serial.print(",1,");
              }//计算第一个动作,完成
    if(numdata[1]<=4)//计算第二个动作
          {
            int b = numdata[1]*17;
            Serial.print(b);
            Serial.print(",0,");
            }
            else if(numdata[1]=6)
            {
              Serial.print(137);
              Serial.print(",1,");
              }
           else if(numdata[1]=5)
            {
              Serial.print(47);
              Serial.print(",1,");
              }//计算第二个动作,完成
    Serial.println("}");
       j = 0;  //尝试清零
       i = 0 ;//尝试清零
        mark = 0;
      }
    }


    ——————程序分割线——————

    每次输入的数据都是“1,1”,在程序中转化为{1,1}的数组,
    然而计算过程都是根据叠加后的结果,即{1++,1++}计算而得的。

    ————输出分割线——————

    1,1      //第一次输入后显示输入字符

    4      //显示输入字符长度
    1_1    //分析输入字符后的到的数组的前两个数,也是计算过程所需的数值
    pos1{15,0,17,0,}      //输出计算结果
    1,1    //第2次输入后显示输入字符

    4
    2_2     //分析输入字符后的到的数组的前两个数,也是计算过程所需的数值,数值为两次输入的叠加,叠加是分别计算的
    pos1{30,0,34,0,}      //输出计算结果,计算过程使用的是叠加后的数值,计算过程本身正确
    1,1

    4
    3_3
    pos1{45,0,51,0,}
    1,1

    4
    4_4
    pos1{60,0,68,0,}



    ——————输出分割线——————

    还请各位大佬帮忙看看到底问题出在哪里?

    谢谢!
        comdata = ""; 我一般都这么写
    打赏作者鼓励一下!
    wwwusr 发表于 2018-1-12 23:53
    comdata = ""; 我一般都这么写

    额,指哪一个位置的?
    PETER.PAN 发表于 2018-1-13 09:16
    额,指哪一个位置的?

       comdata = String("");  这里
       comdata = "";
    打赏作者鼓励一下!
    wwwusr 发表于 2018-1-13 18:43
    comdata = String("");  这里
       comdata = "";

    并没有用,数据依然叠加,而且第二个数据也无法读出了!
    ——————串口显示分界线——————
    1,1
    3
    1_0
    pos1{15,0,0,0,}
    1,1
    3
    2_0
    pos1{30,0,0,0,}
    1,1
    3
    3_0
    pos1{45,0,0,0,}
    1,1
    3
    4_0
    pos1{60,0,0,0,}
    ——————串口显示分界线——————
    ...这代码看着真累 bad code,去学习下怎么读取字符串和字符串分割方法
    看作者这么辛苦的份上,打赏鼓励一下!
    发新帖
    发表评论
    高级模式  
    您需要登录后才可以回帖 登录 | 立即注册  
    关闭

    推荐主题 上一条 /2 下一条