problema trasmissione dati da Arduino a Matlab tramite seriale

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);

Un suggerimento: 48 e 49 sono i codici ASCII dei caratteri 0 e 1, rispettivamente :).

Ok grazie! E quindi in qualche modo dovrei convertire quei valori ascii in valori decimali? C'è qualche funzione in matlab che lo fa? :slight_smile:

Ho trovato la funzione Matlab per la conversione, ovvero char!

Suggerimento semplice ma preziosissimo! Grazie ancora :smiley: