Я использую аналоговые выводы Arduino для измерения напряжения и распечатываю его на последовательный порт с serial.print(string)
.Это работает, он выводит одно значение в виде xxxx.yyyy
с переменной длиной, это я проверял с помощью встроенного в последовательный просмотрщик.Чтобы прочитать его, я использую Matlab с fscanf()
или fgetl()
.Это показывает правильную вещь, aaaa.bbbb
, но со странной задержкой.Когда я меняю напряжение, показания отстают на 5-10 секунд, но когда я увеличиваю напряжение с 0 до 3 до 5, в течение этого timeframe
, например, 3 секунды между 3 и 5, показания также меняются.Это не так, как я изменил напряжение, но он получает эти значения, как если бы это были 2-ступенчатые входы, хотя я изменил их вручную не очень быстро.
При чтении и исследовании,Я столкнулся с тем фактом, что, возможно, BaudRate был слишком низким, поэтому я изменил его на максимум Arduino на 115200. Я также изменил значение в коде Matlab .Я также попробовал пакет поддержки Arduino Hardware с функцией readVoltage()
, но у него слишком низкая частота дискретизации.
Настройки для последовательного порта:
s = serial('com3');
set(s, 'BaudRate', 115200); % set BaudRate to 115200
set(s, 'Parity', 'none'); % set Parity Bit to None
set(s, 'DataBits', 8); % set DataBits to 8
set(s, 'StopBit', 1); % set StopBit to 1
set(s,'Terminator','LF') % set terminating character to LF/new line
fopen(s);
Цикл чтения:
for i =1:am
val(:,i) = string(fgetl(s)); %retrieve value of serial port, in the form aaaa.bbbb where a and b can vary in length
if mod(i,10) == 0 %Display every 10 iterations
volt1 = floor(val)*5/1023; %Calculating actual voltage for A1, where floor(val) is first value
volt2= (volt1-floor(val))*5/0.1023; %getting only decimals for second voltage
plot(volt1) %plot the values
hold on
plot(volt2)
hold off
ylim([0 5])
xlim([i-1000 i]) %make the plot chug along
drawnow %Live
end
clc
toc
end
Нет сообщений об ошибках, и используя другой последовательный порт, у меня не быловидимая задержкаЭто также должно быть возможно с Matlab, так как люди получают частоту обновления 2-3 кГц, используя это.