Need help with storing live data from sensors into array

13 visualizzazioni (ultimi 30 giorni)
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

Risposta accettata

Mustafa Abu-Mallouh
Mustafa Abu-Mallouh il 30 Dic 2018
Modificato: Mustafa Abu-Mallouh il 30 Dic 2018
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 Commenti
Samuel Louise
Samuel Louise il 31 Dic 2018
Thank you for your help! Much appreciated.
Samuel Louise
Samuel Louise il 4 Feb 2019
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.

Accedi per commentare.

Più risposte (1)

ahmed nebli
ahmed nebli il 29 Dic 2018
Modificato: madhan ravi il 29 Dic 2018
what you need to do is create a vector/matri without defining its size first (e.g.: A=[]; ) then use the command vertcat.
  1 Commento
Samuel Louise
Samuel Louise il 29 Dic 2018
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})

Accedi per commentare.

Categorie

Scopri di più su Data Import and Analysis in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by