[NOOB] möchte Bedingung ändern



  • Moin Moin Freunde der Sonne,

    ich bin der René 30 Jahre und leidenschaftlicher Griller. Ich habe hier ein Einplatinen Computer von FlyPort mit dem ich meine Grilltemperaturen und Außentemperatur ins WLAN übertrage. Das klappt auch soweit ganz.

    Ich muss aber gestehen, dass ich (noch) überhaupt keine Ahnung von C Programmierung habe. Ich kann zwar einige Sprachen lesen und interpretieren und auch aus Codeschnipsel etwas zusammen basteln, aber kein ganzes Projekt von Grund auf selber programmieren.

    Nun kommt Ihr ins Spiel. Ich möchte auch nur mit einem Codeschnipsel beginnen, da mich der Ehrgeiz packt den Rest selber anzupassen.

    Zur Zeit werden nur Daten übertragen wenn "maverick_detected". Maverick ist das Funk Grillthermomter. Ich möchte aber immer die Daten vom Sensor DS1820 empfangen.

    Hier der Code:

    if (probe1<400 && probe2<400)
    				{
    
    					if (probe2 < (fan_temperature - fan_hysteresis))
    						IOPut(o1,ON);
    
    					if (probe2 > (fan_temperature + fan_hysteresis))
    						IOPut(o1,OFF);
    
    					if (maverick_detected && (DS1820_temp != -999.9))	// if both maverick and DS1820 are detected
    					{
    						data[0]=probe1; 	// FOOD
    						data[1]=probe2;		// BBQ
    						data[2]=DS1820_temp;// AMB
    					}
    					else if (maverick_detected)							// if only maverick is detected
    					{
    						data[0]=probe1; 	// FOOD
    						data[1]=probe2;		// BBQ
    						data[2]=0;			// AMB
    					}
    					else if (DS1820_temp != -999.9)						// if only DS1820 is detected
    					{
    						data[0]=0; 			// FOOD
    						data[1]=0;			// BBQ
    						data[2]=DS1820_temp;// AMB
    					}
    					else
    						continue;
    
    					IOPut(o5,ON);
    					wfTHINGSPEAK(thingKey,data,3);
    
    					IOPut(o5,OFF);				
    				}
    

    Das wird für Euch wahrscheinlich ein Klacks sein, da ich bestimmt nur eine Bedingung ausklammern muss.

    Ich hoffe ihr entziffern was ich möchte/meine.

    Gruß


  • Mod

    Tylon schrieb:

    Zur Zeit werden nur Daten übertragen wenn "maverick_detected". Maverick ist das Funk Grillthermomter. Ich möchte aber immer die Daten vom Sensor DS1820 empfangen.

    Soweit ich das sehe, ist das doch bereits der Fall. Wenn kein maverick vorhanden ist, stattdessen aber ein DS1820, dann greift die Bedingung in Zeile 23. Oder möchtest du Daten senden, selbst wenn gar kein Sensor vorhanden ist? Falls ja, dann wäre das Einfachste das Entfernen der Zeilen 29 und 30. Aber in dem Fall würdest du nur Unsinn versenden, denn es sind schließlich keine Daten da. Falls du in dem Fall lügen möchtest und Nullen versenden willst, dann müsstest du Zeile 29 da lassen und Zeile 30 durch

    data[0] = data[1] = data[2] = 0;
    

    ersetzen.



  • Vielen Dank für die schnelle Antwort.

    Aber ist der ganze nicht schon bereits in der ersten Zeile inaktiv?
    Denn die beiden probe1 und 2 senden ja keine Daten, bzw. nicht immer.

    EDIT: Der DS1820 ist immer angeschlossen. Der Maverick nur wenn ich grille. Wenn der Maverick keine Daten liefert sollen auch keine Daten von diesem gesendet werden. Daten vom DS1820 sollen immer gesendet werden.



  • Tylon schrieb:

    Aber ist der ganze nicht schon bereits in der ersten Zeile inaktiv?
    Denn die beiden probe1 und 2 senden ja keine Daten, bzw. nicht immer.

    Kann die Bedingung in der ersten Zeile wahr werden, wenn das Maverick nicht angeschlossen ist?


  • Mod

    Tylon schrieb:

    Aber ist der ganze nicht schon bereits in der ersten Zeile inaktiv?
    Denn die beiden probe1 und 2 senden ja keine Daten, bzw. nicht immer.

    Häh? Wer ist inaktiv? Was sollen probe1 und probe2 machen?

    EDIT: Der DS1820 ist immer angeschlossen. Der Maverick nur wenn ich grille. Wenn der Maverick keine Daten liefert sollen auch keine Daten von diesem gesendet werden. Daten vom DS1820 sollen immer gesendet werden.

    Aber ist das denn derzeit nicht sowieso der Fall?

    Hier liegt ein gewaltiges Kommunikationsproblem vor. Von dir zum Forum hin. Ich habe mit meiner Erfahrung versucht, die Lücken selber zu füllen, aber dabei anscheinend falsch gelegen. Daher musst du dir nun eine lange Reihe von Gegenfragen gefallen lassen:
    -Wer hat diesen Code geschrieben?
    -Zu welchem Zweck?
    -Wie sind die im Code vorkommenden Bezeichner genau definiert?
    -Was ist die semantische Bedeutung der verschiedenen Bezeichner?
    -Was soll der Code tun?
    -Was tut er tatsächlich?
    -Was möchtest du erreichen?
    -Was hast du bisher versucht?
    -Was passierte bei deinen Versuchen?
    -Wie sieht der Aufbau der Apparatur genau aus?
    -Wo wird das erzeugte Programm ausgeführt?

    Bitte jeweils möglichst genaue Beschreibungen, aber kein langes Geschwafel. Kurz und auf den Punkt. Siehe auch:
    http://www.tty1.net/smart-questions_de.html



  • Bevor ich auf deine Fragen eingehe noch kurz der Hinweis das probe die Bezeichnung für die Messfühler des Maverick sind.
    Rest morgen.



  • Schreib doch den Code (das Stück von oben) selber neu.

    Bedenke dabei, dass die probe keine vernünftigen Daten haben können, wenn maverick_detected false ist.

    Darum ist der gezeigt Code m.M.n. auch falsch.

    Der Vergleich von Fließkommazahlen auf Un-Gleichheit ist immer etwas heikel.
    Besser ist < oder > .
    Da Temperaturen unter −273,15 °C selten vorkommen, hast du da auch einen großen Spielraum.
    Und soweit geht der Messbereich vom DS1820 auch nicht.


Anmelden zum Antworten