» »

[Matlab] obračanje bitov problem

[Matlab] obračanje bitov problem

stalker ::

Pozdrav.

Na Arduino Due imam testni program, ki preko serijske povezave pošilja 2 bajta, katere v Matlabu izrisujem na graf v realnem času.

Vse deluje v redu, razen ko mi Matlab čisto naključno obrne 2 bajta, kar se na grafu vidi kot vertikalne črte:

 Graf

Graf



Vprašanje je, kako to preprečim? Matlab uporabljam redko, sem začetnik.
Bonus vprašanje je, lahko v realnem času berem podatke iz serijske povezave v Simulinku brez da bi uporabil XPC real time mašino?

Arduino koda:
void setup()
{
  Serial.begin(115200);
  angleSensorJoint1.init();
}

void loop()
{
  word valJoint1 = angleSensorJoint1.getRawRotation();
  float valJoint1_mapped = mapFloat(valJoint1, 0, 16384, 0, 360);
  
  if(millis() > time_now + 30)
  {
    time_now = millis();
   
    low = byte(((int)valJoint1_mapped & 0xFF00) >> 8);
    high = byte((int)valJoint1_mapped & 0xFF); 
    
    buffer[1] = low;
    buffer[0] = high;
    
    //Serial.println((int)valJoint1_mapped);      
    Serial.write(buffer, 2);
    delayMicroseconds(100);
    Serial.flush();


Matlab koda:
% SERIAL DATA LOGGER

clear
clc

if ~isempty(instrfind)
    fclose(instrfind);
    delete(instrfind);
end
 
%User Defined Properties 
%serialPort = 'COM6';           % define COM port #
plotTitle = 'Serial Data Log';  % plot title
xLabel = 'Elapsed Time (s)';    % x-axis label
yLabel = 'Data';                % y-axis label
plotGrid = 'on';                % 'off' to turn off grid
min = 0;                        % set y-min
max = 400;                      % set y-max
scrollWidth = 10;               % display period in plot, plot entire data log if <= 0
delay = 0.001;                  % make sure sample faster than resolution
 
%Define Function Variables
time = 0;
data = 0;
count = 0;
 
%Set up Plot
plotGraph = plot(time,data,'-mo',...
                'LineWidth',1,...
                'MarkerEdgeColor','k',...
                'MarkerFaceColor',[.49 1 .63],...
                'MarkerSize',2);
             
title(plotTitle,'FontSize',25);
xlabel(xLabel,'FontSize',15);
ylabel(yLabel,'FontSize',15);
axis([0 10 min max]);
grid(plotGrid);
 
%Open Serial COM Port
s = serial('COM6','BaudRate', 115200)
disp('Close Plot to End Session');
fopen(s);
 
tic

while ishandle(plotGraph) %Loop when Plot is Active
    
    dat = fread(s, 2, 'int16');
    flushinput(s)
            
        count = count + 1;    
        time(count) = toc;    %Extract Elapsed Time
        data(count) = dat(1); %Extract 1st Data Element         
         
        %Set Axis according to Scroll Width
%         if(scrollWidth > 0)
%         set(plotGraph,'XData',time(time > time(count)-scrollWidth),'YData',data(time > time(count)-scrollWidth));
%         axis([time(count)-scrollWidth time(count) min max]);
%         else
        set(plotGraph,'XData',time,'YData',data);
        axis([0 time(count) min max]);
        %end
         
        %Allow MATLAB to Update Plot
        pause(delay);   
end
 
%Close Serial COM Port and Delete useless Variables
fclose(s);
delete(s);
 
disp('Session Terminated...');

DamijanD ::

Čisto laično: a bi lahko imel kakšne posebne znake za start/konec, tako da bi vedno vedel kaj je prvi in kaj drugi bajt?

stalker ::

Seveda, saj je stabilnost komunikacije glavnega pomena pri projektu. Ravno se ukvarjam s tem in ugotavljam, da moram še kakšen tutorial narest, ker mi je bolj malo jasno...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Pomoč C++

Oddelek: Pomoč in nasveti
71369 (1088) samo111
»

batch fajl iz txt (strani: 1 2 )

Oddelek: Programiranje
659789 (8450) b3D_950
»

python -slovar

Oddelek: Programiranje
223140 (2119) Valex86
»

[VB] Komunikacija s serijskimi napravami

Oddelek: Programiranje
412314 (1588) mNeRo
»

Iskanje naslednje ponovitve - najboljši algoritem (strani: 1 2 )

Oddelek: Programiranje
724457 (3515) Thomas

Več podobnih tem