#请问如何将串口接收到的一串数值分割截取成多个变量?#
本帖最后由 yaoyonghe 于 2014-1-16 22:47 编辑anduino下载了个模拟遥杆的蓝牙串口app,想搞个航模用接收机,
http://image.geek-workshop.com/forum/201401/14/173820tsf2scb02nr26b2m.png
串口出来的数据如下:
数据格式 : m±00±00±00±00 //m后面4组数值范围-39~+39,没有逗号分割,模拟遥杆动一下数据会刷新一次
我想将4组数分别定义为4个变量:CH1、CH2、CH3、CH4,方便后面各种舵机电调输出,但是找到的教程都是讲如何读1 个字符,什么ajson的看不懂,请大侠指点下!
感谢i7456,,,,1路油门+1路电磁舵已经好了
http://player.youku.com/player.php/sid/XNjYyNTczOTQ0/v.swf arduino精华里面学习笔记A6 新人第一次发贴测试~~
如果是要C语言的,供你参考
真的要在机器上跑最好在 sscanf 之前加点代码检查一下字符串长度、边界什么的
#include <stdio.h>
#include <string.h>
int main()
{
int CH1, CH2, CH3, CH4;
char serial_data_buf[] = "m-30+00+00+02m-30+00+00+02m-30+00+00+02";
char *p = serial_data_buf;
while (p = strstr(p, "m")) {
sscanf(++p, "%d%d%d%d", &CH1, &CH2, &CH3, &CH4);
printf("%d %d %d %d\n", CH1, CH2, CH3, CH4);
}
}
// serial.ino
String st;
void setup()
{
Serial.begin(9600);
}
void loop()
{
while(Serial.available())
{
char c = Serial.read();
//Serial.println(c);
delay(100);
if(c == 'm')
for(int i = 0; i < 4; i++)
{
st = 0;
for(int j = 0; j < 3; j++)
{
charcr = Serial.read();
st+= cr;
}
}
while(Serial.available())
Serial.read();
for(int index = 0; index < 4; index++)
Serial.println(st.toInt());
}
} i7456 发表于 2014-1-14 00:38 static/image/common/back.gif
:handshake感谢!.....
要是有个注识说明下更好! windaoo 发表于 2014-1-13 23:49 static/image/common/back.gif
新人第一次发贴测试~~
如果是要C语言的,供你参考
这段好似更牛...good! i7456 发表于 2014-1-14 00:38 static/image/common/back.gif
反回这样的,,似乎不是按我给的输入格式写的?。。。(波特率已改) yaoyonghe 发表于 2014-1-14 12:08 static/image/common/back.gif
反回这样的,,似乎不是按我给的输入格式写的?。。。(波特率已改)
波特率是9600;
输入框中输入:m+10+20+30-40
返回:
10
20
30
-40
yaoyonghe 发表于 2014-1-14 10:20 static/image/common/back.gif
感谢!.....
要是有个注识说明下更好!
太简单,没办法注释了 能把发送端 代码 也发上来么? 本帖最后由 yaoyonghe 于 2014-1-14 17:44 编辑
pww999 发表于 2014-1-14 13:47 static/image/common/back.gif
能把发送端 代码 也发上来么?
原码没有哦,是田中鬼子写的APP....play上搜 BT indoorControl
喜欢它界面够简结,无多余的附加功能 本帖最后由 friskit 于 2014-1-15 22:09 编辑
如果发送的信息不为了给人看,建议你最好按照二进制格式发送。。。规定好数据发送格式。这样对数据的发送和解析都非常方便。。。。否则数据解析那头要做的工作太多了!!!
如果你发送的数据的“位格式”是对其的。。例如数字都是00-99这种两位数啊神马的,还是比较好实现的。。。因为收到的数据就是一串字符串数组,固定的位数都有固定的意图,写死了就好
但是如果牵涉到位数不对齐就又麻烦了。。。这时候有两种方法。是以前编译原理课上学到过的方法:
1,递归下降子程序。。。
2,有限状态机。
(反正就是个词法分析器。。。) 各种不懂:(:(:( 各种关注,各种学习 i7456 发表于 2014-1-14 13:33 static/image/common/back.gif
太简单,没办法注释了
原来这样........看了一堆贴子,与'笔记A6'最大区别是用了.toInt() 这个函数,直接将 string字符转换成int数据
页:
[1]
2