CChris Geschrieben October 22, 2016 at 12:10 Geschrieben October 22, 2016 at 12:10 Hallo Zusammen, ich weiß - für die Profis hier vermutlich eine 'dumme Frage' ... aber im Moment komme ich um ehrlich zu sein nicht auf die Lösung... auch, wenn sie vermutlich recht simpel ist. Ich habe derzeit ein normales Temperature Bricklet, sowie ein TemperatureIR Bricklet an meinem Stapel angeschlossen. Angezeigt wird im Moment die Umgebungstemperatur vom Temp.Bricklet und die ObjektTemperatur vom TempIR Bricklet via CallBack: Aufruf der CallBacks BrickletTemperature tmp1 = new BrickletTemperature("dD5", ipcon); tmp1.Temperature += TemperatureCB; tmp1.SetTemperatureCallbackPeriod(1000); BrickletTemperatureIR tmp2 = new BrickletTemperatureIR("zY2", ipcon); tmp2.ObjectTemperature += TemperatureIRCB; tmp2.SetObjectTemperatureCallbackPeriod(1000); Callbacks: private void TemperatureCB(BrickletTemperature sender, short temperature) { short tmpValue = temperature; aGauge2.Invoke(new Action(() => aGauge2.Value = tmpValue / 100)); } private void TemperatureIRCB(BrickletTemperatureIR sender, short temperature) { short tmpIRValue = temperature; aGauge1.Invoke(new Action(() => aGauge1.Value = tmpIRValue / 10)); } Ich möchte jetzt auch die Umgebungstemperatur vom IR Bricklet mit einbeziehen. Klar, dafür auch einen CallBack-Aufruf machen, usw... ABER: ich möchte bei: aGauge2 gerne folgendes machen: Value = ((Temperature/100)+(TemperatureIR/10)/2) um mir quasi aus beiden Bricklets die Durchschnittstemperatur zu ermitteln und diese anzuzeigen. Nur: mir fällt eben gerade absolut nicht ein, wie ich das aus den beiden Callbacks heraus bekomme... :-( Danke und Gruß, Chris Zitieren
Nic Geschrieben October 22, 2016 at 15:01 Geschrieben October 22, 2016 at 15:01 Zieh die beiden short Vars raus und lege sie als private Properties innerhalb der Main ab. Dann kannst du beide Werte im jeweils anderen CB nutzen. Gewöhnt Euch bitte an, den Source Code möglichst komplett im Posting zu zeigen. Macht die Fehlersuche bzw. Hinweise leichter. Zitieren
CChris Geschrieben October 22, 2016 at 15:06 Autor Geschrieben October 22, 2016 at 15:06 Hi, alles klar - danke. Nur - hilf mir bitte mal kurz auf die Sprünge - wie ziehe ich sie am geschicktesten raus? Via return xyzValue; ? Was den rest des Quellcodes an geht, steht da nicht viel relevantes drin. Bisschen Aktion für Button-Clicks, und wenn sich das Programm beendet... sonst ist da noch nicht viel mehr Zitieren
Nic Geschrieben October 23, 2016 at 11:41 Geschrieben October 23, 2016 at 11:41 Das ist Basiswissen C# Dazu gibt es viele, speziellere Foren als hier (sollten i.d.R. tinkerforge relevante Aspekte behandelt werden) https://msdn.microsoft.com/de-de/library/w86s7x04.aspx Zitieren
markus5766h Geschrieben October 23, 2016 at 13:52 Geschrieben October 23, 2016 at 13:52 ... Callbacks: private void TemperatureCB(BrickletTemperature sender, short temperature) { short tmpValue = temperature; aGauge2.Invoke(new Action(() => aGauge2.Value = tmpValue / 100)); } private void TemperatureIRCB(BrickletTemperatureIR sender, short temperature) { short tmpIRValue = temperature; aGauge1.Invoke(new Action(() => aGauge1.Value = tmpIRValue / 10)); } ... warum wird denn hier tmpIRValue auf temperatur gecastet, langt nicht aGauge1.Invoke(new Action(() => aGauge1.Value = temperature / 10)); ? Zitieren
CChris Geschrieben October 23, 2016 at 14:32 Autor Geschrieben October 23, 2016 at 14:32 hm... Reicht im Grunde schon. Ursprünglich war da aber noch eine weitere Ausgabe als Text - und eventuell wollte ich noch ein bisschen mehr damit machen - daher habe ich mich für eine Variable entschieden. Ich glaube auch, dass das Sinnvoller ist, wenn ich z.B. die Werte wie zuvor beschrieben später in anderen Code-Teilen weiter verarbeiten möchte. @NIC: Ich bin kein Anwendungsentwickler... und meine Erfahrungen in C# sind... naja... sehr spärlich, zugegebener Maßen. Für kleinere Sachen reicht es sicherlich - aber naja. Ich versuche mich mal weiter in das Thema ein zu lesen ^^ Danke. Zitieren
markus5766h Geschrieben October 23, 2016 at 15:02 Geschrieben October 23, 2016 at 15:02 hm... Reicht im Grunde schon... o.k., danke - wollt's nur wissen, habe in C# noch nicht gearbeitet und dachte, dass es vielleicht eine Notwendigkeit dafür gibt --- bin eigentlich nur in Delphi unterwegs ... Zitieren
CChris Geschrieben October 23, 2016 at 15:18 Autor Geschrieben October 23, 2016 at 15:18 Nein. Wie gesagt, ich bin kein Anwendungsentwickler - und habe C# auch nie richtig gelernt... Ich habe es mir aber angewöhnt, so viel wie möglich in eine Variable zu schreiben - um dann damit ggf. später auch einfacher arbeiten zu können. z.B. Verwende ich mehrere Bricklets, die die Temperatur messen können. Alle arbeiten mit "temperature"... Nun wird aber jede Rückgabe in ihre eigene Variable geschrieben: TemperatureBricklet -> tmp1 = temperature TemperatureIRBricklet -> tmp2 = temperature usw. finde ich persönlich Einfacher... ^^ Aber wie bereits gesagt: Keine Gewähr, ob das schöner - oder gar "korrekter" Code ist. Für mich funktioniert es zumindest... Zitieren
markus5766h Geschrieben October 24, 2016 at 12:04 Geschrieben October 24, 2016 at 12:04 ... z.B. Verwende ich mehrere Bricklets, die die Temperatur messen können. Alle arbeiten mit "temperature"... Nun wird aber jede Rückgabe in ihre eigene Variable geschrieben: TemperatureBricklet -> tmp1 = temperature TemperatureIRBricklet -> tmp2 = temperature ... dann benutz doch gleich Arrays für die Bricklets und die Values, dann haben die "Values", hier "temperature" die gleichen Indizes wie die Bricklets --> Bricklets[0..n] Temperature[0..n] oder ggf. eine eigene Class definieren, somit hast Du dann dein Bricklet mit seinen Eigenschaften in einer Klasse untergebracht - wenn dann die Klassen eindeutig benannt werden, ist der Code auch besser lesbar. Zitieren
CChris Geschrieben October 24, 2016 at 12:28 Autor Geschrieben October 24, 2016 at 12:28 Ich sehe schon... Mein 'paar-zeilen' Testcode hat noch viel Luft nach oben, für optimierungen ^^ Ich setze mich da dann nochmal ran und versuche, das entsprechend umzustricken. Danke. Zitieren
markus5766h Geschrieben October 24, 2016 at 17:29 Geschrieben October 24, 2016 at 17:29 Für "einfache" Sachen wie Auslesen und in einem Textfeld ausgeben reicht Dein Code allemal, wenn's aber dann doch mal mehr wird, sollte man sich überlegen, wie man a) den Datenerhalt b) die Datenausgabe - welche von a) getrennt sein sollte bewerkstelligt. Daher mein Hinweis mit den Arrays oder den Klassen - wenn man sich mal dran gewöhnt hat, wird vieles leichter, weil dadurch der Code übersichtlicher wird. Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.