Ciao a tutti, sono nuovo qui, spero di aver postato nel topic giusto.
ho un problema di comunicazione con la seriale tra matlab e arduino (possibile che la velocita cambi a seconda del verso di comunicazione?)
ho scritto uno script in matlab che dovrebbe fare questo: ogni 500 ms inviare un bit sulla porta parallela ad un apparecchiatura connessa ad un sensore sull' arduino.
per sincronizzare il tutto mando attraverso la seriale con matlab un valore sull'arduino.
larduino appena mi legge il valore sulla seriale si salva il tempo T0 in microsecondi
500ms dopo matlab manda un ttl sulla porta parallela ( di seguito il sensore legge il bit e salva il tempo impiegato come differenza tra quello appena preso e il valore precedente T0)
ora se la comunicazione fosse corretta la differenza dovrebbe essere abb. costante e cmq sui 500 ms come ordinato da matlab.
ebbene sorpresa sorpresa il tempo è addirittura inferiore sui 350 ms....il che mi fa pensare che matlab sia piu lento ad inviare sulla porta seriale il comando, che sò 150 ms di ritardo e di conseguenza la tempistica è falsata
i miei dubbi possono avere fondamento????
allego lo script di matlab e mi inchino al vostro parere
%function solenoidiArduino
clear all
close all
%Priority(2); % aumenta la priorità di matlab
numtrial = 1001;
answer=1;
y=zeros(numtrial,1);
tempistica1=zeros(numtrial,1);
arduino=serial('COM5','BaudRate',115200); % create serial communication object on port COM5
fopen(arduino); % initiate arduino communication
%%
dio = digitalio('parallel','lpt1');% carica la porta parallela
addline(dio,0:7,'out') %pin 8
putvalue(dio.line,[0 0 0 0 0 0 0 0]);% azzera i pin
KbName('UnifyKeyNames');
escapeKey = KbName('ESCAPE');
i=0;
exit_key=0;
% ButtonName=questdlg('START THE EXPERIMENT ?', ...
% 'Response','Yes','No','Yes');
% if strcmp(ButtonName,'No');
% exit_key = 1; % EXIT,
% %return;
% end
%tstart=KbPressWait;% aspetta che sia premuto un tasto x avviarsi
%HideCursor% nasconde il cursore
wakeup = WaitSecs(1); % aspetta
KbReleaseWait; % aspetta che vengano rilasciati tutti i tasti:
[ keyIsDown, seconds, keyCode ] = KbCheck; %mi informa sui tasti premuti dalla tastiera
%%
tbase=GetSecs;
for i=1:numtrial
i
fprintf(arduino,char (answer)); % send answer variable content to arduino
start=GetSecs;
WaitSecs(.5);
tempistica1(i)=GetSecs-start;
putvalue(dio.line,[1 1 1 1 1 1 1 1]);
a=fscanf(arduino);
y(i)=str2double(a);
putvalue(dio.line,[0 0 0 0 0 0 0 0]); %riazzera i pin
[ keyIsDown, seconds, keyCode ] = KbCheck; %
if keyCode(escapeKey)
exit_key = 1; % EXIT,
fclose(arduino); % end communication with arduino
break;
end
% end
end;
fclose(arduino); % end communication with arduino
return