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 | 1369 (1088) | samo111 |
» | batch fajl iz txt (strani: 1 2 )Oddelek: Programiranje | 9789 (8450) | b3D_950 |
» | python -slovarOddelek: Programiranje | 3140 (2119) | Valex86 |
» | [VB] Komunikacija s serijskimi napravamiOddelek: Programiranje | 2314 (1588) | mNeRo |
» | Iskanje naslednje ponovitve - najboljši algoritem (strani: 1 2 )Oddelek: Programiranje | 4457 (3515) | Thomas |