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

MATLAB Discussion :

Plusieurs actions simultanément [Débutant]


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 19
    Points
    19
    Par défaut Plusieurs actions simultanément
    Bonjour à tous,

    Je souhaite réaliser un programme permettant de fabriquer puis de jouer un son, et pendant la présentation de ce son, à des moments très précis matérialisés par un signal quelconque sur l'interface, donner la main à l'utilisateur pour qu'il puisse cliquer sur des boutons.

    Je sais faire l'interface graphique, ainsi que le son, mais n'ayant que très peu de connaissances en Matlab, j'aurais voulu savoir s'il était réellement possible de faire plusieurs actions simultanées (jouer un son, pendant la présentation du son, afficher un signal sur l'interface graphique, permettre à l'utilisateur de cliquer, enlever le signal visuel et désactiver les boutons plusieurs fois pendant la présentation du son).

    Merci d'avance pour vos réponses,

    Meloody

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Tu peux utiliser des objets Timer

    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup Dut, de ta réponse.
    J'avais effectivement commencé à regarder pour mettre un timer avant de poser la question, et j'ai à nouveau relu la doc du timer, mais je n'ai pas trouvé quelle était la propriété du timer object qui permettait de lui faire faire les deux tâches en parallèle.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Il faut autant d'objets Timer que de tâches à accomplir.

    Un exemple avec deux compteurs en parallèle ayant deux pas d'incrémentation différents.

    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
    function test_timer
     
    fig = figure('closerequestfcn',@crfcn);
     
    uicontrol('style','text','unit','normalized', ...
        'position',[.1 .45 .3 .1],'tag','tx1', ...
        'string','1')
     
    uicontrol('style','text','unit','normalized', ...
        'position',[.6 .45 .3 .1],'tag','tx2', ...
        'string','0')
     
    handles = guihandles(fig);
     
    handles.t(1) = timer('period',1,'timerfcn',@timx1, ...
        'executionmode','fixedrate');
    handles.t(2) = timer('period',2,'timerfcn',@timx2, ...
        'executionmode','fixedrate');
     
    guidata(fig,handles);
     
    start(handles.t);
     
    function crfcn(obj,event)
     
    handles = guidata(obj);
     
    stop(handles.t);
    delete(handles.t);
     
    set(obj,'closerequestfcn','closereq')
     
    close(obj);
     
    function timx1(obj,event)
     
    handles = guidata(gcf);
    n = get(handles.tx1,'string');
    n = str2double(n)+1;
    set(handles.tx1,'string',num2str(n));
     
    function timx2(obj,event)
     
    handles = guidata(gcf);
    n = get(handles.tx2,'string');
    n = str2double(n)+2;
    set(handles.tx2,'string',num2str(n));
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Aaah, 2 timers ! Je pensais pas que c'était possible !
    C'est super sympa de m'avoir fait un exemple, merci beaucoup !

  6. #6
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Bonsoir,

    Je reviens vers toi Dut (ou vers n'importe qui qui pourrait m'aider! ) parce que j'ai un problème pour faire fonctionner mes deux timers en même temps.

    Tu faisais dans ta solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    handles.t(1) = timer('period',1,'timerfcn',@timx1, ...
        'executionmode','fixedrate');
    handles.t(2) = timer('period',2,'timerfcn',@timx2, ...
        'executionmode','fixedrate');
     
    start(handles.t);
    et les deux timers démarrent en même temps.

    Moi quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    compteur(1) = timer('timerfcn',@comptearebours,'executionmode','fixedrate','Period',5.6,'StartDelay',2.8,'TasksToExecute',essais);
    compteur(2) = timer('timerfcn',@creation, 'executionmode','fixedrate');
    start(compteur);
    J'obtiens l'erreur suivante :
    ??? The following error occurred converting from timer to double:
    Error using ==> double
    Conversion to double from timer is not possible.
    J'ai essayé de nommer différemment les deux timers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    compteur1 = timer('timerfcn',@comptearebours,'executionmode','fixedrate','Period',5.6,'StartDelay',2.8,'TasksToExecute',essais);
    compteur2 = timer('timerfcn',@creation, 'executionmode','fixedrate');
    start(timerfind);
    Je n'ai plus d'erreur mais le deuxième timer ne démarre que quand le premier est terminé.

    As-tu une idée de ce qui cloche dans mon code ?

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Il nous faudrait le message d'erreur complet.
    Il faudrait aussi voir ton code en entier, ou au moins le contenu des fonctions comptearebours et creation.

    A tout hasard, n'aurais-tu pas une variable nommée compteur dans ton code ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  8. #8
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Alors après vérification, je n'ai pas d'autre variable compteur que le timer.

    Voici le code de mes fonctions :

    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
     
    function initialisation %initialise les paramètres du test
    compteur(1) =timer('timerfcn',@comptearebours,'executionmode','fixedrate','Period',5.6,'StartDelay',2.8,'TasksToExecute',essais);
    compteur(2) = timer('timerfcn',@creation, 'executionmode','fixedrate');
    end
     
    function comptearebours(obj,event)
            boutonoff;
            boutonorange;
            boutonon;
            function boutonoff
                set(handles.tx1,'string',2.8);
                set(handles.tx1,'BackgroundColor',[1 0 0]);%le bouton est rouge
                set(handles.bouton1,'Enable','Inactive');
                set(handles.bouton2,'Enable','Inactive');
                pause(2);
            end
     
            function boutonorange
                set(handles.tx1,'BackgroundColor',[1 0.5 0.2]);%le bouton est orange
                pause(0.8);
            end
     
            function boutonon
                set(handles.tx1,'BackgroundColor',[0 1 0]);%le bouton est vert
                set(handles.bouton1,'Enable','On');
                set(handles.bouton2,'Enable','On');
                m = str2num(get(handles.tx1,'string'));       
                for i = 0:0.01:m
                    n = get(handles.tx1,'string');
                    n = str2double(n)-0.01;
                    set(handles.tx1,'string',num2str(n));
                    drawnow;
                end
                set(handles.tx1,'BackgroundColor',[1 0 0]);%le bouton est rouge
            end
        end
     
    function creation(obj,event)     
            silence_pour_windows7 = [zeros(1, F_echan/5) ; zeros(1, F_echan/5)];
            chaine = [chaine silence_pour_windows7]'; % passage en colonnes
            duson = audioplayer(chaine, F_echan, 24);
            playblocking(duson);
            stop(timerfind);
            delete(timerfind);
        end
     
    function lancement
            start(compteur);
    end
    et voici l'erreur :
    ??? The following error occurred converting from timer to double:
    Error using ==> double
    Conversion to double from timer is not possible.

    Error in ==> melos>initialisation at 127
    compteur(1) = timer('timerfcn',@comptearebours,'executionmode','fixedrate','Period',5.6,'StartDelay',2.8,'TasksToExecute',essais);

    Error in ==> melos at 5
    initialisation

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    La variable essais n'est pas connue dans la fonction initialisation, si ?

    A moins que tu n'utilises des fonctions imbriquées.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  10. #10
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Alors, la variable essais fait partie de tout un tas de variables que j'ai définies dans initialisation, mais que je n'avais pas détaillées quand j'ai copié le code.
    Comme je m'en ressers, je l'ai aussi définie dans persistent.
    Je précise que chaque compteur tout seul fonctionne bien. Par exemple si j'en mets un en commentaire, et que j'appelle l'autre compteur, start(compteur) marche tout à fait bien. C'est quand je veux activer les deux compteurs en même temps que ça ne marche plus (compteur(1) et compteur(2) avec start(compteur) ).

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    C'est vraiment bizarre. Je pense qu'il y a un problème d'initialisation de la variable compteur.
    Quelle méthode as-tu choisie pour passer cette variable entre les différentes fonctions ?

    Sinon, est-ce que l'exemple suivant fonctionne ?

    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
    function test 
     
    t(1) = timer('timerfcn',@tim1,'executionmode','fixedrate','Period',1, ...
        'taskstoexecute',6);
    t(2) = timer('timerfcn',@tim2,'executionmode','fixedrate','Period',2, ...
        'StartDelay',2,'taskstoexecute',3,'stopfcn',@stop);
     
     
    start(t)
     
    function tim1(obj,event)
    fprintf('A\n');
     
    function tim2(obj,event)
    fprintf('B\n');
     
    function stop(obj,event)
    t = timerfindall;
    delete(t)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  12. #12
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Salut,

    Où et comment as-tu déclaré ta variable compteur ? Au pire, testes de rajouter :

    ... à la première ligne de ta fonction initialisation.

    Cordialement,
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  13. #13
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Bonjour Tachmou,

    Merci de prendre de ton temps pour me répondre. Je n'avais pas déclaré ma variable compteur (), mais même en le faisant, j'ai toujours le même message d'erreur.
    Voici mon code :

    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
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
     
    function melos
     
        persistent reponsejuste essais F_echan duree_note duree_ISI repet retard diodicho F_ref semitones transpo suffixe duree_sequence chaine handles compteur reponse nb_hits nb_FA...
            nb_miss nb_RC nb_essais rep
     
        initialisation
        synthese
        interface_melos8
     
        function interface_melos8
     
            %  Initialise et cache l'interface tant qu'elle est en construction.
            f = figure('Visible','off','Position',[360,150,900,560], 'Color', [0.7,0.85,1],'Menubar', 'none', 'Toolbar', 'none');
     
            %  Construction des composants
     
            BoutonCommencer    = uicontrol('Style','pushbutton',...
                                   'Position',[325,390,250,100],...
                                   'Fontname','Arial',...
                                   'String','Commencer',...
                                   'Fontsize', 24,...
                                   'Userdata',1,...
                                   'tag','commencer',...
                                   'BackgroundColor',[1 1 1],...
                                   'ForegroundColor',[0.2,0,0.4],...
                                   'Callback',{@BoutonCommencer_Callback});
     
     
            Bouton1            = uicontrol('Style','pushbutton',...
                                   'Position',[100,150,250,125],...
                                   'String','Pareil',...
                                   'Fontname','Arial',...
                                   'Fontsize', 24,...
                                   'Userdata',2,...
                                   'tag','bouton1',...
                                   'BackgroundColor',[1 1 1],...
                                   'ForegroundColor',[0.2,0,0.4],...    
                                   'Callback',{@Bouton1_Callback});
     
     
            Bouton2            = uicontrol('Style','pushbutton',...
                                   'Position',[550,150,250,125],...
                                   'String','Différent',... 
                                   'Fontname','Arial',...
                                   'Fontsize', 24,...
                                   'Userdata',3,...
                                   'tag','bouton2',...
                                   'BackgroundColor',[1 1 1],...
                                   'ForegroundColor',[0.2,0,0.4],...    
                                   'Callback',{@Bouton2_Callback});
     
            Rebours            = uicontrol('Style','text',...
                                   'unit','normalized', ...
                                   'Fontname','Arial',...
                                   'Fontsize', 24,...
                                   'position',[.3725 .55 .25 .07],...
                                   'Userdata',4,...
                                   'BackgroundColor',[1 1 1],...
                                   'tag','tx1',...
                                   'string','2.8');
     
            %Construction de la fenêtre
            set([f,BoutonCommencer,Bouton1,Bouton2],'Units','normalized'); % Initialise l'interface.
     
            set(f,'Name','Melos8')% Donne un nom à l'interface (apparait dans le titre de la fenetre.
            movegui(f,'center')% Déplace l'interface au centre de l'écran
            set(f,'Visible','on')%Rend l'interface visible.
     
            handles = guihandles(f);
     
            %Attribution des fonctions aux boutons
            function BoutonCommencer_Callback(hObject, eventdata)%s'exécute à la pression sur le bouton "commencer"
                set (handles.commencer,'Enable','Inactive');            
                lancement;
            end
     
     
            function Bouton1_Callback(hObject, eventdata, handles)%s'exécute à la pression sur le bouton "Paire1"
                reponse_1;
            end
     
     
            function Bouton2_Callback(hObject, eventdata, handles)%s'exécute à la pression sur le bouton "Paire2"
                reponse_2;
            end 
        end
     
        function initialisation %initialise les paramètres du test
            compteur = [];       
            rand('state', sum(100*clock)); % initialisation générateur nbs aléatoires
            nom_sujet = input('votre nom :  ','s');
            diodicho = input('dio (1), dicho grave à gauche (2), ou dicho grave à droite (3) :  ');
            retard = input('délai de la mélodie aigue, en nombre de notes (1 ou 3) :  ');
            duree_ISI = input('durée de l''ISI en secondes (.02 ou 0) :  ');
            essais = 4;
            duree_note = 0.02; % durée d'une note en secondes (non compris l'ISI qui suit)
            duree_sequence = 2.8; % c'est la durée des intervalles d'écoute/réponse, et aussi des intervalles de repos
            F_echan = 44100;
            F_ref = 700; % fréquence moyenne dans la mélodie grave
            semitones = 2; % pas de fréquence en demi-tons
            transpo = 15; % transposition en demi-tons
     
            if retard < 2
                suffixe = 1;
            else
                suffixe = 0;
            end
     
            repet = duree_sequence / (2*(duree_note + duree_ISI)) - suffixe;
     
            calib = input('Voulez-vous calibrer ? Entrez 1 si oui, 0 sinon :  ');
            if calib==1
                t = 5; % le son va durer 5 secondes
                temps = (0:1/F_echan:t)'; 
                F_calib = F_ref * 2^(transpo/24); % calibration à la fréquence moyenne des sons des séquences
                signal_sinus = 0.1 * sin(2*pi*F_calib*temps); % 0.1 est l'amplitude de chaque note
                son_pur = audioplayer(signal_sinus, F_echan, 24); 
                drapeau = 1;
                while drapeau==1
                    playblocking(son_pur); 
                    drapeau = input('Entrez 1 pour recommencer, 0 sinon :  ');
                end    
            end % fin de la calibration
     
            nb_hits = 0;
            nb_FA = 0;
            nb_miss = 0;
            nb_RC = 0;
            nb_essais = 0;
     
            compteur(1) = timer('timerfcn',@comptearebours,'executionmode','fixedrate','Period',5.6,'StartDelay',2.8,'TasksToExecute',essais);
            compteur(2) = timer('timerfcn',@creation, 'executionmode','fixedrate');
     
        end    
     
        function synthese
            reponsejuste = [ ];
            for i = 1:essais
                if rand < 0.5
                   correlation = 0;
                else
                   correlation = 1;
                end
            reponsejuste = [reponsejuste correlation]; %création du vecteur contenant les corrélation de la séquence
            end
     
            chaine = [ ; ];
            for i = 1:essais
                correl = 0;
                musiquebizarre = sequence(F_echan, duree_note, duree_ISI, repet, retard, diodicho, F_ref, semitones, transpo, correl, suffixe);
                chaine = [chaine musiquebizarre];
                correl = reponsejuste(i);
                musiquebizarre = sequence(F_echan, duree_note, duree_ISI, repet, retard, diodicho, F_ref, semitones, transpo, correl, suffixe);
                chaine = [chaine musiquebizarre];
            end
        end
     
        function creation(obj,event)     
            silence_pour_windows7 = [zeros(1, F_echan/5) ; zeros(1, F_echan/5)];
            chaine = [chaine silence_pour_windows7]'; % passage en colonnes
            duson = audioplayer(chaine, F_echan, 24);
            playblocking(duson);
            stop(timerfind);
            delete(timerfind);
        end
     
        function lancement
            start(compteur);
        end
     
        function comptearebours(obj,event)
     
            boutonoff;
            boutonorange;
            boutonon;
            analyse;
            nb_essais = nb_essais+1;
            rep = reponsejuste(nb_essais);
            function boutonoff
                set(handles.tx1,'string',2.8);
                set(handles.tx1,'BackgroundColor',[1 0 0]);%le bouton est rouge
                set(handles.bouton1,'Enable','Inactive');
                set(handles.bouton2,'Enable','Inactive');
                pause(2);
            end
     
            function boutonorange
                set(handles.tx1,'BackgroundColor',[1 0.5 0.2]);%le bouton est orange
                pause(0.8);
            end
     
            function boutonon
                set(handles.tx1,'BackgroundColor',[0 1 0]);%le bouton est vert
                set(handles.bouton1,'Enable','On');
                set(handles.bouton2,'Enable','On');
                m = 100*(str2num(get(handles.tx1,'string')));       
                for i = 0:0.01:m
                    n = get(handles.tx1,'string');
                    n = str2double(n)-0.01;
                    set(handles.tx1,'string',num2str(n));
                    drawnow;
                end
                set(handles.tx1,'BackgroundColor',[1 0 0]);%le bouton est rouge
            end
        end
     
        function reponse_1
               if rep ==1              
                  set(handles.bouton1,'BackgroundColor', [0 1 0]); %si la réponse est correcte le bouton est colorié en vert
                  nb_hits = nb_hits + 1
                  set(handles.bouton1,'Enable','inactive');
                  set(handles.bouton2,'Enable','inactive');
               else  
                  set(handles.bouton1,'BackgroundColor', [1 0 0]); %si la réponse est incorrecte le bouton est colorié en rouge
                  nb_FA = nb_FA + 1
                  set(handles.bouton1,'Enable','inactive');
                  set(handles.bouton2,'Enable','inactive');
               end
               set(handles.bouton1, 'BackgroundColor', [1 1 1]); % blanc
               drawnow;
        end
     
        function reponse_2
               if rep ==1              
                  set(handles.bouton2,'BackgroundColor', [0 1 0]); %si la réponse est correcte le bouton est colorié en vert
                  nb_miss = nb_miss + 1
                  set(handles.bouton1,'Enable','inactive');
                  set(handles.bouton2,'Enable','inactive');
               else  
                  set(handles.bouton2,'BackgroundColor', [1 0 0]); %si la réponse est incorrecte le bouton est colorié en rouge
                  nb_RC = nb_RC + 1
                  set(handles.bouton1,'Enable','inactive');
                  set(handles.bouton2,'Enable','inactive');
               end
               set(handles.bouton2, 'BackgroundColor', [1 1 1]); % blanc
               drawnow;
        end
     
        function analyse
            nb_hits
            nb_FA
            nb_RC
            nb_miss
        end
     
        function [musiquebizarre] = sequence(F_echan, duree_note, duree_ISI, repet, retard, diodicho, F_ref, semitones, transpo, correl, suffixe)
     
        function [vecteur_note] = note(F_echan, nb_echan_son, nb_echan_ISI, F) % fabrique une note suivie d'un ISI
     
    end
    et mon message d'erreur :
    ??? The following error occurred converting from timer to double:
    Error using ==> double
    Conversion to double from timer is not possible.

    Error in ==> melos>initialisation at 131
    compteur(1) = timer('timerfcn',@comptearebours,'executionmode','fixedrate','Period',5.6,'StartDelay',2.8,'TasksToExecute',essais);

    Error in ==> melos at 6
    initialisation
    Les timers marchent isolément, c'est, je pense, le tableau de timers que je n'arrive pas à faire marcher, et je ne vois pas pourquoi ...

  14. #14
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    C'est censé fonctionner tout ça

    Plus sérieusement, la technique des fonctions imbriquées est à utiliser avec beaucoup de précautions.

    L'ordre de définition des variables et des fonctions dans le code est très important.

    Tu dois par exemple définir la fonction initialisation tout au début du code :
    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
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    function melos
     
        persistent reponsejuste essais F_echan duree_note duree_ISI repet retard diodicho F_ref semitones transpo suffixe duree_sequence chaine handles  reponse nb_hits nb_FA...
            nb_miss nb_RC nb_essais rep
     
        initialisation
        synthese
        interface_melos8
     
            function initialisation %initialise les paramètres du test
    %         compteur = [];       
            rand('state', sum(100*clock)); % initialisation générateur nbs aléatoires
            nom_sujet = input('votre nom :  ','s');
            diodicho = input('dio (1), dicho grave à gauche (2), ou dicho grave à droite (3) :  ');
            retard = input('délai de la mélodie aigue, en nombre de notes (1 ou 3) :  ');
            duree_ISI = input('durée de l''ISI en secondes (.02 ou 0) :  ');
            essais = 4;
            duree_note = 0.02; % durée d'une note en secondes (non compris l'ISI qui suit)
            duree_sequence = 2.8; % c'est la durée des intervalles d'écoute/réponse, et aussi des intervalles de repos
            F_echan = 44100;
            F_ref = 700; % fréquence moyenne dans la mélodie grave
            semitones = 2; % pas de fréquence en demi-tons
            transpo = 15; % transposition en demi-tons
     
            if retard < 2
                suffixe = 1;
            else
                suffixe = 0;
            end
     
            repet = duree_sequence / (2*(duree_note + duree_ISI)) - suffixe;
     
            calib = input('Voulez-vous calibrer ? Entrez 1 si oui, 0 sinon :  ');
            if calib==1
                t = 5; % le son va durer 5 secondes
                temps = (0:1/F_echan:t)'; 
                F_calib = F_ref * 2^(transpo/24); % calibration à la fréquence moyenne des sons des séquences
                signal_sinus = 0.1 * sin(2*pi*F_calib*temps); % 0.1 est l'amplitude de chaque note
                son_pur = audioplayer(signal_sinus, F_echan, 24); 
                drapeau = 1;
                while drapeau==1
                    playblocking(son_pur); 
                    drapeau = input('Entrez 1 pour recommencer, 0 sinon :  ');
                end    
            end % fin de la calibration
     
            nb_hits = 0;
            nb_FA = 0;
            nb_miss = 0;
            nb_RC = 0;
            nb_essais = 0;
     
            compteur(1) = timer('timerfcn',@comptearebours,'executionmode','fixedrate','Period',5.6,'StartDelay',2.8,'TasksToExecute',essais);
            compteur(2) = timer('timerfcn',@creation, 'executionmode','fixedrate');
     
            end    
     
        function interface_melos8
     
            %  Initialise et cache l'interface tant qu'elle est en construction.
            f = figure('Visible','off','Position',[360,150,900,560], 'Color', [0.7,0.85,1],'Menubar', 'none', 'Toolbar', 'none');
     
            %  Construction des composants
     
            BoutonCommencer    = uicontrol('Style','pushbutton',...
                                   'Position',[325,390,250,100],...
                                   'Fontname','Arial',...
                                   'String','Commencer',...
                                   'Fontsize', 24,...
                                   'Userdata',1,...
                                   'tag','commencer',...
                                   'BackgroundColor',[1 1 1],...
                                   'ForegroundColor',[0.2,0,0.4],...
                                   'Callback',{@BoutonCommencer_Callback});
     
     
            Bouton1            = uicontrol('Style','pushbutton',...
                                   'Position',[100,150,250,125],...
                                   'String','Pareil',...
                                   'Fontname','Arial',...
                                   'Fontsize', 24,...
                                   'Userdata',2,...
                                   'tag','bouton1',...
                                   'BackgroundColor',[1 1 1],...
                                   'ForegroundColor',[0.2,0,0.4],...    
                                   'Callback',{@Bouton1_Callback});
     
     
            Bouton2            = uicontrol('Style','pushbutton',...
                                   'Position',[550,150,250,125],...
                                   'String','Différent',... 
                                   'Fontname','Arial',...
                                   'Fontsize', 24,...
                                   'Userdata',3,...
                                   'tag','bouton2',...
                                   'BackgroundColor',[1 1 1],...
                                   'ForegroundColor',[0.2,0,0.4],...    
                                   'Callback',{@Bouton2_Callback});
     
            Rebours            = uicontrol('Style','text',...
                                   'unit','normalized', ...
                                   'Fontname','Arial',...
                                   'Fontsize', 24,...
                                   'position',[.3725 .55 .25 .07],...
                                   'Userdata',4,...
                                   'BackgroundColor',[1 1 1],...
                                   'tag','tx1',...
                                   'string','2.8');
     
            %Construction de la fenêtre
            set([f,BoutonCommencer,Bouton1,Bouton2],'Units','normalized'); % Initialise l'interface.
     
            set(f,'Name','Melos8')% Donne un nom à l'interface (apparait dans le titre de la fenetre.
            movegui(f,'center')% Déplace l'interface au centre de l'écran
            set(f,'Visible','on')%Rend l'interface visible.
     
            handles = guihandles(f);
     
            %Attribution des fonctions aux boutons
            function BoutonCommencer_Callback(hObject, eventdata)%s'exécute à la pression sur le bouton "commencer"
                set (handles.commencer,'Enable','Inactive');            
                lancement;
            end
     
     
            function Bouton1_Callback(hObject, eventdata, handles)%s'exécute à la pression sur le bouton "Paire1"
                reponse_1;
            end
     
     
            function Bouton2_Callback(hObject, eventdata, handles)%s'exécute à la pression sur le bouton "Paire2"
                reponse_2;
            end 
     
        end
     
        function comptearebours(obj,event)
     
            boutonoff;
            boutonorange;
            boutonon;
            analyse;
            nb_essais = nb_essais+1;
            rep = reponsejuste(nb_essais);
            function boutonoff
                set(handles.tx1,'string',2.8);
                set(handles.tx1,'BackgroundColor',[1 0 0]);%le bouton est rouge
                set(handles.bouton1,'Enable','Inactive');
                set(handles.bouton2,'Enable','Inactive');
                pause(2);
            end
     
            function boutonorange
                set(handles.tx1,'BackgroundColor',[1 0.5 0.2]);%le bouton est orange
                pause(0.8);
            end
     
            function boutonon
                set(handles.tx1,'BackgroundColor',[0 1 0]);%le bouton est vert
                set(handles.bouton1,'Enable','On');
                set(handles.bouton2,'Enable','On');
                m = 100*(str2num(get(handles.tx1,'string')));       
                for i = 0:0.01:m
                    n = get(handles.tx1,'string');
                    n = str2double(n)-0.01;
                    set(handles.tx1,'string',num2str(n));
                    drawnow;
                end
                set(handles.tx1,'BackgroundColor',[1 0 0]);%le bouton est rouge
            end
        end
     
     
     
        function synthese
            reponsejuste = [ ];
            for i = 1:essais
                if rand < 0.5
                   correlation = 0;
                else
                   correlation = 1;
                end
            reponsejuste = [reponsejuste correlation]; %création du vecteur contenant les corrélation de la séquence
            end
     
            chaine = [ ; ];
            for i = 1:essais
                correl = 0;
                musiquebizarre = sequence(F_echan, duree_note, duree_ISI, repet, retard, diodicho, F_ref, semitones, transpo, correl, suffixe);
                chaine = [chaine musiquebizarre];
                correl = reponsejuste(i);
                musiquebizarre = sequence(F_echan, duree_note, duree_ISI, repet, retard, diodicho, F_ref, semitones, transpo, correl, suffixe);
                chaine = [chaine musiquebizarre];
            end
        end
     
        function creation(obj,event)     
            silence_pour_windows7 = [zeros(1, F_echan/5) ; zeros(1, F_echan/5)];
            chaine = [chaine silence_pour_windows7]'; % passage en colonnes
            duson = audioplayer(chaine, F_echan, 24);
            playblocking(duson);
            stop(timerfind);
            delete(timerfind);
        end
     
        function lancement
            start(compteur);
        end
     
        function reponse_1
               if rep ==1              
                  set(handles.bouton1,'BackgroundColor', [0 1 0]); %si la réponse est correcte le bouton est colorié en vert
                  nb_hits = nb_hits + 1
                  set(handles.bouton1,'Enable','inactive');
                  set(handles.bouton2,'Enable','inactive');
               else  
                  set(handles.bouton1,'BackgroundColor', [1 0 0]); %si la réponse est incorrecte le bouton est colorié en rouge
                  nb_FA = nb_FA + 1
                  set(handles.bouton1,'Enable','inactive');
                  set(handles.bouton2,'Enable','inactive');
               end
               set(handles.bouton1, 'BackgroundColor', [1 1 1]); % blanc
               drawnow;
        end
     
        function reponse_2
               if rep ==1              
                  set(handles.bouton2,'BackgroundColor', [0 1 0]); %si la réponse est correcte le bouton est colorié en vert
                  nb_miss = nb_miss + 1
                  set(handles.bouton1,'Enable','inactive');
                  set(handles.bouton2,'Enable','inactive');
               else  
                  set(handles.bouton2,'BackgroundColor', [1 0 0]); %si la réponse est incorrecte le bouton est colorié en rouge
                  nb_RC = nb_RC + 1
                  set(handles.bouton1,'Enable','inactive');
                  set(handles.bouton2,'Enable','inactive');
               end
               set(handles.bouton2, 'BackgroundColor', [1 1 1]); % blanc
               drawnow;
        end
     
        function analyse
            nb_hits
            nb_FA
            nb_RC
            nb_miss
        end
     
        function [musiquebizarre] = sequence(F_echan, duree_note, duree_ISI, repet, retard, diodicho, F_ref, semitones, transpo, correl, suffixe)
     
        end
        function [vecteur_note] = note(F_echan, nb_echan_son, nb_echan_ISI, F) % fabrique une note suivie d'un ISI
        end
     
    end
    Même comme ça, je ne peux pas garantir que cela fonctionnera...

    Sinon, quel est l'intérêt d'utiliser des variables persistent dans ton code ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  15. #15
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Merci Dut, vraiment merci pour le temps que tu passes à m'aider !

    Ceci dit, ça ne veut toujours par marcher , et j'ai toujours le même message d'erreur. Message d'erreur que je ne comprends pas d'ailleurs, j'essaie juste de faire un vecteur contenant des timers, pas de convertir mon timer en "double". Je ne savais pas que l'ordre était si important dans les fonctions imbriquées, mais comment faire pour ne pas en utiliser ?

    Par ailleurs, je définis des variables dans persistent pour pouvoir les calculer dans une fonction et m'en resservir dans une autre. Ce n'est surement pas la plus clean des manières de faire, mais comme j'apprends sur le tas..

  16. #16
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    D'ailleurs, c'est vraiment dans la création de mon vecteur de timers que le problème se pose.

    Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function initialisation %initialise les paramètres du test
            compteur = [];       
            t1 = timer('timerfcn',@creation, 'executionmode','fixedrate');
            t2 = timer('timerfcn',@comptearebours,'executionmode','fixedrate','Period',5.6,'StartDelay',2.8,'TasksToExecute',essais);
     
            compteur(1) = t1;
            compteur(2) = t2;
    J'ai à nouveau cette erreur :
    ??? The following error occurred converting from timer to double:
    Error using ==> double
    Conversion to double from timer is not possible.

    Error in ==> melos>initialisation at 59
    compteur(1) = t1;

    Error in ==> melos at 6
    initialisation
    Pourtant je ne vois pas d'autres façons de remplir un vecteur..

  17. #17
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Citation Envoyé par Meloody Voir le message
    Par ailleurs, je définis des variables dans persistent pour pouvoir les calculer dans une fonction et m'en resservir dans une autre. Ce n'est surement pas la plus clean des manières de faire, mais comme j'apprends sur le tas..
    Je pense que c'est ce qui cloche avec ton code.

    Essaie en mettant global à la place de persistent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    global reponsejuste essais F_echan duree_note duree_ISI repet retard diodicho F_ref semitones transpo suffixe duree_sequence chaine handles  reponse nb_hits nb_FA...
            nb_miss nb_RC nb_essais rep
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  18. #18
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Ça ne marche pas non plus, le programme s'arrête toujours pour le remplissage du tableau, avec le même message d'erreur...

    ??? The following error occurred converting from timer to double:
    Error using ==> double
    Conversion to double from timer is not possible.
    
    Error in ==> melos>initialisation at 56
            compteur(1) = timer('timerfcn',@creation, 'executionmode','fixedrate');
    
    Error in ==> melos at 6
        initialisation
    Vois-tu une autre façon de remplir mon vecteur compteur ? ou une autre façon de démarrer mes timers simultanément ? C'est râlant, ils marchent isolément...

    (au passage, le code que tu avais mis plus haut marche bien chez moi, j'avais oublié de te le dire )

  19. #19
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Euh, je suis peut-être à côté de la plaque, je ne connais pas trop cette manière de programmer... j'ai un truc un peu à moi donc du coup j'ai un peu de mal des fois... mais tu ne peux pas juste déclarer ton compteur sans que ce soit "persistent" ou "global" ? Tu es dans des fonctions imbriquées, donc si tu mets juste dans ta fonction englobante, à la première ligne : compteur = [] sans spécifier que ce soit global ou autre, tu ne devrais pas avoir de soucis, puisque dans ce cas là tu te remets correctement exactement dans le même cas que quand ça fonctionnait (car si je ne me trompe pas, tu as fait des tests à part, et seul, ça marche... donc il n'y a pas de raisons que ça ne fonctionne pas dans des fonctions imbriquées). Bon après je n'ai pas testé, mais je n'ai pas trop le temps là dsl...

    Parce que là, il essaye de te faire une conversion de type... ce qui veut dire pour moi (du point de vue d'un programmeur basique en C/C++) que ta variable était d'un type différent lors de sa déclaration (double) or là tu utilises persistent pour le déclarer : donc il faut croire que persistent gère des "doubles" et pas des "timers" ==> d'où l'erreur. C'est pour ça : vire le persistent (au moins pour ton "timer") et vois ce que ça fait.

    Tu travailles sous quelle version de matlab ? Si tu es sur les dernières versions, je te conseilles de réfléchir à l'utilisation des classes. Si tu es sur une ancienne version, je pourrai te filer un lien qui t'expliques comment bidouiller des classes facilement soi-même (c'est cette méthode que j'utilise en fait).

    J'y réfléchirai peut-être en fin de journée si tu n'as toujours pas réussi à corriger le bug.
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  20. #20
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Pour continuer le raisonnement de tachmou, si tu n'as pas besoin d'initialiser compteur en persistent ou global, tu peux tenter un
    avant de l'utiliser avec compteur(1) = t1;

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Plusieurs action simultané
    Par topolino dans le forum Windows Forms
    Réponses: 5
    Dernier message: 05/06/2009, 11h03
  2. [CrystalReport]ouvrir plusieur états simultanément
    Par mcrocher dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 23/03/2005, 17h14
  3. Réponses: 6
    Dernier message: 15/04/2004, 11h04
  4. [KeyEvent] plusieurs touches simultanées enfoncées
    Par gege2mars dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 07/01/2004, 11h44
  5. [Syntaxe] Action simultanée sur plusieurs élements
    Par FranT dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/03/2003, 20h20

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