Clear all
clc
%User Defined Properties
serialPort = 'COM11'; % definizione della porta COM #
plotTitle = 'Riferimento'; % titolo del primo grafico
xLabel = 'Time (s)'; % etichetta per l'asse x
yLabel = 'Posizione angolare motore voluta'; % etichetta per l'asse y
plotTitle2 = 'Uscita Inner Loop'; % titolo del secondo grafico
xLabel2 = 'Time (s)'; % etichetta per l'asse x
yLabel2 = 'Posizione angolare motore'; % etichetta per l'asse y
plotGrid = 'on'; % 'off' per eliminare la griglia
min = -500; % estremo inferiore dell'asse y
max = 500; % estremo superiore dell'asse y
scrollWidth = 100; % il periodo mostrato nel grafico (ampiezza dell'asse x)
delay = .01; % ritardo necessario per l'aggiornamento del grafico
%Definizione variabili
time = 0;
data = 0;
count = 0;
time1 = 0;
data1 = 0;
count1 = 0;
subplot(1,2,1),x = plot(time,data,'LineWidth', 2, 'Color', 'r');
title(plotTitle,'FontSize',25);
xlabel(xLabel,'FontSize',15);
ylabel(yLabel,'FontSize',15);
axis([0 1 min max]);
grid(plotGrid);
subplot(1,2,2),y = plot(time,data,'LineWidth', 2, 'Color', 'b');
title(plotTitle2,'FontSize',25);
xlabel(xLabel2,'FontSize',15);
ylabel(yLabel2,'FontSize',15);
axis([0 1 min max]);
grid(plotGrid);
%Aprtura porta seriale COM
s = serial(serialPort);
set(s,'BaudRate',9600);
disp('CHIUDERE IL GRAFICO PER TERMINARE LA SESSIONE');
fopen(s);
%dat = fscanf(s,'%f'); %Lettura dati float dalla porta seriale
%fprintf('prima del while: %f \n ', dat);
tic
while ishandle(x) %Il loop è attivo fino alla chiusura del grafico
dat = fscanf(s,'%f'); %Lettura dell'angolazione di riferimento dalla porta seriale
fprintf('Primo dato letto %f \n ', dat);
if(~isempty(dat) && isfloat(dat)) %Controllo sulla correttezza del dato
count = count + 1;
time(count) = toc; %Tempo passato dal tic
data(count) = dat(1); %Salvataggio del primo elemento letto nel vettore data
fprintf('data(count): %f \n ', data(count));
fprintf('dat(1): %f \n ', dat(1));
%Impostazione dei valori sugli assi in base allo scorrere del tempo
if(scrollWidth > 0)
set(x,'XData',time(time > time(count)-scrollWidth),'YData',data(time > time(count)-scrollWidth));
axis([time(count)-scrollWidth time(count) min max]);
else
set(x,'XData',time,'YData',data);
axis([0 time(count) min max]);
end
%Permettere a MATLAB di aggiornare il grafico
pause(delay);
end
dat1 = fscanf(s,'%f'); %Lettura dell'angolazione raggiunta dallo sterzo
fprintf('Secondo dato letto %f \n ', dat1);
if(~isempty(dat1) && isfloat(dat1))
count1 = count1 + 1;
time1(count1) = toc;
data1(count1) = dat1(1);
fprintf('data1(count1): %f \n ', data1(count1));
fprintf('dat1(1): %f \n ', dat1(1));
if(scrollWidth > 0)
set(y,'XData',time1(time1 > time1(count1)-scrollWidth),'YData',data1(time1 > time1(count1)-scrollWidth));
axis([time1(count1)-scrollWidth time1(count1) min max]);
else
set(y,'XData',time1,'YData',data1);
axis([0 time1(count1) min max]);
end
pause(delay);
end
end
%Close Serial COM Port and Delete useless Variables
fclose(s);
clear all;
disp('SESSIONE TERMINATA');