У меня есть несколько операторов Serial.println
в моем эскизе Arduino. Все они являются строками, кроме одного, которое является целым числом. Целое число является единственной переменной, которую я хочу построить в режиме реального времени, используя MatLab's fscanf
.MatLab - fscanf Проблемы с Arduino
У меня есть 3 Serial.println
инструкций, которые печатают строки. 2 из них находятся в пределах setup
, а третий находится в loop
. Целое число является четвертым, которое появляется сразу после последней строки.
После прочтения документации я обнаружил, что вы можете выбирать то, что вы хотите, но теперь я получаю эту ошибку:
Warning: Unsuccessful read: Matching failure in format.
In an assignment A(I) = B, the number of elements in B and I must be the same.
Error in serialHRM (line 12)
x(i) = fscanf(ard, '%*s %d');
Мой MatLab код:
ard = serial('/dev/tty.usbserial-A601EQJ5', 'BaudRate', 9600);
fopen(ard);
i = 1;
N = 50;
x = zeros(0, N);
while i <= N
x(i) = fscanf(ard, '%*s %d');
plot(x)
hold on
axis([1, N, 0, 150])
drawnow;
i = i +1;
end
EDIT:
Спасибо - Я только что напечатал первую и вторую строчку, и у меня все серийные отпечатки. Я сказал 3 strings
и 1 int
, но 1 из strings
находится в инструкции if
, поэтому только 1 будет печатать в функции setup
. Здесь все строки из MatLab:
tline =
Card Failed or Ready
EDU>> tline = fgetl(ard)
tline =
BPM: 100
Arduino Serial
печатает:
void setup() {
Serial.begin(9600);
Serial.println("Card Failed or Ready");
}
void loop() {
Serial.print("BPM: "); Serial.println(BPM);
delay(1000);
}
Переменная Я заинтересован только является int
BPM
.
Спасибо - я отредактировал свое сообщение, чтобы предоставить дополнительную информацию после вашего сообщения. Чтобы убедиться, что что-то пустое, я бы использовал 'isempty()' в выражении 'if'? – user1574598
Да - я бы использовал обратное: 'if ~ isempty (temp)' ('temp' - это переменная, которую вы назначаете выводом' fscanf', а затем присваиваете 'x'/увеличиваете свой график счетчика/перерисовки если есть фактические данные в 'temp'. – nkjt