Messwerte aufnehmen Funktion einfach aber ich schaffs nict.

Gast #2814629
Lesenswert?

Hi,

ich schaff es irgendwie nicht! Wie kann ich bitte in C (stm32) eine 
Anzahl von Messwerten aufnehmen und abrufen?

Es sind neun Werte:
1
Accel[3] Gyro[3] Mag[3] 
2

3
Accel X Y Z GYRO X Y Z  MAG X Y Z
4

5
Messung_1[9]
6
Messung_2[9]
7
Messung_3[9]
8
.
9
.
10
Messung_n[9]

im Prinzip eine Matrix oder ein 2D Array auf das man dann spaeter 
zugreifen kann.

kann mir jemand bitte mal die Schleife schreiben?

Ich hatte das so versucht:
1
int col[9];
2
int row[5000]; 
3

4
while (pbuttonstate == false) //abbruch wenn taster gedrueckt
5
{
6

7

8
   for (i=0; i<5000; i++) //oder abbruch wenn 5000 werte aufgezeichnet
9

10
   {
11
   //aktuelle Messwerte in collum array laden
12
   col[]={accel[1],[accel[2],accel[3],Gyro[1],Gyro[2],Gyro[3],Mag[1],Mag[2],Mag[3]}; 
13
   
14
   //col array in row array schreiben
15
   row[i]= col[];
16
   
17
   } 
18

19

20
}


Viele Gruesse
Timo
Gast #2814835
Lesenswert?

ja so eine struktur hab ich bereits :)
1
typedef struct
2
{
3

4
  s16 sAcc[3];
5
  s16 sGyro[3];
6
  s16 sMag[3];
7
  
8
  float uGain[9];      /*AccX AccY AccZ - GyroX GyroY GyroZ - MagnX MagnY MagnZ */
9
  s16 sOffset[9];      /*AccX AccY AccZ - GyroX GyroY GyroZ - MagnX MagnY MagnZ */
10
  
11
#ifdef AHRS_MOD
12
  IMU100_QUAT          m_quat;
13
  IMU100_SENSORDATA    m_sensorData;
14
  IMU100_EULER_ANGLES  m_angle;
15
#endif   
16
} IMU100_DATA;



ok - ihr seid gemein :(  ... jetzt muss ich hier herumexperimentieren 
und kann nicht in expandebles 2
#2814945
Lesenswert?

Timo schrieb:
> col[]={accel[1],[accel[2],accel[3],Gyro[1],Gyro[2],Gyro[3],Mag[1],Mag[2]
>
> das war pseudo code!

Ach?
Darum schreibst du auch
> Ich hatte das so versucht:
drüber.

Es hilft nichts. Du brauchst ein C-Buch.

Arrays sind in C Bastarde, die anders funktionieren als alle anderen 
Datentypen/Datenstrukturen. Deren Regeln muss man kennen. Und dann gibt 
es in deinem C Buch noch tausende andere Dinge, die dir alle neu sein 
werden und die du noch nicht kennst, die du aber alle kennen musst um 
erfolgreich Programm schreiben zu können.
Gast #2814946
Lesenswert?

ok ich habs :D   Kino ich kann kommen :)

Meine Loesung und sogar verstaendlich fuer alle anderen timos auf der 
welt.
1
int zeilen = 5000;
2
int spalten = 9;
3
int Messmatrix[zeilen][spalten];
4

5

6
while(bedingung == true) //aus wenn taster gedrueckt
7
{
8

9
 for (i=0; i<5000; i++) //oder abbruch wenn 5000 werte aufgezeichnet mit 100hz
10

11
   {
12
//Messwerte aktualisieren und in globale variablen schreiben
13
getSensorData();
14

15
//Daten in Zeile i fuellen
16
   Messmatrix[i][spalten]={ {accel[1],[accel[2],accel[3],Gyro[1],Gyro[2],Gyro[3],Mag[1],Mag[2],Mag[3]} };
17
 
18
 Delay(10) //Delay in ms , 10 = 100hz
19
 } 
20

21
}
#2814984
Lesenswert?

Timo schrieb:
> ok ich habs :D   Kino ich kann kommen :)

Sorry. Kino wird noch warten müssen.


Ein Hinweis:
Arrays sind in C Bastarde.
Es gibt keine Operation (ausser der Initialisierung), bei der du mit 
einem Array ALS GANZES etwas machen könntest. Alle Array Operationen 
laufen in C IMMER über den Weg, das du eine Schleife über das Array 
legen musst und die Operation EINZELN auf die ARRAY-Elemente ausführen 
musst (bzw. sonst irgendwie dafür sorgst, dass die einzelnen Elemente 
angesprochen werden)

Ein Array in ein anderes umkopieren funktioniert nicht so

    ziel = quelle;

sondern so

    for( i = 0; i < Grösse_des_Arrays; i++ )
      ziel[i] = quelle[i];

Und das ist bei ALLEN Array-Operationen so. Egal welche Operation. Sei 
es das Umkopieren in ein anderes Arrays, sei es das vergleichen mit 
einem anderen Array, sei es die Anwendung einer Rechenvorschrift auf das 
Array, sei es .... Man kann in C nichts mit einem Array als Ganzes 
anfangen, sondern muss immer alles auf die einzelnen Elemente 
runterbrechen. Und in den meisten Fällen bedeutet das: eine Schleife 
drüber legen.

Und bei einem 2D Array sind es dann eben 2 Schleifen. Die eine Schleife 
wählt die eine Dimension aus, die darin steckende die andere

   for( i = 0; i < die_eine_Grösse_des_Arrays; i++ )
     for( j = 0; j < die_andere_Grösse_des_Arrays; j++ )
       Array[i][j] = .....

oder manchmal dann auch schon mal so

   for( i = 0; i < die_eine_Grösse_des_Arrays; i++ )
   {
     Array[i][0] = .....
     Array[i][1] = .....
     Array[i][2] = .....
...
   }


So. Und jetzt geh in die nächste Buchhandlung und such dir ein C-Buch 
aus, mit dessen Stil du klarkommst.
Gast #2815828
Lesenswert?

So müsste das gehen Timo:
1
int myArray[100][9]= { 0 }; 
2

3
   for (int row=0; row < 100; row++) {
4
      for (int col=0; col < 9; col++) {
5
 myArray[row][0] = sAcc[0];
6
 myArray[row][1] = sAcc[1];
7
 myArray[row][2] = sAcc[2];
8
 myArray[row][3] = sGyro[0];
9
 myArray[row][4] = sGyro[1];
10
 myArray[row][5] = sGyro[2];
11
 myArray[row][6] = sMag[0];
12
 myArray[row][7] = sMag[1];
13
 myArray[row][8] = sMag[2];
14
}
15
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren