Go Down

Topic: Problem mit Array (Read 103 times) previous topic - next topic

Juergen124

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:

Code: [Select]

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:

Code: [Select]

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("");
           }           

}
}

ElEspanol

Dein Sketch läuft so schnell, das die Schleife den gleichen Messwert ins array schreibt
Code: [Select]
for (int i=1; i<= anzwert; i++)
           {
            a[i]= ((float)analogRead(sensor) * 5.0) / 1023.0 * cf;
            delay(0);
           }

Serenifly

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

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.

uwefed

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

uwefed

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

Serenifly

Behebe unbedingt den Überlauf

Aber der eigentliche Fehler legt hier:
Code: [Select]

Serial.print(sensorwert);

Klar dass da immer das Gleiche angezeigt wird :)

Juergen124

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

postmaster-ino

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
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Juergen124

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 :)"

Go Up