- you can predefine the "plot" object before the loop.
- Use "set()" to update data instead of replotting.
Using the command window as a serial monitor for arduino
18 views (last 30 days)
Show older comments
I want to use the command window as a serial monitor to plot data sent by arduino or another device serially. I need to send some data to arduino too. I have the following code.
% lectura de puerto serial COM
clc;
clear;
close all;
%comandos de apertura del puerto serial
com_avr = serial('COM4',115200);
fopen(com_avr);
while(1)
%para leer
data = readline(com_avr); disp(data); %para leer
data = readline(com_avr); disp(data);
str = input("Send to Arduino: ","s");
val = sscanf(str, "%f");
fprintf(com_avr, "%f", val);
%muestra lo que se envio
data = readline(com_avr); disp(data);
%HERE MUST TO PLOT THE DATA
while 1
data = readline(com_avr);
plot(x,data,'bd','LineWidth',2)
axis([x-2 x 40 160])
hold on
drawnow
x = x + 0.002;
end
%secuencia de comandos de salida
if str == 'z'
disp("exit")
break;
end
end
disp("closing communication...")
%finaliza la comunicacion serial y libera el puerto
close(com_avr);
What could I do to open a plot graph and plot the data sent from Arduino?
May you give me any sugestion to improve this code?
0 Comments
Accepted Answer
Kothuri
on 7 Feb 2025
In the above code, "while(1)" will cause an infinite loop and causes issue. And for plotting the data,
You can modify the above code as follows:
clc;
clear;
close all;
% Open Serial Port
com_avr = serial('COM4',115200);
fopen(com_avr);
% Initialize Plot
figure;
hold on;
grid on;
title("Real-time Serial Data Plot");
xlabel("Time (s)");
ylabel("Sensor Value");
xlim([0 10]);
ylim([40 160]);
% Plot Handle
h = plot(NaN, NaN, 'bd-', 'LineWidth', 2);
x = [];
y = [];
tic; % Start Timer
% Main Loop
while true
% Read Data
data = readline(com_avr);
sensor_value = str2double(data);
% Update Plot
x = [x toc];
y = [y sensor_value];
set(h, 'XData', x, 'YData', y);
xlim([max(0, x(end)-10) max(10, x(end))]); % Sliding window
drawnow;
% Send Data to Arduino
str = input("Send to Arduino: ", "s");
val = str2double(str);
writeline(com_avr, num2str(val));
% Check Exit Condition
if str == "z"
disp("Exit");
break;
end
end
% Close Serial Port
disp("Closing communication...");
clear com_avr;
The usage of "serial()" will be discontinued in future releases of MATLAB. Instead you can use "serialport()".
You can refer the below documentation links on "serial" and "set"
More Answers (1)
MathWorks MATLAB Hardware Team
on 24 Feb 2025 at 12:06
Hello,
With the MATLAB Support Package for Arduino Hardware, you can efficiently read data from an Arduino.
If your board supports WiFi, you might also consider using its wireless capabilities to gather data.
Additionally, please let us know what specific data you are trying to read from the Arduino. Understanding your use case better will allow us to assist you more effectively.
Thank you,
MATLAB Hardware Team
MathWorks
See Also
Categories
Find more on MATLAB Support Package for Arduino Hardware in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!