WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Slider Callback, Simulation mit Handeingabn

 

bukkelfipps

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2007, 09:53     Titel: Slider Callback, Simulation mit Handeingabn
  Antworten mit Zitat      
Hi

ich hab eine konkrete Frage zum Slider.
Folgende Aufgabe:

Wie man sieht, die MountainCart-Simulation. Ich bräuchte für die Generierung von Handeingaben nun eine instant Reaktion auf das Bewegen des Force-Sliders rechts unten. (Damit läßt sich die Kraft einstellen mit der ich das Object anschiebe.)
Dies funktioniert auch schon soweit, mit dem kleinen Malus, dass die Parameter erst beim Loslassen der Mousetaste übernommen werden. Das ist natürlich etwas ungünstig für die Handsteuerung, da sich das Object nur mit Schaukelbewegungen auf den Hügel bringen läßt/lassen soll.

Start der Simulation ist durch den linken ToggleBTN:
Code:

function toggleBTN_Callback(hObject, eventdata, handles)
    global stopit;
    global mLandscape;
    global action;
   
    stopit = get(hObject,'Value');
   
    if stopit == 1
        set(hObject,'String','Stop');
        while stopit==1
            MountainCartPlot( mLandscape, 0, handles.mcAXES );
            [mLandscape.state(1) mLandscape.state(2)] = MountainCartSim( mLandscape, action, 0.2 );
        end
    elseif stopit==0;
        set(hObject,'String','Pause');
    end
 


Änderung der Kraft erfolgt durch die Slider-Callback:
Code:

function forceSlider_Callback(hObject, eventdata, handles)
    global action;
        guidata(hObject, handles);
    force = get(hObject,'Value');
    if force < -25
        force = -50;
    elseif force > 25
        force = 50;
    else
        force = 0;
    end
    action = force;
    set(handles.forceEdit,'String',force);
    guidata(hObject, handles);
 


outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 26.11.2007, 23:16     Titel:
  Antworten mit Zitat      
Eigentlich ist das nicht möglich, aber...

Code:
figure
h = uicontrol('style','slider','units','pixel','position',[20 20 300 20])
handle.listener(h,'ActionEvent','disp(''Hello World'')');


Ich denke ausgehend von dem Beispiel sollte es kein Problem sein es umzusetzen. Frag nicht nach dem "handle.listener" - dies ist ein undokumentierter Befehl. Funktioniert nur(!), wenn Java aktiv ist


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
bukkelfipps

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2007, 11:29     Titel:
  Antworten mit Zitat      
Wenn ich es auf der Konsole ausführe gehts.
Leider wills nicht in einem mit GUIDE erstelltem GUI laufen. Weder mit einem in der figure definierten Slider, noch mit einem zur Laufzeit gezeichneten.
 
bukkelfipps

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.11.2007, 09:28     Titel:
  Antworten mit Zitat      
Habs hinbekommen, aber nicht nicht mit deiner Methode.

Wenn ich mit handle.listener(handle(handles.forceSlider),'ActionEvent',{@forceSlider_Callback, handles}); das Event hinzufüge, gibts zwar keine Fehlermeldung, aber es passiert auch nix.

Zum Glück gabs jemanden der sich die Mühe gemacht hat die zugrundeliegenden Java-Objekte und Methoden zu identifizieren.
Code:

function varargout = MountainCarFig_OutputFcn(hObject, eventdata, handles)
    handles.jforceSlider = findjobj(handles.forceSlider);
    set(handles.jforceSlider, 'AdjustmentValueChangedCallback', {@forceSlider_Callback, handles});
...
 


findjobj() ist hierfür unter http://www.mathworks.com/matlabcent.....oadFile.do?objectId=14317 zu finden.
Weiterhin sollte man beachten das das übergebene hObject in der Callback nun eine Java-ScrollBar ist. Damit ändern sich die Eigenschafts-Bezeichner (zB: get(hObject,'maximum') anstatt get(hObject,'Max')). Dies lässt sich aber mit dem Überschreiben des hObject mit dem richtigen Handle aus handles fixen.

Zur Identifizierung der Objekte kann man mittels findjobj(ObjectHandle) den kompletten Baum der Properties samt gültiger Methoden anzeigen lassen.

Weiterhin gilt zu beachten dass sich die Java-Elemente erst nach der Erzeugung des Objects ansprechen lassen und nicht während der CreateFcn's!!
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.