查看: 533|回复: 0|关注: 0

[未答复] 蓝牙转串口的无线传输加速度传感器与simulink怎么实时通信

[复制链接]

新手

5 麦片

财富积分


050


1

主题

9

帖子

0

最佳答案
  • 关注者: 1
发表于 2018-9-5 21:33:47 | 显示全部楼层 |阅读模式
使用simulink里的S函数编写了一个采集的程序,做成了自定义模块放在simulink模型里运行,由于其蓝牙转的串口(本质是虚拟串口),simulink自带的serial receive模块只能识别出来的是real com口,所以就不能使用自带的模块进行数据通信。在自己编写的S函数中使用了Bluetooth的object,由于每个采样周期对S函数的调用,object的值就要进行存储,我这里直接使用的save命令,运行未出现错误但是运行结果没两次的接收到的数据值都是间隔了很长的时间,我考虑到是save命令的问题,但是不知道应该怎么办了,求大神指点,不胜感激。matlab版本64位2018a
function [sys,x0,str,ts] = bluetoothToSim(t,x,u,flag)
switch flag,
  case 0,
    [sys,x0,str,ts,]=mdlInitializeSizes;
    bt = Bluetooth('HC-06',1);fopen(bt);
    save a bt;
  case 3,
    sys=mdlOutputs();
  case {1,2,4,9}
    sys=[];
  otherwise
    DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 9;
sizes.NumInputs      = 1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0  = [];
str = [];
ts  = [-1 0];
simStateCompliance = 'UnknownSimState';

function sys=mdlOutputs()
%通过蓝牙连接传感器,读取数据并转换为
a=zeros(3,1);
w=a;
A=w;
% persistent p;
% if isempty(p)
%     p=1;
%     bt = Bluetooth('HC-06',1);fopen(bt);
%     save a bt;
% end
    load a bt
    Head = fread(bt,2,'uint8');%一次读取两个字节
    if (Head(1)==uint8(85))
      switch(Head(2))
        case 81
            a = fread(bt,3,'int16')/32768*16 ; %加速度   
            End = fread(bt,3,'uint8');
        case 82
            w = fread(bt,3,'int16')/32768*2000 ; %角速度   
            End = fread(bt,3,'uint8');
        case 83
            A = fread(bt,3,'int16')/32768*180; %角度
            End = fread(bt,3,'uint8');%
       end      
    end
  save a bt;
  sys(1) = a(1);
  sys(2) = a(2);
  sys(3) = a(3);
  sys(4) = w(1);
  sys(5) = w(2);
  sys(6) = w(3);
  sys(7) = A(1);
  sys(8) = A(2);
  sys(9) = A(3);

% end mdlOutputs


框图

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

本版积分规则

关闭

站长推荐上一条 /2 下一条

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