极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12991|回复: 6

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

[复制链接]
发表于 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);
回复

使用道具 举报

发表于 2016-7-20 13:03:58 | 显示全部楼层
特定的格式,尽量是两个特定字符开头,中间为想要的数据,最后是校验,逐字节读出并判断。
"AA11114"两个A作为开头,1111为数据,4为校验。这是针对特定长度的字符串进行的。

还有很多方法,你可以自己上网查找。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-20 13:51:10 | 显示全部楼层
164335413 发表于 2016-7-20 13:03
特定的格式,尽量是两个特定字符开头,中间为想要的数据,最后是校验,逐字节读出并判断。
"AA11114"两个A ...

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

使用道具 举报

发表于 2016-7-20 14:22:55 | 显示全部楼层
dreamlang123 发表于 2016-7-20 13:51
我想请问的是~如何实现逐个对比?就是我怎么实现查看没一个字符呢?

Serial.read() 每读取一个字节就进行判断,分支结构。
  1. if(Serial.available()) //**************接收命令
  2.   {
  3.     if(Serial.read() == '$') //Start Flag
  4.     {
  5.       while(!Serial.available())//wait the next command
  6.       {}
  7.       switch(Serial.read()) //
  8.       {
  9.         case 'M': //Action executed command表情控制
  10.           buf = readOneDigit(); //whether have Action
  11.           if(buf != ERR)
  12.           {
  13.             motionNumber = buf;
  14.             mode = 'M';
  15.             pos_L =800;
  16.             Serial.print("$M");
  17.             Serial.print(motionNumber);
  18.           }
  19.           else
  20.           {
  21.             Serial.print("$EM"); //action command error
  22.           }
  23.         break;
  24.         case 'S': //眼珠随机表情停止
  25.           buf = readOneDigit(); //whether have Action
  26.           if(buf != ERR)
  27.           {
  28.             randFlag = buf;
  29.             mode = 'S';
  30.             pos_L =100;
  31.             Serial.print("$S");
  32.             Serial.print(randFlag);
  33.           }
  34.           else
  35.           {
  36.             Serial.print("$ES"); //stop command error
  37.           }
  38.         break;

  39.         default:
  40.           Serial.print("$E");
  41.         break;
  42.       }
  43.     }         
  44.   }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-20 14:35:28 | 显示全部楼层
164335413 发表于 2016-7-20 14:22
Serial.read() 每读取一个字节就进行判断,分支结构。

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

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

还是谢谢,辛苦。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-20 14:35:41 | 显示全部楼层
164335413 发表于 2016-7-20 14:22
Serial.read() 每读取一个字节就进行判断,分支结构。

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

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

还是谢谢,辛苦。
回复 支持 反对

使用道具 举报

发表于 2016-7-20 14:48:03 | 显示全部楼层
dreamlang123 发表于 2016-7-20 14:35
谢谢大神辛苦~ 表示不太能看的懂。。。我慢慢研究。。
我的最终目的说白了就是发送一串密码类似于AA1231 ...

上面发的只是个例子,我发送的是$M1 $M2...这样的字符串,$作为起始,后面的是命令,没加校验。一般有校验的话也只是将前面的字符串进行逻辑运算的操作。
如果知道A是开头,那判断完A之后,就连续读出6个字符,也就是123123,然后再和你需要做判断的地方进行对比。
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-20 06:18 , Processed in 0.045094 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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