Fala galera!! Vou deixar de forma bem esquemática a minha situação para facilitar:
O que preciso??
Fiz um código no arduino para enviar dados de 2 sensores ultrasom via serial. Preciso de um código no Matlab para receber os valores dos dois sensores e plotar um ou dois (só um de preferência) gráficos com os resultados pelo tempo.
O que tenho??
Como falei, já fiz o código no arduino. Também tenho um código no Matlab onde só consigo receber 1 valor, ou seja, o código é útil quando envio apenas 1 dado pelo serial (seria de 1 sensor). Detalhe: o código do Matlab também salva os dados em um arquivo .txt .
Código no arduino (apenas o trecho com o envio dos dados via serial):
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(sensor1);
Serial.println(sensor2);
}
Código no Matlab:
delete(instrfindall); %limpa todos os instrumentos anterioarmente abertos na serial
clear all;
close all;
clc;
s = serial('COM5'); % atribui o objeto à porta serial
set(s, 'InputBufferSize', 16); % Número de bytes no buffer de entrada
set(s, 'FlowControl', 'hardware');
set(s, 'BaudRate', 9600);
set(s, 'Parity', 'none');
%s.ReadAsyncMode = 'continuous';
set(s, 'DataBits', 8); % Procura por "Serial Configurada" no help
set(s, 'StopBit', 1);
set(s, 'Timeout', 1000); % Tempo em segundos que o matlab aguarda por novos dados.
disp(get(s, 'Name')); % Mostra o nome "Serial - COM5"
prop(1) = (get(s, 'BaudRate')); % Prop é apenas um vetor de strings que nesse caso tem 4 posições
prop(2) = (get(s, 'DataBits'));
prop(3) = (get(s, 'StopBit'));
prop(4) = (get(s, 'InputBufferSize'));
disp(['Port Setup Done!!', num2str(prop)]); % help num2str: converte numeros para uma string
fopen(s); % Abre a porta serial.
t=1;
disp('Running');
while(t <= 5) % Executa 100 ciclos - se você não consegue ver o símbolo, isto é sinal de "menos de"
a = fgetl(s); % fread(a, 4, 'single');% ('SIZE', 16.000, 'PRECISION','%f');%Reads the data from
fprintf('%s', a);
x(t) = t*0.100; % Multiplicando pela taxa de amostragem % x(t) e y(t) são para construir um
y(t) = str2double(a); % a é uma string, srt2num converte uma string para um número
t = t+1;
a = 0; % Limpa o buffer
end
time = clock;
adress = 'D:\Matlab\Dados_';
dia = num2str(time(3));
mes = num2str(time(2));
ano = num2str(time(1));
horas = num2str(time(4));
minutos = num2str(time(5));
nome_do_arquivo = strcat(adress,dia,'-',mes,'-', ano,'-',horas,'-',minutos,'.txt.');
id_do_arquivo = fopen(nome_do_arquivo,'wt'); % wt=write, refere-se à ação que se deseja fazer
t=1;
while(t <= 5)
fprintf(id_do_arquivo,'\t%5.2f\t%8.2f\n',x(t),y(t));
t = t+1;
end
fclose(id_do_arquivo);
fclose(s);
plot(x,y)
Agradeço muito se alguém puder ajudar!!