Verfasst am: 02.06.2012, 15:16
Titel: Abbruch einer Schleife durch Tastendruck
Hallo zusammen,
bin immernoch dabei mich in die Tiefen von Matlab einzuarbeiten und daher noch ein relativer Neuling.
Ich habe nun folgende Problemstellung:
In einem Programm möchte ich innerhalb einer Schleife einen Wert anzeigen (kann ein beliebiger Platzhalter sein. Später soll dort ein Messwert vom A/D-Wandler angezeigt werden). Diese Schleife sollte dann durch einen Tastendruck (ganz simpel z.B. Enter) abgebrochen werden.
Wie bekomme ich es also hin, eine Schleife zu programmieren, in der die Eingabeabfrage nicht "abgewartet", aber trotzdem registriert wird?
eine Möglichkeit wäre eine ganz einfache GUI. Dein Programm fragt dann regelmäßig den Status ab, ob der Stop-Button gedrückt wurde.
Es mag andere Möglichkeiten geben, aber aus dem Stand fällt mir nichts besseres ein.
Schade, habe mich noch nicht in das thema GUI eingearbeitet. Werde das dann die kommenden Tage tun müssen.
Wäre das auch mit so einer "dialogbox" möglich? Hatte versucht das mit z.b. einer "errordlg" zu machen. Nur leider wartet die in meiner schleife dann die eingabe des users ab und macht nicht weiter, ohne dass ein Button gedrückt wurde.
I = 0;
% Endlosschleife, die abgebrochen wird, wenn Button gedrückt whileisempty(get(p, 'userdata'))
I = I + 1;
drawnow end disp(I) % Fenster mit Pushbutton wird nicht mehr gebraucht und geschlossen close(f)
Ich habe mich die letzten Tage etwas mit dem Thema GUI beschäftigt. Das ist noch ein Buch mit sieben Siegeln!
Immerhin habe ich die Funktion hier halbwegs verstanden und versucht für meine Zwecke etwas abzuändern.
Mein Ziel ist es (sobald ich A/D-Wandler-Abfragen beherrsche), dass der User zur Kontrolle von Verstärkung und Nullpunkt solange wie nötig die aktuelle Spannung sehen kann.
Dies stelle ich mir über eine Schleife vor, die wie oben gezeigt mit dem Pushbutton abgebrochen wird.
Erste Frage:
Ist das so sinnvoll oder gibt es da eine elegantere Lösung?
Ich würde dafür aus dem Script-File eine Function machen, die lediglich als Parameter die Kanalnummer vom Programm bekommt und dann die entsprechende Voltzahl ausgibt. Es müssen keine Werte übergeben werden.
Hier mein Code (Abänderung des freundlicherweise von Harald zur Verfügung gestellten Codes)
I = 0;
% Endlosschleife, die abgebrochen wird, wenn Button gedrückt whileisempty(get(p, 'userdata'))
I = I + 1;
% Pause um Zählung sichtbar zu machen pause(0.3) % static text wird in der schleife erzeugt
i = uicontrol('style', 'text','string',I, 'units',...
'normalized', 'position', [.2 .6 .6 .3]);
end disp(I) % Fenster mit Pushbutton wird nicht mehr gebraucht und geschlossen close(f)
Zweite Frage:
Ich habe das gefühl, dass ich dem Programm lediglich sage es soll immer an der gleichen Stelle ein Static-Text fenster hinzeichnen. Das alte wird dadurch ja nicht gelöscht sondern lediglich verdeckt.
Kann ich dann bei schnellerer Aktualisierungsdate und langem betrachten den Rechner ins Schwitzen bekommen, weil er eine Vielzahl an "StaticText" Fenstern übereinander berechnet?
Die dritte Frage ist, wie ich den angezeigten Wert in die Mitte des Static Text Fensters verschieben kann.
Wie immer bin ich für Tipps und Tricks sehr dankbar!
Gruß,
Christian
_________________
Student der Luft- und Raumfahrttechnik in den letzten Zügen.
Lerne für meine Studien- und Diplomarbeit Matlab kennen und bin für Hilfe sehr dankbar!
I = 0;
t = uicontrol('style', 'text','string','0', 'units',...
'normalized', 'position', [.2 .6 .6 .3], 'horizontalalignment', 'center');
% Endlosschleife, die abgebrochen wird, wenn Button gedrückt whileisempty(get(p, 'userdata'))
I = I + 1;
% Pause um Zählung sichtbar zu machen pause(0.3) % static text wird in der schleife erzeugt set(t, 'string', num2str(I));
end disp(I) % Fenster mit Pushbutton wird nicht mehr gebraucht und geschlossen close(f)
ah super
ist wirklich eleganter gelöst
Vielen Dank!
Über den "set" Befehl kann ich also alle Werte beeinflussen, die ich z.b. im GUIDE über den "property inspector" ändern kann.
_________________
Student der Luft- und Raumfahrttechnik in den letzten Zügen.
Lerne für meine Studien- und Diplomarbeit Matlab kennen und bin für Hilfe sehr dankbar!
Einstellungen und Berechtigungen
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
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.