dreamlang123 发表于 2016-7-20 10:33:38

请问如何确认字符串每一位?

下面的代码可以把字符串记录下来,比如我发送一个A_1111,然后对比是不是A_1111.
但是我想做的更加完善一些比如先判断第一位为A 然后后面一串为1111。
请问如何实现这样的功能?就是想读取这串字符的每一位 然后对每一位进行分别对比和记录。

另外想问一下,最近开始接触ARDUINO原来C也没怎么学,想从头开始好好学习一下,请问有什么推荐的教程或者书可以学起来的吗?真心想学好


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

   }

   if(comdata.length()> 0){
   if (comdata=="A_1111")
   {
         Serial.println("Right");}
         digitalWrite(ledPin1,HIGH);
      
      delay (5000);

164335413 发表于 2016-7-20 13:03:58

特定的格式,尽量是两个特定字符开头,中间为想要的数据,最后是校验,逐字节读出并判断。
"AA11114"两个A作为开头,1111为数据,4为校验。这是针对特定长度的字符串进行的。

还有很多方法,你可以自己上网查找。

dreamlang123 发表于 2016-7-20 13:51:10

164335413 发表于 2016-7-20 13:03 static/image/common/back.gif
特定的格式,尽量是两个特定字符开头,中间为想要的数据,最后是校验,逐字节读出并判断。
"AA11114"两个A ...

我想请问的是~如何实现逐个对比?就是我怎么实现查看没一个字符呢?

164335413 发表于 2016-7-20 14:22:55

dreamlang123 发表于 2016-7-20 13:51 static/image/common/back.gif
我想请问的是~如何实现逐个对比?就是我怎么实现查看没一个字符呢?

Serial.read() 每读取一个字节就进行判断,分支结构。if(Serial.available()) //**************接收命令
{
    if(Serial.read() == '$') //Start Flag
    {
      while(!Serial.available())//wait the next command
      {}
      switch(Serial.read()) //
      {
      case 'M': //Action executed command表情控制
          buf = readOneDigit(); //whether have Action
          if(buf != ERR)
          {
            motionNumber = buf;
            mode = 'M';
            pos_L =800;
            Serial.print("$M");
            Serial.print(motionNumber);
          }
          else
          {
            Serial.print("$EM"); //action command error
          }
      break;
      case 'S': //眼珠随机表情停止
          buf = readOneDigit(); //whether have Action
          if(buf != ERR)
          {
            randFlag = buf;
            mode = 'S';
            pos_L =100;
            Serial.print("$S");
            Serial.print(randFlag);
          }
          else
          {
            Serial.print("$ES"); //stop command error
          }
      break;

      default:
          Serial.print("$E");
      break;
      }
    }         
}

dreamlang123 发表于 2016-7-20 14:35:28

164335413 发表于 2016-7-20 14:22 static/image/common/back.gif
Serial.read() 每读取一个字节就进行判断,分支结构。

谢谢大神辛苦~ 表示不太能看的懂。。。我慢慢研究。。
我的最终目的说白了就是发送一串密码类似于AA123123
我需要CHECK 开头为AA然后把123123保存并记录在系统中和下一次其他输入的对比。

没怎么玩过ARDUINO也没太学过C++ 好烦躁,找了一天代码的理论了,看的云里雾里, 现在回按照字符分隔字符串了,但是还是不能回记录分隔符后面的字符。比如A,123123 能判断,在第几位 但是不知道如何把后面123123记录下来:'(

还是谢谢,辛苦。

dreamlang123 发表于 2016-7-20 14:35:41

164335413 发表于 2016-7-20 14:22 static/image/common/back.gif
Serial.read() 每读取一个字节就进行判断,分支结构。

谢谢大神辛苦~ 表示不太能看的懂。。。我慢慢研究。。
我的最终目的说白了就是发送一串密码类似于AA123123
我需要CHECK 开头为AA然后把123123保存并记录在系统中和下一次其他输入的对比。

没怎么玩过ARDUINO也没太学过C++ 好烦躁,找了一天代码的理论了,看的云里雾里, 现在回按照字符分隔字符串了,但是还是不能回记录分隔符后面的字符。比如A,123123 能判断,在第几位 但是不知道如何把后面123123记录下来:'(

还是谢谢,辛苦。

164335413 发表于 2016-7-20 14:48:03

dreamlang123 发表于 2016-7-20 14:35 static/image/common/back.gif
谢谢大神辛苦~ 表示不太能看的懂。。。我慢慢研究。。
我的最终目的说白了就是发送一串密码类似于AA1231 ...

上面发的只是个例子,我发送的是$M1 $M2...这样的字符串,$作为起始,后面的是命令,没加校验。一般有校验的话也只是将前面的字符串进行逻辑运算的操作。
如果知道A是开头,那判断完A之后,就连续读出6个字符,也就是123123,然后再和你需要做判断的地方进行对比。
页: [1]
查看完整版本: 请问如何确认字符串每一位?