Keine Ahnung, mir war so danach... Eingebung...Visionen....
Jetzt mal im Ernst, wenn du dir das Programm mal anschaust siehst du
das du eine Variable in einer Zeile (Z1=Z1 -786) total verwirrst. Stell dir das mal mit Zahlen vor : 5=5-786
Da wirst du dich immer im Kreis drehen, ohne was vernünftiges zu erreichen.
Allerdings ist mir schleierhaft warum Bascom das beim Compilieren angemeckert hat, und wie das vorher funktioniert hat.
Aber Egal, was zählt ist das Ergebnis.
MfG
Neutro
Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
(Mark Twain)
Was soll an so einer Programmzeile verwirrend sein?
Da steht eben nicht z.B. 5=5-786, sondern:
berechte Z1 minus 786 und speichere das Ergebnis in Z1.
Das ist ganz normaler Progammieralltag, wenn man z.B. eine Variable um 2 erhöhen will. Dann sieht das auch so aus:
X = X + 2
Es ist eben keine Gleichung, sondern eine Programmanweisung, den rechten Teil zu berechnen und das Ergebnis in die linke Variable zu schreiben.
Gruß MeckPommER
Mein Hexapod im Detail auf www.vreal.de
Da magst du Recht haben, aber warum geht es dann wenn er für die Berechnung eine andere Variable verwendet?
Das ist mir dann leider nicht einleuchtend, ich war immer davon ausgegangen das man eine Variable nicht 2x in einer Zeile einsetzen kann, weil Bascom das nicht kann.
Für eine Erklärung und das dazugehörige dazulernen wäre ich dankbar.
MfG
Neutro
Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
(Mark Twain)
Wenn du recht hättest, dürfte die Zeile
temp = temp + 25.7
eigentlich auch nicht funktionieren. Ich kann dir nicht sagen, warum es vorher nicht ging. Vielleicht Interpretierte Bascom die 786 als Integer und hat sich dann bei der Typenkonvertierung vertan, who knows ...
2x selbige Variable in einer Zeile ist kein Problem. Nur mehr als eine mathematische Funktion in einer Zeile geht nicht. Oft habe ich Fehler festgestellt, wenn Typenkonvertierung und eine mathematische Operation auseinandertreffen.
[Single] = [Word] * 4.2
sowas oder ähnliches führt manchmal zu den "lustigsten" Ergebnissen, wogegen
[Single] = [Word]
[Single] = [Single] * 4.2
dann wieder ganz brav und artig funktioniert.
Gruß MeckPommER
Mein Hexapod im Detail auf www.vreal.de
Hast Recht, war mir gar nicht aufgefallen.
Manchmal sind die Wege von Bascom wohl unergründlich....
Auch wenn es jetzt OT geht:
Welche Variablen Typen (Byte, Integer, Single, usw)
lassen sich eigentlich miteinander verarbeiten bei Mathematischen
Berechnungen?
Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
(Mark Twain)
Ja da hat man doch wieder etwas gelernt \/
Ich störe nur ungern, aber ich habe ein Problem![]()
Irgend wie liegt die Temperatur immer zwischen 28.23°C und 29.04°C, egal, welche innentemperatur herscht. Es ändert sich zwar linear zur realen Temperatur, aber der Bereich stimmt nicht.
Es wurde noch eine Tasterfunktion hinzugefügt.
Hier noch einmal der Code:
Code:$regfile "m48def.dat" $crystal = 8000000 Config Pinc.4 = Input Portc.4 = 0 Config Portb = Output Config Portd = Output Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0 Config Lcd = 16 * 2 Config Adc = Single , Prescaler = Auto Config Portc.0 = Input Deflcdchar 6 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32 '°C Dim W As Word Dim Z1 As Single Dim Z2 As Single Dim Temp As Single T Alias Pinc.4 L Alias Portb.1 Cursor Off Do If T = 1 Then L = 1 W = Getadc(2) Z1 = W Z2 = Z1 - 714 Temp = Z2 * 0.035 Temp = Temp + 25.7 Cls Locate 1 , 1 Lcd "Temp: " ; Fusing(temp , "##.##") ; Chr(6) ; "C" Locate 2 , 1 Lcd "" Waitms 1000 Else Cls L = 0 End If Waitms 1 Loop
Kein Wunder ... in deiner Liste von Seite 1 hattest du Messwerte gezeigt die (über den Daumen) pro Grad ca. 4-5 Einheiten auseinanderliegen.
Bei deiner jetzigen Formel müssen die Messwerte schon knapp 30 Einheiten auseinanderliegen, damit ein Grad Temperaturunterschied angezeigt wird.
Über den Daumen würde ich den Faktor von 0.035 in 0.222 ändern und das Ergebnis dann in der Zeile darunter auf die tatsächlichen Werte anpassen.
Da deine Messwerte aber nicht sehr linear aussehen, glaube ich, das du große Messfehler in deiner Liste hast. Teilweise hast du nämlich auch 7-8 Einheiten pro Grad.
Mal ganz allgemein: die Funktion aus Messwert und der demnach festgestellten Temperatur sollte bei deinem Tempsensor eine Gerade sein. Kannst dir das ja mal aufzeichnen, ist enorm hilfreich.
Diese Funktion mußt du in deiner Anpassung abbilden. Der Faktor ist die Steigung der Geraten und die Addition eines festen Wertes sorgt für die stimmige Höhe der Geraden.
Mit irgendwelchen Werten herumprobieren bringt zumeist nicht viel. Das A und O sind brauchbare Messwerte.
Gruß MeckPommER
Mein Hexapod im Detail auf www.vreal.de
Wie finde ich diesen "tatsächlichen Wert" heraus?
P.S. Sehr sehr sehr geiler Hexabot haste da. Das hast du wirklich toll gemacht !
Mein Hexapod im Detail auf www.vreal.de
Lesezeichen