L'esempio che segue permette di inviare dati numerici da Arduino a Matlab tramite la porta seriale e viceversa.

Codice Arduino

Il codice qui sotto riportato legge ogni 100 millisecondi un dato dal convertitore A/D (pin A0) e lo invia in seriale usando come terminatore il carattere \n (newline):

void setup() {
Serial.begin(9600); // Inizializza la porta seriale a 9600 bps
}

void loop() {
int valore_da_leggere = analogRead(A0); // Leggi il valore del pin analogico A0
Serial.println(valore_da_leggere); // Invia il valore letto tramite la porta seriale
delay(100); // Attendere 100 millisecondi
}
Codice Matlab

Nel codice Matlab, la porta seriale viene aperta e configurata per leggere e scrivere dati a 9600 bps.

Il terminatore di riga viene impostato su "\n" (line feed) per indicare il fine della riga di dati inviata da Arduino.

Matlab legge quindi un valore uint16 dalla porta seriale, lo visualizza sulla console e invia un valore numerico uint16 di 42 alla porta seriale per essere letto da Arduino (quest'ultima istruzione è solo un esempio di scrittura che non viene gestita dal codice Arduino proposto precedentemente):

s = serialport('COM3', 9600); % Crea e configura la porta seriale COM3 a 9600 bps
configureTerminator(s,'LF'); % Configura il terminatore di riga
valore_letto = read(s, 1, 'uint8'); % Leggi un valore uint8 dalla porta seriale
disp(valore_letto); % Mostra il valore letto sulla console di MATLAB
write(s, 42, 'uint8'); % Invia il valore numerico 42 tramite la porta seriale

Il codice proposto fa una sola lettura. Qualora si voglia fare una lettura continua è possibile utilizzare per esempio un ciclo while:

s = serialport('COM3', 9600); % Crea e configura la porta seriale COM3 a 9600 bps
configureTerminator(s, 'LF'); % Configura il terminatore di riga

while(1)
if(s.NumBytesAvailable > 0)
valore_letto = read(s, 'uint8'); % Leggi un valore uint16 dalla porta seriale
disp(valore_letto); % Mostra il valore letto sulla console di MATLAB
end
end

Il codice controlla se ci sono byte disponibili nella porta seriale usando la proprietà NumBytesAvailable dell'oggetto serialport. Se ci sono byte disponibili, il valore uint16 viene letto dalla porta seriale e visualizzato sulla console di Matlab usando la funzione disp(). Se non ci sono byte disponibili, il ciclo continua ad eseguirsi fino a quando nuovi dati sono disponibili nella porta seriale.

Ultime modifiche: mercoledì, 3 gennaio 2024, 20:58