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

Abbruch einer Schleife durch Tastendruck

 

GodfatherTB
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 31.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2012, 15:16     Titel: Abbruch einer Schleife durch Tastendruck
  Antworten mit Zitat      
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?

Vielen Dank für eure Hilfe,

Christian
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.06.2012, 16:58     Titel:
  Antworten mit Zitat      
Hallo,

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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
GodfatherTB
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 31.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2012, 17:03     Titel:
  Antworten mit Zitat      
Danke für die Antwort

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.

Gruß,
Christian
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.06.2012, 17:25     Titel:
  Antworten mit Zitat      
Hallo,

hier ein Beispiel mit einer einfachen GUI:

Code:
% Initialisierung
f = figure('units', 'normalized',...
    'position', [.45 .45 .1 .1], ...
    'toolbar', 'none', ...
    'menu', 'none', ...
    'name', 'Press button to stop');
p = uicontrol('style', 'pushbutton',...
    'units', 'normalized',...
    'position', [.2 .2 .6 .6], ...
    'callback', 'set(p, ''userdata'', 1)', ...
    'string', 'Stop!');

I = 0;
% Endlosschleife, die abgebrochen wird, wenn Button gedrückt
while isempty(get(p, 'userdata'))
    I = I + 1;
    drawnow
end
disp(I)
% Fenster mit Pushbutton wird nicht mehr gebraucht und geschlossen
close(f)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
GodfatherTB
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 31.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2012, 14:38     Titel:
  Antworten mit Zitat      
Danke für das Beispiel!

Werde versuchen damit als Basis etwas rumzuprobieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
GodfatherTB
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 31.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2012, 11:57     Titel:
  Antworten mit Zitat      
Hallo zusammen!

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)
Code:

% Initialisierung
f = figure('units', 'normalized',...
    'position', [.45 .45 .15 .3], ...
    'toolbar', 'none', ...
    'menu', 'none', ...
    'name', 'Press button to stop');
p = uicontrol('style', 'pushbutton',...
    'units', 'normalized',...
    'position', [.2 .1 .6 .3], ...
    'callback', 'set(p, ''userdata'', 1)', ...
    'string', 'Stop!');

I = 0;
% Endlosschleife, die abgebrochen wird, wenn Button gedrückt
while isempty(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!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.06.2012, 22:15     Titel:
  Antworten mit Zitat      
Hallo,

die erste Frage verstehe ich nicht.
Zur 2. und 3.: ich würde das so machen:

Code:
f = figure('units', 'normalized',...
    'position', [.45 .45 .15 .3], ...
    'toolbar', 'none', ...
    'menu', 'none', ...
    'name', 'Press button to stop');
p = uicontrol('style', 'pushbutton',...
    'units', 'normalized',...
    'position', [.2 .1 .6 .3], ...
    'callback', 'set(p, ''userdata'', 1)', ...
    'string', 'Stop!');

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
while isempty(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)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
GodfatherTB
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 31.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2012, 22:56     Titel:
  Antworten mit Zitat      
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!
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 2025 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.