Klammerung für Temperatursensor

Hallo,

also ich weiß nicht ob ich schon zulange heute am Arduino sitze oder sonst was aber ich verstehe es einfach nicht.

Also, ich bin mir sehr sicher, dass die Antwort furchtbar logisch ist... Allerdings kann ich nicht schlafen gehen, bis ich es verstanden habe.

Ich habe ein Sketch zu einem Temperatursensor geschrieben. Funktioniert auch alles. Nur hatte ich zuerst als Berechnung des Kelvin wertes diese Programmzeile:

.
.
.
  tempU=analogRead(tempPin);  //unbearbeiteter Wert
  Serial.print("unbearbeiteter Wert: ");
  Serial.println(tempU);

  tempK=(tempU*(5000/1024))/10;  // Temperatur in Kelvin
  Serial.print("Kelvin Wert: ");
  Serial.println(tempK);
.
.
.

dabei wurde ein falscher Wert ausgegeben... ich hab überlegt und überlegt und dann einfach die Klammer weggelassen (ich hab sie eigentlich nur für mich geschrieben, damit ich die Logik für später besser nachvollziehen kann...). Also:

.
.
.
  tempU=analogRead(tempPin);  //unbearbeiteter Wert
  Serial.print("unbearbeiteter Wert: ");
  Serial.println(tempU);

  tempK=tempU*5000/1024/10;  // Temperatur in Kelvin
  Serial.print("Kelvin Wert: ");
  Serial.println(tempK);
.
.
.

hier war nun alles Korrekt. Aber warum kommt überhaupt ein anderes Ergebnis? ich meine:

tempU*5000/1024/10 = (tempU*(5000/1024))/10

oder bin ich total bescheuert und blamiere mich ich jetzt bis aufs Knochenmark.

danke euch

Hallo,

ist "tempK" als int definiert?

Falls ja, int sind Ganzzahlen.

5000/1024 = 4,8828125

Also ist das Ergebnis als int 4, denn der rest wird abgeschnitten.

ne als float. Ich poste einfach mal den ganzen Code. :wink:

int tempPin =0;
float tempC=0;
float tempF=0;
float tempK=0;
float tempU=0;

void setup()
{
  Serial.begin(9600);
  
 
}

void loop()
{
  tempU=analogRead(tempPin);  //unbearbeiteter Wert
  Serial.print("unbearbeiteter Wert: ");
  Serial.println(tempU);

  tempK=tempU*5000/1024/10;  // Temperatur in Kelvin
  Serial.print("Kelvin Wert: ");
  Serial.println(tempK);

  tempC=tempK-273;    //Temperatur in Celsius
  Serial.print("CELSIUS Wert: ");
  Serial.println(tempC);

  tempF=1.8*tempC+32;  //Temperatur in Fahrenheit
  Serial.print("Fahrenheit Wert: ");
  Serial.println(tempF);
  Serial.println("");
  Serial.println("");
  
  delay(3000);
  
}

huansedrip: ich meine:

tempU*5000/1024/10 = (tempU*(5000/1024))/10

oder bin ich total bescheuert..

Hä?

Versuch es mal so:

float a;
float b;
a = 5000.0/1024.0 * 2.0;
b = (5000.0/1024.0) * 2.0;
Serial.print(a);
Serial.print("   ");
Serial.print(b);
Serial.println();

a und b liefert bei mir 9,77

Siehe hier: https://www.arduino.cc/en/Reference/Float

aaah super! danke ihmSelbst. Jetzt habe ich es verstanden. Wenn die Klammerung da ist, werden die Zahlen als int interpretiert. Wenn sie immer im Zusammenhang mit float berechnet werden, werden sie als float angesehen und durch das 10.0 z.B auch direkt als float. vielen dank!