Salve a tutti,
sto cercando di far comunicare Arduino e Matlab tramite la porta seriale. Il mio progetto è quello di leggere un sensore di temperatura e fare un grafico su Matlab con i valori rilevati.
Ho scritto il codice su arduino e lo sketch funziona e segna la temperatura giusta. Su Matlab ho scritto questo codice che memorizza in un vettore i dati che prende dalla porta seriale.
Il mio problema è questo:
prima di testare il funzionamento del controllo della temperatura, ho creato uno sketch che semplicemente mi stampa un valore sul monitor seriale in loop, per controllare se su Matlab il valore che prende dalla porta seriale è giusto. Il valore che mi esce però è totalmente sballato, infatti mi esce un 49 (al posto del 10 che invece faccio stampare sul monitor seriale di arduino) e non ho capito se devo fare qualche tipo di conversione.
Qualcuno ha mai provato a collegare Arduino a Matlab e può aiutarmi?
Questo è il mio codice Matlab. In output mi da delle oscillazioni tra il numero 48 e il numero 49 e non ho capito cosa sto sbagliando!
%% Create serial object for Arduino
s = serial('/dev/cu.usbmodem1411'); % CREO UN OGGETTO PORTA SERIALE
%% Connect the serial port to Arduino
s.InputBufferSize = 1; % read only one byte every time
try // CATTURA DELL'ERRORE
fopen(s); //APRO LA PORTA
catch err
fclose(instrfind);
error('Make sure you select the correct Port where the Arduino is connected.');
end
%% Creo una finestra per monitorare live i dati
Tmax = 20; % Tempo totale per la collezione dei dati (s)
figure,
grid on,
xlabel ('Time (s)'), ylabel('Data (8-bit)'),
axis([0 Tmax+1 -10 300]),
%% Leggo e plotto i dati che vengono da Arduino
Ts = 0.2; % Sampling time (s)
i = 0;
data = 0;
t = 0;
tic % Start timer
while toc <= Tmax
i = i + 1;
%% Leggo i dati
[b]data(i) = fread(s)[/b]
%% Read time stamp
% If reading faster than sampling rate, force sampling time.
% If reading slower than sampling rate, nothing can be done. Consider
% decreasing the set sampling time Ts
t(i) = toc;
if i > 1
T = toc - t(i-1);
while T < Ts
T = toc - t(i-1);
end
end
t(i) = toc;
%% Plot live data
if i > 1
line([t(i-1) t(i)],[data(i-1) data(i)])
drawnow
end
end
fclose(s);