matlab解析单片机发送数据的一种简单方法

matlab解析单片机发送数据的一种简单方法

经常使用单片机的同学,应该会经常面对这样一种情况,那就是对单片机采回的某些数据绘图、再处理等应用。大家经常用的两款软件,比如匿名的地面站,它通过固定的数据通讯协议,将数据从下位机传入上位机,上位机根据协议格式对数据解析,反之也一样。另外一种便是以UchartLv2为代表的文本分析类。在单片机内通过printf将数据转换为文本打印出,根据文本数据的前缀,例如“A123”这样的格式,以“A”索引数据,去掉A,将数字部分由文本转换为数据类型。很难说二者谁更加优秀,如果是电脑与单片机间存在频繁的数据交换,那么匿名的方式更加的稳定高效,因为其数据协议在单片机中更容易解析。而只需要单片机单方面上传数据给电脑时UchartLv2是更简单,更高效,更加轻量的。
所以本文章也主要讲述单片机大方面大量数据上传给电脑时,如何使用matlab对其进行解析。

首先在单片机中,按照pritnf(“A%d\r\n”,x)这样的格式将你希望发送的数据通过串口发送到电脑,通过串口助手查看,并将文本保存至一个.txt文档中(有的串口助手能直接保存为文档,有的需要你在接收文本框中将其复制粘贴进.txt中)。而后代码如下

// An highlighted block
clear;
clf;
[init]=textread('Chaser_data.txt',' %s ',100000);%读取.txt文件,将文本转换为cell
a=1;
b=1;
c=1;
d=1;
e=1;
%将文本转化为double型
for x=1:size(init)
    init_data=init{x,1};%从cell中提取出一个,该数据类型为char数组,对其进行解析
    if init_data(1,1)=='A'%查看首字母是否为需要的
        if ~isnan(str2double(init_data(1,2:length(init_data))))%对除首字母之外的char字符进行转换为double类型,若转化出NAN,即源数据有误,那么便舍弃。
            A_ADC(1,a)=str2double(init_data(1,2:length(init_data)));%若无误,则将其复制到某个你规定的矩阵中。
            a=a+1;
        end
    end
    if init_data(1,1)=='B'
        if ~isnan(str2double(init_data(1,2:length(init_data))))
            B_ADC(1,b)=str2double(init_data(1,2:length(init_data)));
            b=b+1;
        end
    end
    if init_data(1,1)=='C'
        if ~isnan(str2double(init_data(1,2:length(init_data))))
            C_ADC(1,c)=str2double(init_data(1,2:length(init_data)));
            c=c+1;
        end
    end
    if init_data(1,1)=='E'
        if ~isnan(str2double(init_data(1,2:length(init_data))))
            FMR_ADC(1,e)=str2double(init_data(1,2:length(init_data)));
            e=e+1;
        end
    end
end

以上列举了多个数据的共同解析,当然你也可以用诸如“ABCD”这样更长的字符串作为前缀,只是需要改一些地方即可

for x=1:size(init)%讲文本转化为double型
    init_data=init{x,1};
    if length(init_data)>4%确定该char数组的长度超过你前缀的长度,否则在进行后续的计算时可能会报超出数组索引的错误
        if init_data(1,1:4)=="ABCD"
            if ~isnan(str2double(init_data(1,5:length(init_data))))
                A(1,a)=str2double(init_data(1,5:length(init_data)));
                a=a+1;
            end
        end
    end
 end

以上便是一个简单的文本数据进行解析转换的简单示例,你可以用解析出的数据,做任何你想做的事。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值