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

Schleife über Tastendruck abbrechen

 

Janvi
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 20.05.08
Wohnort: Rom
Version: R2007a
     Beitrag Verfasst am: 22.02.2009, 23:11     Titel: Schleife über Tastendruck abbrechen
  Antworten mit Zitat      
habe ein Skript geschrieben welches eine einzige Endlosschleife ist (while 1 .... end) und auch sein soll. Darinnen werden Daten von der Schnittstelle abgeholt, umgerechnet und dann als Kurve angezeigt. Das Ganze passiert zyklisch, sozusagen eine Live - Oszilloskopanzeige mit realen Messdaten von der Schnittstelle was auch schon relativ ordentlich tut.

Das Problem ist nun, daß ich nichts mehr bedienen kann. Zumachen des Fensters mit dem X bringt nix, weil es im nächsten Skriptdurchgang gleich wieder aufgeht. Beenden des Programms ist momentan nur vom Command Window aus mit cntl-C an einer nicht vorhersehbaren Stelle. Wenn hier gerade die Schnittstelle offen ist, hilft vor Neustart nur ein Beenden von Matlab damit das Skript wieder erfolgreich losläuft.

Alles was ich bislang als Tastenabfrage in der Schleife probiert habe, blockiert meine zyklische Ausgabe und macht erst bei Tastendruck weiter. Was ich suche, ist sozusagen eine Statusabfrage welche mir anzeigt, ob seit dem letzten Aufruf eine Taste gedrückt wurde. Falls ja, frage ich ab welchen Tastencode und führe eine passende Aktion aus, falls nein, mache ich mit der Endlosschleife weiter.
Private Nachricht senden Benutzer-Profile anzeigen


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2009, 23:26     Titel:
  Antworten mit Zitat      
Wenn du ein figure hast, könntest du mit dem KeyPressFcn-Callback was machen...
 
Janvi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 20.05.08
Wohnort: Rom
Version: R2007a
     Beitrag Verfasst am: 26.02.2009, 00:17     Titel:
  Antworten mit Zitat      
wusste ich zwar bislang nicht, dass ich ein Figure habe, aber genau keypressfcn habe ich gesucht. Tut wie unten prima aber ich bin mir nicht ganz sicher ob ich die globalen Variablen auch wirklich brauche oder ob man das Callback nicht auch innerhalb von keytest platzieren könnte? Wenn wir schon dabei sind: text ist in der Hierarchie unterhalb axis. Gibt es ein passenderes ui sowas auch ohne Erzeugen einer Achse auszugeben wenn man ausnahmsweise mal keine Kurve beschriften möchte ?

Code:

function keytest

global flags;           %zur Steuerung des Schleifenabbruchs
global count;

grfscr =figure('KeyPressFcn',@bediener);     % Grafikfenster einrichten

flags = 1;                          %Live Messwertanzeige freigeben
count = 0;                          %Zaehler Startwert

 while flags                        %Endlosschleife zeigt einen Zaehler an
  count = count + 1;                %Live Messwert erzeugen
  pause (0.1);                      %Matlab zaehlt schneller als man guckt
  set(0,'CurrentFigure',grfscr);    %Grafik-Messwertfenster auswaehlen
  hold off;                         %Messwert in jedem Zyklus neu anzeigen
  str=['Count = ' num2str(count)];  %Wert anzeigen
  plot (1);                         %Axis erzeugen
  text(1,1,str,'fontsize',20);      %Zaehlengrafik ausgeben
  drawnow;
 end
delete(grfscr);                     %Fenster bei Programmende schliessen
end

%**************************************************************************
%**
%** Callback Funktion, wird vom System bei Tastendruck durch Bediener
%** quasi gleichzeitig zur laufenden Live-Messwertanzeige aufgerufen

function bediener(src,evnt)
 global count;          
 global flags;
 if evnt.Character == 'r'
  count = 0;                    %Zaehler Reset
 elseif evnt.Character == 'p'
  count = 1000;                 %Zaehler Preload
 elseif evnt.Character == 'x'
  flags = 0;                    %Programm beenden
 end

 clear flags;           %Speicher fuer Zeiger auf globale Variablen
 clear count;           %wieder freigeben
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 26.02.2009, 09:32     Titel:
  Antworten mit Zitat      
Moin,

Code:
uicontrol('Style','text');


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
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 - 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.