Re: Neuanfang mit Station2 Kategorie: Programmierung (von André H. - 30.04.2007 0:26) | ||
Als Antwort auf Re: Neuanfang mit Station2 von m8_nix - 29.04.2007 2:16 | ||
| ||
Hallo m8_nix, > ich sehe grade diese Funktion kann so nicht funtzen.... vielleicht liegt ja darin schon deine > fragende Haltung begründet? > Dadurch das sich im long-Format die Werte 105625 (10,5625°C) und 106 (10,6000°C) nicht Exponentiell > von einander unterscheiden lassen (fehlende Nachkomma "Nullen") wird im vorliegendem Fall der letztere > Wert "10,6°" tatsächlich niedrieger "angesehen" als der in wirklichkeit Niedrigere (10,5625°) Wie kommst Du denn darauf ? Das stimmt nämlich nicht. Du wei�t schon, was ein Festkommainteger ist, oder? Wenn mit ds1631.readl() ein Wert ausgelesen wird, hat dieser immer vier Nachkommastellen. Keine mehr, und keine weniger. Ein Festkommainteger ist nur eine Anwenderdefinitionen, bei der der Anwender selbst wissen mu�, wo das Komma sitzt. Es ist einfach eine Kommazahl, die um den Faktor 10, 100, 1000 usw. multipliziert wurde. Im Fall readl() kann man die Einheit hundertstel Mikrograd nennen, was vier Nachkommastellen entspricht. Falls es den Wert 10,6000° beim DS1631 wirklich geben würde, ist das bestimmt nicht der Rückgabe wert 106, sondern 106000 oder in Worten huntertundsechstausend. Aber gehen wir von Werten aus, die vorkommen können. (vielfaches von 0,0625K) Nehmen wir also die Temperaturen 10,5625°C und 10,6250°C an. Als Festkommainteger sind das die Werte 105625 und 106250. Wenn Du nun von den 106250 die 105625 abziehst, erhälst Du 625. Und das sind 0,0625K. Also denke bitte nicht unnötig kompliziert. Die Sache ist ganz einfach. Darum habe ich bei der CC2 auch die Festkommainteger in Mode gebracht, da diese meist einfacher handhabbar sind, als Float-Zahlen. (Und deutlich weniger Rechenzeit benötigen) Allerdings hast Du mit einem recht. Deine Funktion kann nicht funktionieren: long t1, t2; float tdelta; function build_diff() returns float; { t1=ds1631.readl(0); // 0=Adresse des ersten Sensors t2=ds1631.readl(1); // 1=Adresse des zweiten Sensors tdelta=t2-t1; } Du hast ein Semicolon nach dem "returns float" in der Funktionsdefinition. Das ist nicht zulässig. Dann gibst Du keinen Wert in der Funktion zurück. Somit ist der Rückgabewert immer 0. Und dann mach es keinen Sinn die Differenz der Festkommaintegerwerte t1 und t2 in einem Float zu speichern, da ein Festkommawert für einen Float keine Kommazahl darstellen. Du müsstest Deine Funktion dann folgenderma�en umschreiben: long t1, t2; float tdelta; function build_diff() returns float { t1=ds1631.readl(0); t2=ds1631.readl(1); tdelta=(t2-t1)*0.0001; // Festkommainteger mit 4 Nachkommastellen // in Floatumrechnen return tdelta; } MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: Re: Neuanfang mit Station2 (von m8_nix - 30.04.2007 17:18) |