Reading two different formated data types from serial port
4 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hey, I have been trying to read some data sent from an Arduino into Matlab. It works fine for my first type of data, but when i try to read the second set of data with fscanf, Matlab just shows me 2 empty chars. Below I included a hex dump of my data types and the corresponding Ascii Values (the dots representing new line chars or carriage returns):
21 21 21 0D 0A !!!..
2nd set of data
0D 0A 30 33 36 0D 0A ..036..
Thanks in advance
The relevant Matlab code
Initalizing serial Port:
function [] = s_init_run()
global s
s = serial('com6'); set(s, 'BaudRate', 38400,'Terminator', 'CR/LF',... 'InputBufferSize', 1024, 'OutputBufferSize', 1024,'timeout',1000);
s.BytesAvailableFcnCount = 5;
s.BytesAvailableFcnMode = 'byte';
s.BytesAvailableFcn =@(~,~)mycallback(s);
ready = 'on';
fopen(s);
pause(2);
fprintf(s,'199');
pause(2);
fprintf(s,'189');
end
callback function
function [] = mycallback(s)
global u
global erg
%callback from serial port
ardudata1 = fscanf(s);
zeichen = ''; r=1; for ll=1:length(ardudata1)
if isspace(ardudata1(ll))==0
zeichen(1,r) = ardudata1(ll);
r=r+1;
end
end
ardudata = zeichen
butsym{1,1} = '!';
butsym{1,2} = '?';
butsym{1,3} = 'q';
flushinput(s);
if u == size(erg.conds,3)
disp('done')
else
if strcmp(ardudata(1),butsym{1,1})
fprintf(s,'191')
gp_signal; %generates signal
pause(1)
elseif strcmp(ardudata(1),butsym{1,2})
u = u+1; %sets counter+1 and sends some data to the arduino
fprintf(s,'189')
pause(2);
fprintf(s,'199')
elseif strcmp(ardudata(1),butsym{1,3})
gp_signal; %generates signal
pause(1)
else
led_num = str2num(ardudata);
s_fnct(led_num) %saves values
pause(1)
end
end
end
0 commentaires
Réponses (0)
Voir également
Catégories
En savoir plus sur MATLAB Support Package for Arduino Hardware dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!