Forum » Programiranje » [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:
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:
Matlab koda:
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:
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 ...
| Tema | Ogledi | Zadnje sporočilo | |
|---|---|---|---|
| Tema | Ogledi | Zadnje sporočilo | |
| » | Pomoč C++Oddelek: Pomoč in nasveti | 1497 (1216) | samo111 |
| » | batch fajl iz txt (strani: 1 2 )Oddelek: Programiranje | 10837 (9498) | b3D_950 |
| » | python -slovarOddelek: Programiranje | 3352 (2331) | Valex86 |
| » | [VB] Komunikacija s serijskimi napravamiOddelek: Programiranje | 2480 (1754) | mNeRo |
| » | Iskanje naslednje ponovitve - najboljši algoritem (strani: 1 2 )Oddelek: Programiranje | 4710 (3768) | Thomas |
