用Matlab读取与Arduino连接的串口数据(uint)。1.用fscanf,fgetl,fread哪个更快?2.如何回调函数读取?

现在Arduino每1ms用println传输1个unsignedint到串口。我的matlab程序用的是whileloop不断fscanf读取,以收集特定数量数据。问题... 现在Arduino每1ms用println传输1个unsigned int到串口。我的matlab程序用的是while loop不断fscanf读取,以收集特定数量数据。问题是无法达到1ms的读取速度,我写的arduino测试程序将被传输的int按秒递增,譬如在第2000到2999个数据处看到的数值应该是3;49000到49999个处应该是50。 以此观测1ms数据传输有明显延迟。而我尝试2ms一个int发送,用同样的matlab程序读取就很顺畅,实验传输结果完全没有问题。
可是,我的项目指导认为我做的非常糟糕,提出三个问题
fgetl比fscanf快,应尝试fgetl, 我这个方面一直未找到理论和研究报告做佐证,希望有经验的高人指导
1ms会出现延迟和数据传输问题,但是既然我无法给出是什么问题,2ms可能会有同样的问题,所以我们不能把传输速率降到用2ms(依然足够应付我们的项目) 不知道是不是这样?我这个逻辑有点混乱被说的。
他提出用回调函数读取(每4 byte一个event读取一次),以下是我原来的code,他认为这个比回调函数的效率低
----------------------------------------------------------------------------------------------------
。。。。。初始化程序省略
while x<10000; if arduino.BytesAvailable > 0; x = x + 1; data1 = fscanf(arduino);
end
end
但我也未找到佐证说回调函数读取效率高,并且在重写程序用回调函数时,出现
BytesAvailableFcnMode cannot be set while OBJ is open.的警告
以下是我新的code:
---------------------------------------------------------------------------------------------------
.......初始化程序省略
fopen(arduino);
arduino.BytesAvailableFcnMode = 'byte'; arduino.BytesAvailableFcnCount = 4; arduino.BytesAvailableFcn = @mycallback; --------------------------------------------------------------------------------------------------
function mycallback(obj,event) data1 = fscanf(arduino); temp = str2num(data1); y(x) = temp;end我检索了一下,bytesavailable确实只能在fclose后才能用,但是object.BytesAvailable这个指令可以在fopen时用,那如何用这个指令来用callback/event 读取数据呢?

很长,能详细回答就谢谢啦。
写错了上面 2000到2999个数据处看到的数值应该是2;49000到49999个处应该是49
问题很多,主要的两个问题就是在标题里写了。如果能回答也给采纳
展开
 我来答
若以下回答无法解决问题,邀请你更新回答
roger8254
2013-08-06
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
不知道arduino端的数据发送是怎么做的,还有波特率设的是多少?
115200试试看
追答
试试看在回调函数中尽量少做动作,放到serial函数里面。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式