2017-10-06 5 views
1

J'ai trois fonctions qui sont à leur tour appelées par la fonction principale où le résultat final est un tracé de couleurs en mouvement d'une fonction sinus (ou autre). La fonction principale le fait via un objet timer.Fonction Matlab Timer pour tracer une fonction

Je suis capable de créer un tracé statique mais je n'arrive pas à le mettre à jour en fonction de la valeur fournie dans mon objet temporisateur.

Je reçois le message d'erreur suivant:

Erreur lors de l'évaluation TimerFcn pour timer 'minuterie 19'
objet non valide ou supprimé.

Le code de la fenêtre principale est la suivante:

clc; clear all; close all;  
rows = 1; 
cols = 30;  
t = timer('StartDelay', 0.05, 'Period', 0.05, 'TasksToExecute', 1000, ... 
      'ExecutionMode', 'fixedRate'); 
t.StartFcn = {@window, rows, cols}; 
t.TimerFcn = {@window_timer}; 
t.StopFcn = @(x,y)disp('end');  
start(t) 

code de la fonction appelée par la fonction de minuterie:

function window_timer(obj, event) 
    imgh = get(obj,'UserData'); 
    myMat = get(imgh,'CData'); 

    myMat = myMat_new(myMat); 

    set(imgh,'CData',myMat); 
    drawnow; 
    pause(0.02); 
    set(obj,'UserData',imgh); 
end 

Enfin, la fonction de remplacement des valeurs de la matrice aléatoire avec la fonction sinusoïdale

function [ myMat ] = myMat_new(myMat)  
    x = -pi:1/10:pi; 
    myMat = sin(x);   
end 

Qu'est-ce que je fais de mal?

+0

Comment savez-vous qu'il ne fonctionne pas? Basé sur votre code, les "nouvelles" données d'image vont ressembler aux "vieilles" données d'image parce que "myMat_new" retourne toujours la même sortie – Suever

+0

Donc l'idée est que le graphique devrait afficher une onde sinusoïdale mappée en couleur de mise à jour jusqu'à le programme quitte la boucle. Comme je ne vois pas le graphique "en mouvement", je peux dire que le code ne fonctionne pas. –

+0

Vous n'êtes pas en train de mettre à jour les données. Vous remplacez simplement par les mêmes données à chaque fois – Suever

Répondre

0

Lorsque vous exécutez votre minuterie le « obj » est créé pour cette ligne de code est valide:

imgh = get(obj,'UserData'); 

mais je ne vois aucune partie montrant que imgh a une propriété « CData ». imgh dans votre code est un objet timer et non un objet graphique.

+0

La deuxième ligne de la fonction "window_timer" montre que imgh a la propriété 'CData'. –