如何在MATLAB gui中定期捕获操纵杆输入

时间:2012-05-18 03:56:33

标签: matlab user-interface timer serial-port joystick

我正在尝试在matlab中创建一个定期检查操纵杆输入状态的gui。我们的想法是采用这种输入并用它来控制伺服。到目前为止,我可以让所有东西分开工作但从不在一起。现在,微控制器只是设置为查看串行线路并根据此调整伺服(在0和180之间)。这很好用。这是我到目前为止所拥有的,

function Foo

h.fig = figure('position', [1100 30 210 60]);
h.serial = serial('COM3');
fopen(h.serial);
h.joy = vrjoystick(1);
h.timerObject = timer('TimerFcn',@JoyInput,'ExecutionMode','fixedRate',...
                    'Period',1.0);

h.buttonOne = uicontrol('style', 'pushbutton' ,...
                'position', [10 10 100 40],...
                'string' , 'Start');

set(h.buttonOne, 'callback', {@Start, h})

function h = Start(hObject, eventdata, h)
h.buttonTwo = uicontrol('style', 'pushbutton' ,...
                'position', [100 10 100 40],...
                'string' , 'Stop');
set(h.buttonTwo, 'callback', {@Stop, h});
set(h.buttonOne, 'enable', 'off');
start(h.timerObject);
%fprintf(h.serial,'150') This works as is


function h = Stop(hObject, eventdata, h)

delete(h.buttonTwo)
h = rmfield(h, 'buttonTwo');
set(h.buttonOne, 'enable', 'on');
stop(h.timerObject);
fclose(h.serial);
delete(h.serial);

function h=JoyInput(hObject, eventdata, h)
fprintf(h.serial,'150') %doesn't work
% a = 1 % this repetively outputs a=1 without the fprintf

我收到错误说

??? Error while evaluating TimerFcn for timer 'timer-17' 

Input argument "h" is undefined. 

我很擅长在matlab中使用gui,而且当我可以在其他回调函数中使用h.serial时,这意味着什么。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

您可以通过事件驱动方法获得更多运气,而不是轮询(定期检查更改)。有关一些灵感,请参阅以下链接以获取文件交换上的一些示例代码。该代码用于与3d鼠标硬件接口,但您可能会发现一般方法非常有用。

http://www.mathworks.com/matlabcentral/fileexchange/22124-3d-mouse-support-using-classes-and-events