Problem mit Array

Grüßt euch,

Ich tüfftle schon seit längerem an meinem sketch zur Kraftmessung mithilfe eines FlexiForce Drucksensors (25lbs) herum. Ich würde darin gern einen Array einbauen, jedoch stoße ich hierbei auf folgendes Problem: Die Werte des Arrays verändern sich nicht trotz unterschiedlicher Druckeinwirkung. Bei meinem bisherigen sketch ohne Array gab es soweit keine Probleme. Bei beiden sketches wird der Sensorwert zunächst umgerechnet und dann auf den seriellen Monitor übertragen. Die zwei sketches habe ich beigefügt. Vielen Dank schonmal im Vorraus.

Grüße Jürgen

Bisheriger sketch ohne Array:

float cf = 19.5;

int sensor = A0;

int sensorwert = 0;
float vout;

void setup() 
{
  Serial.begin(9600);
  Serial.println("CLEARDATA");
  Serial.println("LABEL,Uhrzeit,Zeitpunkt,Einheit,");
  Serial.println("RESETTIMER");
  pinMode(sensor, INPUT);
}

void loop() 
{
Serial.print ("DATA,TIME,TIMER,");

sensorwert = analogRead(sensor);
vout = (sensorwert * 5.0) / 1023.0;
vout = vout * cf;
Serial.print(sensorwert);
Serial.println("");
delay(0);
}

Neuer sketch mit Array:

float cf = 19.5;

int sensor = A0;

const float basiswert = 20;
const int anzwert = 100; 
float a[anzwert];
 
int sensorwert = 0;
float vout;

void setup() 
{
  Serial.begin(9600);
 
  pinMode(sensor, INPUT);
}

void loop() 
{
sensorwert = analogRead(sensor);
vout = (sensorwert * 5.0) / 1023.0;
vout = vout * cf;

if(vout > basiswert)
  {
       a[0] = vout;
for (int i=1; i<= anzwert; i++)
           {
            a[i]= ((float)analogRead(sensor) * 5.0) / 1023.0 * cf;
            delay(0);
           }
for (int i=0; i<=anzwert; i++)
           {
           
             Serial.print(sensorwert);
             Serial.println("");
           }           

}
}

Dein Sketch läuft so schnell, das die Schleife den gleichen Messwert ins array schreibt

for (int i=1; i<= anzwert; i++)
           {
            a[i]= ((float)analogRead(sensor) * 5.0) / 1023.0 * cf;
            delay(0);
           }

Achtung: Arrays der Größe N gehen von 0 bis N-1

Danke für die schnellen Antworten. Auf ElEspanols Ratschlag hin habe ich den Delay nun auf verschiedenen Größen getestet, aber das Problem bleibt das selbe.

for (int i=0; i<=anzwert; i++)
Du hast eine Indexüberlauf. Der index geht von 0 bis anzwert-1 also ist richtig:
for (int i=0; i<anzwert; i++)
grüße Uwe

Juergen124:
Danke für die schnellen Antworten. Auf ElEspanols Ratschlag hin habe ich den Delay nun auf verschiedenen Größen getestet, aber das Problem bleibt das selbe.

Welche Werte liest Du denn?
Grüße Uwe

Behebe unbedingt den Überlauf

Aber der eigentliche Fehler legt hier:

Serial.print(sensorwert);

Klar dass da immer das Gleiche angezeigt wird :slight_smile:

Vielen Dank euch, das Problem wurde gelöst :slight_smile:

Hi

Hast Du als Schmankerl für die Nachwelt noch das 'Wie'?
Vll. hat in zwei Jahren Jemand Neues Dein Problem und findet hier dann 'Jupp, läuft jetzt' - was Ihm dann wenig bis gar nicht hilft.

MfG

Stimmt, du hast Recht.

Zum einen war es das, worauf Uwefed hingewiesen hat:

"for (int i=0; i<=anzwert; i++)
Du hast eine Indexüberlauf. Der index geht von 0 bis anzwert-1 also ist richtig:
for (int i=0; i<anzwert; i++)
grüße Uwe"

Zum anderen war es das, was Serenifly gesagt hat:

"Aber der eigentliche Fehler legt hier:

Serial.print(sensorwert);

Klar dass da immer das Gleiche angezeigt wird :)"