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

Hochzählen beim gedrückten Button

 

f_gast
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 18.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2015, 09:20     Titel: Hochzählen beim gedrückten Button
  Antworten mit Zitat      
Hallo Zusammen,

ich würde gerne in GUI eine funktion schreiben, dass wenn der Button gedrückt bleibt ein zähler startet zu zählen solange bis ich es wieder loslasse. Ich dachte mit ButtonDownFcn wäre es zu realisieren aber damit bekomme ich es nicht hin.

Ich habe auch ein Beispiel gefunden, was aber auch nicht das macht was ich will
Code:
function TestButton
FigH = figure('WindowButtonUpFcn', {@myCallback, 'up'}, ...
   'WindowButtonDownFcn', {@myCallback, 'down'},'Units','Pixel');
ButtonH = uicontrol(FigH, 'Style', 'ToggleButton', 'Enable', 'inactive');
setappdata(FigH, 'ButtonH', ButtonH);


Code:
% --------------- 8< -------------------------------
function myCallback(ObjH, EventData, Command)
FigH = ancestor(ObjH, 'figure');
ButtonH = getappdata(FigH, 'ButtonH');
global i
if isempty(overobj('uicontrol'))
    switch Command
        case 'up'
            set(ButtonH, 'Value', 0);
            a = 'stop'
            % STOP THE RECORDING...
        case 'down'
       
            set(ButtonH, 'Value', 1);
            % START THE RECORDING...
            a = 'start'
         
            end

        otherwise
            error('Programming error');
    end
   
end
 


Ich will, dass wenn case 'down' erfühlt ist der zähler anfängt zu zählen. aber er läuft nur einmal durch und gibt in dem Fall nur einmal a = 'start' aus.

Das zweite Problem bei dem Beispiel ist, dass sobald man im GUI-Fenster die Maus betätigt die Funktion ausgeführt wird. Das soll auch nicht passieren.
Ist es in MATLAB sowas überhaupt möglich?

Ich hoffe ihr könnt mir helfen.

LG
XXX
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.05.2015, 23:23     Titel: Re: Hochzählen beim gedrückten Button
  Antworten mit Zitat      
Hallo f_gast,

In welcher Geschwindigkeit soll der der Zähler denn hochgezählt werden? Der Gedanke bringt einen weiter zum TIMER. Wenn die WindowButtonDownFcn den Timer startet, kann die WindowButtonUpFcn ihn wieder stoppen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
f_gast
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 18.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2015, 08:00     Titel:
  Antworten mit Zitat      
Hmmm, so schnell wie das System es schafft. So wie slider halt. Wenn bei slider auch die taste gedrückt hält, verändert sich der wert such ständig.

Das mit dem Timet gucke ich mir an. Danke für den Tipp.

Lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 11.05.2015, 09:02     Titel:
  Antworten mit Zitat      
Zitat:
Hmmm, so schnell wie das System es schafft.

welches system. meinst du deinen rechner? je nach schrittweite kannst du da rechnt schnell an die grenzen von double stoßen. da sollte man sich schon gedanken machen. es ist ja nicht sinnvonn das es so schnell hochzählt das einmal clicken und gedrückt halten identisch sind.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
f_gast
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 18.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2015, 09:42     Titel:
  Antworten mit Zitat      
Eine pro sekunde wurde mir ausreichen. Ausserdem ich habe eine min und max wert von -170 bis 170. Das heisst mit dem werte bereich werde ich kein problem haben. Aber du hast recht er soll nicht all so schnell hochzählen.
Es ist ja keine übliche zähler bzw. Timer. Der Wert beschreibt die aktuelle zb. X komponente eines Roboterarms, dh. die position des Armes wird während die taste gedrückt ist auch mit aktualisiert und an dem Roboter weitergegeben. Daher bin mir nicht sicher, ob ein Timer hier ganz zutrifft.

Lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.05.2015, 12:55     Titel:
  Antworten mit Zitat      
Hallo f_gast,

Der Timer kann mit bestimmter Frequenz einen Wert erhöhen und andere Funktionen aufrufen. Wenn der Button gedrückt wird, wird der Timer gestartet und ändert die Werte wie gewünscht. Und das Loslassen der Taste stoppt den Timer wieder.

Das ist eine sinnvolle und direkte Lösung.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
f_gast
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 18.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2015, 22:48     Titel:
  Antworten mit Zitat      
Hallo Jan S.,
Würdest du mir auch veraten, wie ich vorgehen soll?
Wie 8st so ne Timer in Matlab zu programmieren?

Vielen Dank im voraus.
Lg.
Private Nachricht senden Benutzer-Profile anzeigen
 
f_gast
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 18.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.05.2015, 23:21     Titel:
  Antworten mit Zitat      
Hallo nochmal,

das Problem bei mir ist, dass der Programm erst nach dem Losslasse der TAste in die Pushbutton-Callback Funktion einspringt. Beim ButtonDownFcn spring er zwar sofort rein aber es passiert mit der rechten Masutaste.
Gibt es eine möglichkeit es mit der linken Tasten hinzubekommen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 18.05.2015, 11:50     Titel:
  Antworten mit Zitat      
Hallo f_gast,

Das ist nicht ganz einfach.
Du kannst den eigentlichen Button auf "Enable" = "inactive" setzen und die WindowsButtonDownFcn der Figure so programmieren, dass sie prüft, ob der Klick über dem geüwnschten Button stattgefunden hat.

Wie man einen Timer programmiert erfährt man mit "doc timer".

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
f_gast
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 18.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.05.2015, 15:46     Titel:
  Antworten mit Zitat      
Hi Jan,

Danke dir. Das mit enable habe ich auch hinbekommen. Aber ich wusste nicht, dass man eine zustandabfrage mit der windowsButtonDownFcn realisieren kann bzw. in den fall kann.

Werde ich gleich ausprobieren.
Lg
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.