2016-06-27 20 views
0

Hallo ich wollte wissen, wie ich Daten von verschiedenen Rückrufen zu einem comport übergeben kann, ohne ständig einen comport in den verschiedenen Rückrufen öffnen und schließen zu müssen?Wie kann ich Daten von verschiedenen Funktionen an denselben Comport senden, ohne den Comport ständig öffnen zu müssen?

so hier ist der Code

function submitButton_Callback(hObject, eventdata, handles) 
% hObject handle to submitButton (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
if(get(handles.HitButton,'Value') == 1) 
    filename = 'testing.xls'; 
    writevar({'Hit'},1,filename); 
    set(handles.text2,'visible','off'); 
    set(handles.words,'visible','off'); 
    set(handles.rating,'visible','on'); 
    set(handles.readyToGo,'visible','off'); 
    set(handles.readyButton,'visible','off'); 
    set(handles.submitButton,'visible','off'); 
    set(handles.rateButton, 'visible','on'); 
    set(handles.HowSure,'visible', 'on'); 
    drawnow; 
    sPort=serial('COM4'); 
    fopen(sPort); 
    fprintf(sPort, '%d', 3); 
    fclose(sPort); 
    delete(sPort); 
else 
    filename = 'testing.xls'; 
    writevar({'Bit'},1,filename); 
    set(handles.text2,'visible','off'); 
    set(handles.words,'visible','off'); 
    set(handles.rating,'visible','on'); 
    set(handles.readyToGo,'visible','off'); 
    set(handles.readyButton,'visible','off'); 
    set(handles.submitButton,'visible','off'); 
    set(handles.rateButton, 'visible','on'); 
    set(handles.HowSure,'visible', 'on'); 
    drawnow; 
    sPort=serial('COM4'); 
    fopen(sPort); 
    fprintf(sPort, '%d', 3); 
    fclose(sPort); 
    delete(sPort); 
end 
function readyButton_Callback(hObject, eventdata, handles) 
% hObject handle to readyButton (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
s = load('train.mat'); 
sPort=serial('COM4'); 
fopen(sPort); 
fprintf(sPort, '%d', 1); 
player = audioplayer(s.y,8192); 
playblocking(player); 
fprintf(sPort, '%d', 2); 
fclose(sPort); 
delete(sPort); 
%pause(4); 
set(handles.text2,'visible','on'); 
set(handles.words,'visible','on'); 
set(handles.HowSure,'visible', 'off'); 
set(handles.rating,'visible','off'); 
set(handles.readyToGo,'visible','off'); 
set(handles.readyButton,'visible','off'); 
set(handles.submitButton,'visible','on'); 
drawnow; 

wie man sehen kann ich den Com-Port für jede Funktion öffnen müssen und schließen Sie es dann. Idealerweise möchte ich, dass es offen bleibt und von jedem Rückruf aus erreichbar ist.

+1

Siehe auch: [Teilen Daten unter Rückrufe] (http: //www.mathworks .com/help/matlab/creating_guis/share-data-from-callbacks.html) – excaza

+0

@excaza Entschuldigung Ich habe es angeschaut, aber ich weiß nicht, wie ich es auf meine Situation anwenden soll. Insbesondere habe ich die Store-Daten in UserData oder anderen Objekteigenschaften betrachtet. – user6248190

+0

Ok, was hast du probiert? – excaza

Antwort

1

So etwas wie dieses (folgende Formular des Beispiels aus: http://se.mathworks.com/help/matlab/creating_guis/share-data-among-callbacks.html?requestedDomain=www.mathworks.com Abschnitt: Speichern von Daten als Anwendungsdaten)

function my_slider() 
%generate figure and specify a delete callback function to close 
%the com port when figure is closed 
hfig = figure('DeleteFcn',@closeCom); 

sPort=serial('COM4'); 
fopen(sPort); 
setappdata(hfig,'comPort',sPort); 

slider = uicontrol('Parent', hfig,'Style','slider',... 
     'Units','normalized',... 
     'Position',[0.3 0.5 0.4 0.1],... 
     'Tag','slider1',... 
     'Callback',@slider_callback); 

button = uicontrol('Parent', hfig,'Style','pushbutton',... 
     'Units','normalized',... 
     'Position',[0.4 0.3 0.2 0.1],... 
     'String','Display Values',... 
     'Callback',@button_callback); 
end 

function slider_callback(hObject,eventdata) 
    hComPort=getappdata(hObject.Parent,'comPort'); 
    fprintf(hComPort, '%d', 3); 
end 

function button_callback(hObject,eventdata) 
    hComPort=getappdata(hObject.Parent,'comPort'); 
    fprintf(hComPort, '%d', 1); 
    fprintf(hComPort, '%d', 2); 

end 

function closeCom 
    figHandle=gcbo %get handle for the calling figure 
    hComPort=getappdata(figHandle,'comPort'); 
    fclose(hComPort); 
    delete(hComPort); 
end