Globales Array verliert seinen Wert

Hallo Gemeinde,

ich habe einen Arduino UNO und möchte über die Serielle die AD-Umsetzer kalibrieren. Da habe ich folgenden Code:

float AdScale[5];

setup .......
loop ..... ruft CalcChannel auf.

void CalcChannel ( int Channel )
{
  int   wLower;
  int   wUpper;
  float fLower;
  float fUpper;
  
  Serial.print(" === CalcChan "); 
  Serial.print(Channel); 
  Serial.println(" ===");
  Serial.println("Set lower, enter value!");

  //Wait for lower value
  while(!Serial.available() > 0);
  fLower = Serial.parseFloat();
  Serial.println(fLower, 5);
  wLower = analogRead(Channel);
  Serial.println("Set upper, enter value!");

  //Wait for upper value
  while(!Serial.available() > 0);
  fUpper = Serial.parseFloat();
  Serial.println(fUpper, 5);
  wUpper = analogRead(Channel);

  //Calc Scale and Offset
  AdScale[0]  = (fUpper - fLower) / (wUpper - wLower);

  Serial.println(AdScale[0]);
  Serial.print("Scale = ");

 
  //Print the result
  Serial.print("Scale = ");
  Serial.println(AdScale[0]); //Hier hat AdScale keinen Wert mehr
 
}

Hat jemand eine Idee warum AdScale[0] am Ende keinen Wert mehr hat?

Ich bin wirklich für jeden Tipp dankbar.

Der Holzwurm

wUpper und wLower wird wohl den gleichen Wert haben, wenn du zwei mal hintereinander den gleichen Analog-Pin abfragst ...

  //Calc Scale and Offset

AdScale[0]  = (fUpper - fLower) / (wUpper - wLower);
 Serial.println(AdScale[0]);
 Serial.print("Scale = ");
 //Print the result
 Serial.print("Scale = ");
 Serial.println(AdScale[0]); //Hier hat AdScale keinen Wert mehr

Oder willst du sagen, dass die Ausgabe so aussieht:

1.23
Scale = Scale =

und du in der ersten Zeile noch einen numerischen Wert hast,
in der zweiten, nach den zwei "Scale = " - Ausgaben aber nicht mehr ?
Das wäre sehr seltsam, stimmt.

Edit: "1.23" ist natürlich nur ein Beispiel ...

  //Wait for lower value
  while(!Serial.available() > 0);
  fLower = Serial.parseFloat();

Dieser while code wartest nur auf einer character in Serial buffer.

Bitte printen sie die werte des fLower and fUpper in ihren code um das zu sehn

robtillaart:

  //Wait for lower value

while(!Serial.available() > 0);
  fLower = Serial.parseFloat();



Dieser while code wartest nur auf einer character in Serial buffer. 

Bitte printen sie die werte des fLower and fUpper in ihren code um das zu sehn

Im Sinn:
Es sind wahrscheinlich noch nicht alle Zeichen über die serielle Schnitttstelle angekommen Die Übertragung braucht etwas Zeit. zB bei 9600 Baud sind 4 Byte nach ca 5 mS angekommen. Du liest sie schon aus bevor alle da sind.

Grüße Uwe