Filter löschen
Filter löschen

Need help with storing live data from sensors into array

3 Ansichten (letzte 30 Tage)
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

Akzeptierte Antwort

Mustafa Abu-Mallouh
Mustafa Abu-Mallouh am 30 Dez. 2018
Bearbeitet: Mustafa Abu-Mallouh am 30 Dez. 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 Kommentare
Samuel Louise
Samuel Louise am 31 Dez. 2018
Thank you for your help! Much appreciated.
Samuel Louise
Samuel Louise am 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

ahmed nebli
ahmed nebli am 29 Dez. 2018
Bearbeitet: madhan ravi am 29 Dez. 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 Kommentar
Samuel Louise
Samuel Louise am 29 Dez. 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})

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu MATLAB Compiler finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by