Bonjour à tous,
j'essaie de faire marcher un timer dans un programme GUI mais j'arrive pas. En fait mon timer sert à envoyer sur une carte NI DAQ usb 6008 un échantillon d'un signal sinusoïdal toutes les 0.005 secondes à partir du moment où je cliques sur un bouton start.

J'ai écrit alors la callback du bouton start comme suit:
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

function start_Callback(hObject, eventdata, handles)
            %Je récupère la fréquence, le nb de période et le pourcentage   d'amplitude du signal saisis par l'utilisateur

            freq=str2double(get(handles.frequencyValue,'String'));
            nb_period=str2double(get(handles.PeriodsNbValue,'String'));
            percentage=str2double(get(handles.AmplitudeValueStatic,'String'));
            amplitude=2.5*(percentage/100);
            
            %Number of samples
            nb_samples=(1/(freq*0.005))*nb_period;
            t = linspace(0,2*pi*nb_period,nb_samples);
            data=sin(t)+amplitude;
            i=1;
   
            t1 = timer('TimerFcn',  'putsample(handles.AO,data(i));i=i+1;',...
                  'StartDelay',0,'StopFcn',{'myStopFunc',handles.AO},...
                  'ExecutionMode','fixedRate',...
                  'Period',0.005);
              
            start(t1);
            handles.t1=t1;
sachant que handles.AO est ma sortie analogique, j'avais l'erreur suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
??? Error while evaluating TimerFcn for timer 'timer-90' 

Undefined function or variable 'handles.AO'.
Matlab ne reconnait pas alors ma sortie analogique. Bizarre parce qu'il l'a reconnu dans la "StopFcn"!
J'ai essayé alors de changer la syntaxe en mettant les deux lignes dans une fonction myCallbackFunc comme je l'ai fait pour la "StopFnc" comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5

t1 = timer('TimerFcn',  {'myCallbackFunc', AO.handles,data,k},...
                  'StartDelay',0,'StopFcn',{'myStopFunc',handles.AO},...
                  'ExecutionMode','fixedRate',...
                  'Period',0.005);
avec

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
function [] =myCallbackFunc(object,event,channel,data,k)
putsample(channel,data(k));
k=k+1;
end
En faisant ça matlab reconnait ma sortie analogique mais il y a un petit soucis par rapport à l'incrémentation de la variable k. En fait, à chaque fois où matlab appelle la fonction "myCallbackFunc", la variable k est initialisé à sa première valeur(k=1), ce qui est tout à fait logique.


Est ce que vous voyez comment faire pour résoudre ce problème sachant que quand je n'utilisais pas une interface graphique mon timer marchait très bien et j'arrive à avoir mon sinus?


Merci en avance