如何使蓝牙通信的第二春?

4视图(30天)
你好!我目前开发一个MATLAB程序设计应用程序连接到蓝牙设备和情节从设备接收到的数据的模拟输入。应用程序主要功能的代码,但是我面临一个问题,应用程序不会尝试重新连接到蓝牙设备,如果应用程序和设备之间的连接丢失。
为了解决这个问题,我实现了一个代码来检查连接状态并尝试重新连接断开的情况下的设备。下面提供的代码片段。
有什么,我犯了一个错误呢?
它仍然没有重新连接后失去联系。
它将非常感激如果有人谁能给我一个线索。
我将把应用程序以防。
非常谢谢。
方法(访问=私人)
函数src onDataRecieve(应用)
app.timer =计时器(“ExecutionMode”,“fixedRate”,“时间”,1“TimerFcn”@ (~ ~)checkDataReceived (app));
app.ble =祝福(app.BLEAddressEditField.Value);
开始(app.timer);
函数checkDataReceived(应用)
%得到最后收到包的时间戳
lastTimestamp = datetime (app.bleData.timestamp (app.bleData。统计,:));
%接收报文检查最后超过1秒之前
如果(datetime (“现在”)- lastTimestamp) >秒(1)
%停止计时器
停止(app.timer);
%从BLE设备断开
断开(app.ble);
%连接到BLE设备
app.ble =祝福(app.BLEAddressEditField.Value);
开始(app.timer);
结束
结束
%
(数据、时间戳)=阅读(src,“古老的”);
时间戳。格式=“yyyy-MM-DD hh: mm: ss.SSS”;
数= app.bleData.count + 1;
如果数> =大小(app.bleData.rx, 1)
app.bleData。rx(计数+ 100,app.bleData.MTUlength) = 0;
aa =字符串([1]100年);
app.bleData。时间stamp = [app.bleData.timestamp; aa];
结束
如果app.bleData.leadigZeroCut = = true%
app.bleData.rx数据(统计:)=(2:结束);
其他的
app.bleData.rx(计数:)=数据;
结束
app.bleData。数=计数;
app.RecievedPacketsEditField。值=计数;
app.bleData.timestamp(计数,1)=时间戳;
:data_1 = app.bleData.rx(数);
app.ChannelPktSizeEditField。值= app.bleData.MTUlength / app.ChannelCountSpinner.Value;
开关app.ChannelCountSpinner.Value
情况下1
app.bleData.channel0(计数:)= data_1;
情况下2
app.bleData.channel0(计数:)= data_1(2:2:结束);
app.bleData.channel1(计数:)= data_1(1:2:结束);
情况下3
app.bleData.channel0(计数:)= data_1(三3:结束);
app.bleData.channel1(计数:)= data_1(2:3:结束);
app.bleData.channel2(计数:)= data_1(1:3:结束);
情况下4
app.bleData.channel0(计数:)= data_1(4:4:结束);
app.bleData.channel1(计数:)= data_1(3:4:结束);
app.bleData.channel2(计数:)= data_1(2:4:结束);
app.bleData.channel3(计数:)= data_1(1:4:结束);
结束
如果国防部(计数,app.axes.updateSpeed) = = 0
app.updateFigure;
如果数> app.XCountSpinner.Value%最初2
如果比较字符串(app.AutoUpdatePlotSwitch.Value“上”)
xlim(应用程序。((count-app.XCountSpinner.Value) * app.bleData UIAxes,。MTUlength,数* app.bleData.MTUlength] / app.ChannelCountSpinner.Value);%最初2
xlim(应用程序。((count-app.XCountSpinner.Value) * app.bleData UIAxes_2,。MTUlength,数* app.bleData.MTUlength] / app.ChannelCountSpinner.Value);%最初2
xlim(应用程序。((count-app.XCountSpinner.Value) * app.bleData UIAxes_3,。MTUlength,数* app.bleData.MTUlength] / app.ChannelCountSpinner.Value);%最初2
xlim(应用程序。((count-app.XCountSpinner.Value) * app.bleData UIAxes_4,。MTUlength,数* app.bleData.MTUlength] / app.ChannelCountSpinner.Value);%最初2
结束
结束
结束
结束
%为策划~ ~ ~剩下的代码
结束

答案(1)

书中
书中 2023年4月5日
你好。
代码的问题可能与你开始“onDataRecieve”内部的定时器功能。这个函数将调用每次收到一个新的数据包。所以,这意味着你将创建多个计时器,这可能会相互干扰。
我建议把定时器创建和启动“onDataRecieve”以外的功能,所以你只创建并启动计时器。你可以在“startupFcn”功能或任何其他函数初始化你的应用。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!