Need help with storing live data from sensors into array

조회 수: 6 (최근 30일)
Samuel Louise
Samuel Louise 2018년 12월 29일
댓글: Samuel Louise 2019년 2월 4일
this is my code. I want to store the incoming data into my array/matrix whichever would do the trick. This keeps overwriting the previous data into the array. I want the data to be added up at the bottom.
I am also getting this problem. "Conversion to cell from uint16 is not possible."
iterate = 0;
while 1
iterate =plus(iterate, 1); %counter
disp(iterate);
Gyro_X = readRegister(MPU9250, GYRO_XOUT_H, 'uint16')
Gyro_Y = readRegister(MPU9250, GYRO_YOUT_H, 'uint16')
Gyro_Z = readRegister(MPU9250, GYRO_ZOUT_H, 'uint16')
pause(1/10);
%Gyro = table(iterate, Gyro_X, Gyro_Y, Gyro_Z);
Gyro = {};
Gyro(i) = [ iterate, Gyro_X, Gyro_Y, Gyro_Z];
end

채택된 답변

Mustafa Abu-Mallouh
Mustafa Abu-Mallouh 2018년 12월 30일
편집: Mustafa Abu-Mallouh 2018년 12월 30일
If you want to store the values in each row, call out that you want the values to take over all columns of "Gyro". See below:
i = 0;
max_data_len = 10;
% Initialize 'Gyro' with desired dimensions
% - Don't have to but it helps performance
Gyro = zeros( max_data_len , 4 );
while i < max_data_len
i = i+1;
Gyro_X = randi(30,1);
Gyro_Y = randi(30,1);
Gyro_Z = randi(30,1);
% If creating a results array
Gyro(i,:) = [i Gyro_X Gyro_Y Gyro_Z];
end
Another issue is you redefine "Gyro" as an empty cell array every iteration of the loop when you call the following code:
Gyro = {};
This clears the data you originally had stored in the variable. This is also the reason you are getting the "Conversion to cell from uint16 is not possible" error; it is trying to convert your 16 bit integer array into a cell array
  댓글 수: 2
Samuel Louise
Samuel Louise 2018년 12월 31일
Thank you for your help! Much appreciated.
Samuel Louise
Samuel Louise 2019년 2월 4일
Hi,
I am having another problem and it is to do with the time it is taking for MATLAB to take the data from the FIFO. Matlab is processing it in seconds. For example
while i <= 50
i = i+1;
Gyro_X = randi(30,1);
Gyro_Y = randi(30,1);
Gyro_Z = randi(30,1);
% If creating a results array
Gyro(i,:) = [i Gyro_X Gyro_Y Gyro_Z];
end
the problem with 'i' is that 'i' is being read in 50 seconds. Is there anyway i can speed up that process?
Thank you for your help.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

ahmed nebli
ahmed nebli 2018년 12월 29일
편집: madhan ravi 2018년 12월 29일
what you need to do is create a vector/matri without defining its size first (e.g.: A=[]; ) then use the command vertcat.
  댓글 수: 1
Samuel Louise
Samuel Louise 2018년 12월 29일
Hi,
Thank you for the prompt reply. But I have tried to follow what your instructing but it is constantly replacing the old value to the new value in the loop.
I am now getting this error : The RowNames property must be a cell array, with each element containing one nonempty character vector.
After doing this:
Gyro = table([Gyro_X],[Gyro_Y],[Gyro_Z],'VariableNames',{'GYRO_X','GYRO_Y', 'GYRO_Z'},'RowNames',{iterate})

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 MATLAB Compiler에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by