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 :

Problème de Timer avec le GUIDE


Sujet :

Interfaces Graphiques

  1. #1
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut Problème de Timer avec le GUIDE
    Bonjour,

    Pour simplifier les choses, je prends une IHM créée avec GUIDE, contenant un static text et deux boutons.

    A l'ouverture de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        handles.compteur = 10 ;
        set(handles.text1, 'String', handles.compteur) ;
    
        
        handles.ttimer = timer('TimerFcn',{@timefct handles}, ...
                                      'Period', 1.0, ...
                                      'ExecutionMode','fixedRate');
    Le premier démarre le timer, :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    start(handles.ttimer) ;
    et le second l'arrête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    stop(handles.ttimer) ;
    Le timer incrémente le compteur et affiche sa valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function timefct(hObject, eventdata, handles)
    handles.compteur = handles.compteur + 1 ;
    set(handles.text1, 'String', handles.compteur) ;
    Avec la fonction timefct qui se déclenche à chaque interval du Timer j'arrive bien à accéder aux objets (handles.compteur, handles.text1).
    Cependant, j'appliques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    guidata(hObject, handles);

    J'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Error using ==> guidata at 89
    H must be the handle to a figure or figure descendent.
    c'est normal, car je n'arrive pas à passer hObject comme paramètre lorsque je crée mon timer. pour résoudre, j'ai essayé avec gcf, gcbo mais je n'arrive pas ?

    Je cherche à passer hObject dans la ligne ci-dessous pour pouvoir réaliser ceci guidata(hObject, handles)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        handles.ttimer = timer('TimerFcn',{@timefct handles}, ...
                                      'Period', 1.0, ...
                                      'ExecutionMode','fixedRate');
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  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,

    Perso je ferais plutôt un entête comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function timefct(handles)
    Avec une définition du timer comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    handles.ttimer = timer('TimerFcn',@(x) timefct(handles), ...
                                      'Period', 1.0, ...
                                      'ExecutionMode','fixedRate');
    Par contre dans ce cas tu as la structure handles dans l'état au moment de la création du timer, pour contourner le problème (et donc avoir la structure handles à jour) je ferais quelquechose comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function timefct(handles)
    handles = guidata(handles.text1);
    Bon il faut tester...

    Bonne apm,
    Duf
    Simulink & Embedded Coder

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

  3. #3
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Dans OpeningFcn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        handles.ttimer = timer('TimerFcn',@(x) timefct(handles), ...
                                      'Period', 1.0, ...
                                      'ExecutionMode','fixedRate');

    Dans timefct :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function timefct(handles)
    handles.compteur = handles.compteur + 1 ;
    set(handles.text1, 'String', handles.compteur) ; 
    guidata(handles);
    L'erreur est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ??? Error while evaluating TimerFcn for timer 'timer-6' 
     
    Error using ==> Incrementation>@(x)timefct(handles)
    Too many input arguments.
    Il y a un truc qui m'échappes
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  4. #4
    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
    Autant pour moi, il fonctionne comme tous les autres objets apparemment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @(obj,evt) timefct(handles)
    Ca devrait résoudre le problème mais au final tu peux récupérer directement le handle de l'objet timer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @(obj,evt) timefct(obj)
    Avec une fonction comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function timefct(hObject)
    A tester et voir ce qui convient le mieux...
    Simulink & Embedded Coder

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

  5. #5
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Toujours une erreur, ci-rattaché le fichier programme :
    Fichiers attachés Fichiers attachés
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  6. #6
    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
    Chez moi j'ai une erreur de segmentation, à priori ca vient de ton .fig qui à l'air vérolé...

    Vérifie si tu peux ouvrir ton .fig, si non je vois pas d'autre solutions que de le recréer
    Simulink & Embedded Coder

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

  7. #7
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Le programme étant très simple. Je cherche à incrémenter un "compteur" à chaque seconde. L'utilises un "timer" et deux boutons "demarrer" et "arrêter".
    Images attachées Images attachées  
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  8. #8
    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 pas de problème à ce niveau là mais quelle est l'erreur que tu obtiens maintenant?
    Simulink & Embedded Coder

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

  9. #9
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Je n'arrives toujours pas à faire fonctionner le programme, car je n'arrive pas sauvegarder la variable du compteur par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    guidata(hObject, handles);
    Est-ce que tu peux me faire un exemple qui marche ?
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  10. #10
    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
    Voici un exemple vite fait qui à l'air de fonctionner (j'utilise MATLAB 7.1)
    Fichiers attachés Fichiers attachés
    Simulink & Embedded Coder

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

  11. #11
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Merci pour ton aide.

    ça marche nickel !!
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

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

Discussions similaires

  1. Problème de boucle avec Timer
    Par SandrillonC dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/04/2010, 12h40
  2. Problème Timer avec vb 2008
    Par walid kh dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/03/2010, 10h35
  3. Problème de précision avec un Timer
    Par cs_ntd dans le forum C#
    Réponses: 7
    Dernier message: 29/06/2008, 23h51
  4. [C#][service windows] problème de débutant avec 1 timer
    Par Nycos62 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/10/2005, 11h22
  5. Problèmes de versions avec Xalan, Xerces et Java
    Par honeyz dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 05/06/2003, 10h18

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