极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: zerglingbug

arduino如何分割字符串

[复制链接]
发表于 2014-4-11 15:00:54 | 显示全部楼层
“1,2,3” 一个字符串  2个逗号  3个数字
for循环中2个逗号提出两个数字。最后一个逗号位数+1到最后一位不就是最后一个数字了吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-11 15:03:14 | 显示全部楼层
麽麽茶㊣ 发表于 2014-4-11 15:00
“1,2,3” 一个字符串  2个逗号  3个数字
for循环中2个逗号提出两个数字。最后一个逗号位数+1到最后一位不 ...

因为数据可能不是一位的 也许是11,22,33,44也有可能是11111,2,3,4所以可能不能用位数来判断啊
回复 支持 反对

使用道具 举报

发表于 2014-4-11 22:37:02 | 显示全部楼层
学习一下。。。我也被这个事情烦恼着
回复 支持 反对

使用道具 举报

发表于 2014-4-12 00:04:06 | 显示全部楼层
maxims 发表于 2014-4-11 22:37
学习一下。。。我也被这个事情烦恼着

楼主可能基础不太好,我今晚刚做了个无线头追,用的无线串口传输的,上代码
  1. #include <Servo.h>
  2. #define SERIAL_BAUD 9600
  3. Servo servoPan;
  4. Servo servotill;
  5. char data[10];
  6. int index,panAngle,tiltAngle;
  7. char *p;
  8. void setup() {
  9.   // put your setup code here, to run once:
  10.   Serial.begin(SERIAL_BAUD);
  11.   servoPan.attach(9);
  12.   servotill.attach(10);
  13. }

  14. void loop() {
  15.   // put your main code here, to run repeatedly:
  16.   memset(data,0,10);
  17.   index=0;
  18.   p=NULL;
  19.   while(Serial.available())
  20.   {
  21.     data[index++]=Serial.read();
  22.     delay(10);
  23.   }
  24.   
  25.   if(data[0]=='%')
  26.     {
  27.         
  28.         p=strtok(data+1,";");
  29.         if(p==NULL)
  30.             return;
  31.             
  32.         panAngle = atoi(p);
  33.         
  34.         p=strtok(NULL,";");
  35.           if(p==NULL)
  36.             return;
  37.          
  38.         tiltAngle = atoi(p);        
  39.         servoPan.write((int)panAngle);
  40.         servotill.write((int)tiltAngle);
  41.     }
  42. }
复制代码
我这里串口输入的数据格式是 %123;55
前面一个%开头表示数据开始,每个数据使用分号分割,我这里传的是用字符标识的整形数据,所以要把字符串123  55 转化成整形
回复 支持 反对

使用道具 举报

发表于 2014-4-12 10:16:06 | 显示全部楼层
转角 发表于 2014-4-12 00:04
楼主可能基础不太好,我今晚刚做了个无线头追,用的无线串口传输的,上代码我这里串口输入的数据格式是 % ...

我的数据是HEX格式的
数据格式内容一般遵循
  1. 7F 00 # 10 80 01 # 2F # 2F # 00 # 7F

  2. 这里的#号是不固定长度和内容的数值,其他的数值是固定下了的。
复制代码
看了一下你的代码。
我对自己的项目有以下的问题解决的比较乱
1、由于整个长度不确定,我该如何判断我的数据是否接收完整?
2、如何有效的分开各个数组?
3、最终,我是想学习如何有效的处理串口接收和发送的数据
回复 支持 反对

使用道具 举报

发表于 2014-4-12 13:31:13 | 显示全部楼层
maxims 发表于 2014-4-12 10:16
我的数据是HEX格式的
数据格式内容一般遵循看了一下你的代码。
我对自己的项目有以下的问题解决的比较乱 ...

1。你发送端发送的时候知道不知道数据有多少?如果知道,那你就可以先发送个长度数据,然后根据长度去获取数据
2.制定通信协议
3.上面两条会了就会了
总结,对于复杂数据的传输,一定要按照一定的协议格式进行传输和解析
回复 支持 反对

使用道具 举报

发表于 2014-4-12 16:23:42 | 显示全部楼层
转角 发表于 2014-4-12 13:31
1。你发送端发送的时候知道不知道数据有多少?如果知道,那你就可以先发送个长度数据,然后根据长度去获取 ...

1、我还真不知道有多少,因为发送端是人家的,不是我的。
2、我也想重新定制过协议(一边打字一边骂那个写协议的人),但是这牵扯太大了,不能够啊~
回复 支持 反对

使用道具 举报

发表于 2014-4-12 18:41:44 | 显示全部楼层
maxims 发表于 2014-4-12 16:23
1、我还真不知道有多少,因为发送端是人家的,不是我的。
2、我也想重新定制过协议(一边打字一边骂那个 ...

那确实不好办,那只能把数据先接收进来进行解析了。容错处理上多下点功夫吧
回复 支持 反对

使用道具 举报

发表于 2014-4-12 19:13:15 | 显示全部楼层
ajson库吧,支持结构化数据,坛子里就有,我正在用。很方便。
回复 支持 反对

使用道具 举报

发表于 2014-4-13 11:46:13 | 显示全部楼层
zerglingbug 发表于 2014-4-11 15:03
因为数据可能不是一位的 也许是11,22,33,44也有可能是11111,2,3,4所以可能不能用位数来判断啊

我知道。。。你看我的例子吧。。烧写实验一下就知道了。完全符合你的要求。
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-10 05:20 , Processed in 0.035911 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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