필터 지우기
필터 지우기

How can i change a GUI toggle state using values from a separate function?

조회 수: 2 (최근 30일)
I am creating a flight simulator GUI and I would like to change the state of a toggle switch based off of the status of a joystick button. If the joystick button is depressed (returns a value of '1'), I would like the toggle switch to also represent that state ('Value', 'Max'). How would I go about retrieving the joystick value within the toggle button call back function(tb1_Callback)? Any help would be greatly appreciated. Thanks!!
joy = vrjoystick(1);
while true
[axes, buttons, povs] = read(joy);
roll = (180+(axes(1)*180))/2;
pitch = (180-(axes(2)*180))/2;
yaw = (180+(axes(3)*180))/2;
throttle = (180-(axes(4)*180))/2;
trigger = buttons(1);
HUD = povs;
bar(handles.axes1, (axes(2)*100), 1, 7,'y');
set(handles.axes1, 'XLim', [-103.5 103.5]);
set(handles.axes1, 'YLim', [0 1]);
set(handles.axes1, 'YTick', [0:5:5]);
set(handles.axes1, 'XTick', [-100:25:100]);
set(handles.axes1, 'Color', [.75 .75 .75]);
title(handles.axes1, 'ELEVATOR', 'FontSize', 10, 'FontWeight', 'bold');
bar(handles.axes2, (axes(1)*100), 1, 7,'y');
set(handles.axes2, 'XLim', [-103.5 103.5]);
set(handles.axes2, 'YLim', [0 1]);
set(handles.axes2, 'YTick', [0:1:1]);
set(handles.axes2, 'XTick', [-100:25:100]);
set(handles.axes2, 'Color', [.75 .75 .75]);
title(handles.axes2, 'ALERION', 'FontSize', 10, 'FontWeight', 'bold');
bar(handles.axes3, (axes(3)*100), 1, 7, 'y');
set(handles.axes3, 'XLim', [-103.5 103.5]);
set(handles.axes3, 'YLim', [0 1]);
set(handles.axes3, 'YTick', [0:1:1]);
set(handles.axes3, 'XTick', [-100:25:100]);
set(handles.axes3, 'Color', [.75 .75 .75]);
title(handles.axes3, 'RUDDER', 'FontSize', 10, 'FontWeight', 'bold');
barh(handles.axes4,((100-(axes(4)*100))/2),1, 7, 'g');
set(handles.axes4, 'XLim', [0 1]);
set(handles.axes4, 'YLim', [-3.5 103.5]);
set(handles.axes4, 'XTick', [0:5:5]);
set(handles.axes4, 'YTick', [0:25:100]);
set(handles.axes4, 'Color', [.75 .75 .75]);
title(handles.axes4, 'THROTTLE', 'FontSize', 8, 'FontWeight', 'bold');
barh(handles.axes5,((100-(axes(4)*100))/2),1, 7, 'g');
set(handles.axes5, 'XLim', [0 1]);
set(handles.axes5, 'YLim', [-3.5 103.5]);
set(handles.axes5, 'XTick', [0:5:5]);
set(handles.axes5, 'YTick', [0:25:100]);
set(handles.axes5, 'Color', [.75 .75 .75]);
title(handles.axes5, 'THROTTLE', 'FontSize', 8, 'FontWeight', 'bold');
barh(handles.axes6,((100-(axes(4)*100))/2),1, 7, 'g');
set(handles.axes6, 'XLim', [0 1]);
set(handles.axes6, 'YLim', [-3.5 103.5]);
set(handles.axes6, 'XTick', [0:5:5]);
set(handles.axes6, 'YTick', [0:25:100]);
set(handles.axes6, 'Color', [.75 .75 .75]);
title(handles.axes6, 'FLAPS', 'FontSize', 8, 'FontWeight', 'bold');
barh(handles.axes7,((100-(axes(4)*100))/2),1, 7, 'g');
set(handles.axes7, 'XLim', [0 1]);
set(handles.axes7, 'YLim', [-3.5 103.5]);
set(handles.axes7, 'XTick', [0:5:5]);
set(handles.axes7, 'YTick', [0:25:100]);
set(handles.axes7, 'Color', [.75 .75 .75]);
title(handles.axes7, 'FLAPS', 'FontSize', 8, 'FontWeight', 'bold');
a.servoWrite(3, round(roll));
a.servoWrite(5, round(pitch));
a.servoWrite(6, round(yaw));
a.servoWrite(9, round(throttle));
if(HUD == 90 || HUD == 45 || HUD == 135)
a.servoWrite(10, 0);
else a.servoWrite(10, 90);
end
if(HUD == 270 || HUD == 315 || HUD == 225)
a.servoWrite(10, 180);
end
if(HUD == 0 || HUD == 45 || HUD == 315)
a.servoWrite(11, 0);
else a.servoWrite(11, 90);
end
if(HUD == 180 ||HUD == 135 || HUD == 225)
a.servoWrite(11, 180);
end
pause(.001);
a.flush;
if(buttons(12) == 1 && buttons(11) ==1 && buttons(2) == 1)
delete(instrfind({'Port'},{'COM4'}));
delete(instrfind('Type', 'serial'));
close all
clc
break
end
end
% --- Executes on button press in tb1. function tb1_Callback(hObject, eventdata, handles)
% Hint: get(hObject,'Value') returns toggle state of tb1

채택된 답변

alex korzaniewski
alex korzaniewski 2013년 4월 4일
In hind sight this was a bit of a naive question and a little bit of playing around got me the desired result. I had to place the code within the 'while' loop which read in joystick data. In my case b7 corresponds with button 7 on the joystick.
if (b7 == 1);
set(handles.tb7, 'Value', 1);
set(handles.tb7, 'BackgroundColor', 'y');
else (b7 == 0);
set(handles.tb7, 'Value', 0);
set(handles.tb7, 'BackgroundColor', [.94 .94 .94]);
end
Hope this helps anyone facing a similar situation.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Axis Labels에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by