Probleme mit array

Hallo,
ich habe ein Problem mit der array Funktion.

Mit meinem angehängten Code möchte ich die Werte eines ADXL377 Beschleunigungssensors auslesen und auf dem seriellen Monitor anzeigen lassen.

Der ADXL377 kann Beschleunigungen im Bereich von +- 200 mal die Erdbeschleunigung messen.

In meinem ehemaligen Sketch habe ich lediglich den Sensorwert umgerechnet und diesen dann auf den Seriellen Monitor geschickt. Hier habe ich sinnvolle Werte bekommen, doch ich wollte zum einen, dass die Auslesung erst bei der Überschreitung eines bestimmten Wertes losgeht und zum anderen, dass ich mehr Werte auslesen kann.

Deswegen habe ich den neuen Sketch mit der Array Funktion geschrieben und getestet.
Hier kamen jedoch auf einmal lediglich Beschleunigungswerte von -243,38 raus. Diese Werte sind eigentlich nicht möglich und verändern sich trotz sich ändernder Beschleunigung nicht.

Daher meine Frage:
Habe ich die Array Funktion falsch geschrieben oder ist es gar nicht möglich solche Werte in ein Array zu schreiben?
Falls der Code falsch/ fehlerhaft ist, was muss ich ändern, dass ich sinnvolle Werte erhalte?

Ich würde mich sehr über eine Antwort freuen
Georg

ehemaligerSketch.ino (350 Bytes)

neuerSketch.ino (1.15 KB)

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Dein Problem ist nicht das Array, sondern deine Berechnung:

a[i]=((analogRead(Z) / 1024) * 5 - 1.582) / 0.0065;

analogRead ist ein int-Wert, und deshalb wird die Berechnung auch standardmäßig als int ausgeführt. Im alten Sketch hast Du den analog-Wert erst einer float-Variable zugewiesen, und dann damit gerechnet. Dann wird auch in float gerechnet. Schreib mal

a[i]=(((float)analogRead(Z) / 1024.0) * 5 - 1.582) / 0.0065;

Ich sehe keine Funktion. "Funktion" hat eine genau definierte Bedeutung. loop() ist eine Funktion

Ein Array der Größe N geht von 0 bis N - 1. Du schreibst über das Array hinaus

Das hier reicht auch:

a[i]=((analogRead(Z) / 1024.0) * 5 - 1.582) / 0.0065;

Nur eine der zwei Werte muss float sein

Ein Feld vom Typ float benötigt doppelt so viel raren Speicher wie eins vom Typ int. Ich würde daher die Ganzzahlen speichern und nur zur Anzeige die Gleitzahlenberechnung durchführen. Auch beim Vergleich bringt eine Gleitzahl keine Vorteile.