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:
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
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;
Matlab ne reconnait pas alors ma sortie analogique. Bizarre parce qu'il l'a reconnu dans la "StopFcn"!
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'.
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:
avec
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);
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.
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
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
Partager