IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques Discussion :

plot temps réel dans une interface GUIDE


Sujet :

Interfaces Graphiques

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Points : 15
    Points
    15
    Par défaut plot temps réel dans une interface GUIDE
    Bonjour,
    je débute en Matlab mais j'ai une bonne expérience de la programmation en C/C++, y compris dans le domaine des interfaces graphiques. Je vois très bien comment réaliser ce que je cherche à réaliser en C, mais j'ai besoin que le code soit modifiable facilement par d'autres, donc j'opte pour du Matlab.

    voici mon problème : j'ai une carte d'acquisition a partir de laquelle je récupère des échantillons sous Matlab. Ca, ca marche très bien.

    je souhaite réaliser un oscilloscope/fft sous matlab a partir de cette carte d'acquisition. J'ai donc créé une interface sous GUIDE, dans laquelle j'ai 2 plotter matlab (1 en temps, 1 en fréquence) + des boutons pour le paramétrage. J'arrive à faire fonctionner les callbacks et à produire un tracé quelconque dans chacune des deux plotter.

    maintenant je me frotte au probleme du temps réel. Je n'arrive pas bien à voir comment je peux mettre à jour un graphe de mon interface à du script principal de matlab. j'ai bien vu l'article ci-dessous :
    http://www.mathworks.co.uk/matlabcen..._thread/155564
    mais dans la mesure où j'ai 2 plots dans la meme interface, je ne sais pas comment sélectionner dans la boite de dialogue le plot qui m'intéresse. De même, toujours à partir du script principal, comment je peux modifier un "static text" pour le mettre à jour.

    Merci d'avance !


    En vous remerciant !

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Pourrais-tu nous mettre la partie du code en question?

    Merci,
    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    ce n'est pratiquement que du code automatique. Voici le code de fftscope.m :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    function varargout = fftScope(varargin)
    % FFTSCOPE M-file for fftScope.fig
    %      FFTSCOPE, by itself, creates a new FFTSCOPE or raises the existing
    %      singleton*.
    %
    %      H = FFTSCOPE returns the handle to a new FFTSCOPE or the handle to
    %      the existing singleton*.
    %
    %      FFTSCOPE('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in FFTSCOPE.M with the given input arguments.
    %
    %      FFTSCOPE('Property','Value',...) creates a new FFTSCOPE or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before fftScope_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to fftScope_OpeningFcn via varargin.
    %
    %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
    %      instance to run (singleton)".
    %
    % See also: GUIDE, GUIDATA, GUIHANDLES
     
    % Edit the above text to modify the response to help fftScope
     
    % Last Modified by GUIDE v2.5 10-Dec-2009 21:10:26
     
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @fftScope_OpeningFcn, ...
                       'gui_OutputFcn',  @fftScope_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin && ischar(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end
     
    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
     
    % End initialization code - DO NOT EDIT
     
     
    % --- Executes just before fftScope is made visible.
    function fftScope_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to fftScope (see VARARGIN)
     
    % Choose default command line output for fftScope
    handles.output = hObject;
     
    % Update handles structure
    guidata(hObject, handles);
     
     
    % UIWAIT makes fftScope wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
     
     
    % --- Outputs from this function are returned to the command line.
    function varargout = fftScope_OutputFcn(hObject, eventdata, handles) 
    % varargout  cell array for returning output args (see VARARGOUT);
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Get default command line output from handles structure
    varargout{1} = handles.output;
     
     
    % --- Executes on button press in averagesAmount.
    function averagesAmount_Callback(hObject, eventdata, handles)
    % hObject    handle to averagesAmount (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    prompt={'Entrez le nombre de Moyennes :'};
    name='Nombre de Moyennes';
    numlines=1;
    defaultanswer={'1'};
    %options.Resize='on';
    %options.WindowStyle='normal';
    options.Interpreter='tex';
     
    answer=inputdlg(prompt,name,numlines,defaultanswer,options);
     
    % --- Executes on button press in singleShot.
    function singleShot_Callback(hObject, eventdata, handles)
    % hObject    handle to singleShot (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
     
    % --- Executes on button press in continousAcquire.
    function continousAcquire_Callback(hObject, eventdata, handles)
    % hObject    handle to continousAcquire (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
     
    % --- Executes on button press in stopAcquire.
    function stopAcquire_Callback(hObject, eventdata, handles)
    % hObject    handle to stopAcquire (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
     
    % --- Executes on button press in timeParameters.
    function timeParameters_Callback(hObject, eventdata, handles)
    % hObject    handle to timeParameters (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    axes(handles.timeGraph);
    plot(rand(500,2));
     
    % --- Executes on button press in frequencyParameters.
    function frequencyParameters_Callback(hObject, eventdata, handles)
    % hObject    handle to frequencyParameters (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    Dans le callback timeParameters_Callback j'ai ajouté de quoi modifier le plot si on appuie sur un bouton. En revanche je voudrais répéter ceci "en temps réel". Donc j'imagine que la solution est de faire un "while infini" (ou presque) dans le script principal de matlab après avoir ouvert la boite fftscope, et de faire l'acquisition + rafraichissement dans la boucle en question, avec un "pause(0)" dans la boucle pour permettre des interactions avec l'interface.
    Le truc c'est que tant qu'on est dans un callback, les handles sur les objets de la boite de dialogue sont donnés automatiquement, et ca n'est pas le cas de l'extérieur, d'où mon problème.
    Parallèlement, comme la GUI est totalement événementielle, si je veux éviter d'utiliser un timer pour lancer les acquisitions (ca devient hasardeux car mon acquisition peut être bien plus courte que le laps de temps entre 2 appels du timer) je suis obligé de fonctionner dans le script principal.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    ok je pense avoir trouvé : je n'avais simplement pas compris comment trouver un élément d'une interface graphique.
    a la création de la boite de dialogue :
    puis pour avoir le handle d'un objet précis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nbPts =findobj(dialfft,'Tag','pointsAmount');
    (si pointsAmount a été mis comme Tag de l'objet cherché dans GUIDE).

    puis reste à changer ses propriétés, par exemple si c'est un staticText :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set(nbPts,'String','Nombre de Points = 1000')

  5. #5
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Oui c'est une solution, sinon tu peux utiliser la structure des handles pour stocker ces identifiants ce qui permet de s'affranchir de FINDOBJ (c'est d'ailleurs la méthode utilisée par défaut dans MATLAB)
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Points : 15
    Points
    15
    Par défaut handles ?
    Bonjour,
    je ne vois pas comment utiliser le système de handles dans un script en dehors des callbacks ? pouvez-vous m'éclairer la dessus ?
    Merci ...

  7. #7
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Euh je crois que j'avais mal compris ton problème en fait

    Si tu interagis avec ton interface par le biais d'un script, FINDOBJ semble en effet la meilleure solution...
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ajout en temps réel dans une interface graphique
    Par aroua_doudou dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 23/01/2014, 14h45
  2. Réponses: 0
    Dernier message: 29/01/2011, 17h40
  3. Affichage de l'heure en temps réel dans une interface
    Par T-MAT dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 26/12/2008, 19h08
  4. insertion en temps réel dans une combolist
    Par new_wave dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 05/09/2006, 17h55
  5. Réponses: 4
    Dernier message: 16/06/2006, 03h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo