Problem mit Zahlenwerten und weiterverarbeitung

Gast #550227
Lesenswert?
• ▲
▼
Hallo,

bin noch neu auf dem gebiet bitte nicht hauen...

Ich benutze den Code von Peter Dannegger für das 1-Wire Protokoll in C 
für einen DS18B20. Dies Funktioniert soweit auch wunderbar übrigens 
bedanke ich mich für den Code. Nun habe ich das Programm etwas erweitert 
für die Ausgabe auf einem Lcd Display das funktioniert soweit auch. 
Leider bekomme ich es nicht hin mit den vom Sensor geholten daten weiter 
zuarbeiten. Ich möchte bei bestimmten Temperaturen verschiedene Dinge 
steuern in etwa so als beispiel
> 30° Led an < 30° Led aus. Dies zu programmieren in einer If Klausel wäre auch 
nicht das Problem ich weis nur einfach nicht wie ich ihm die werte entlocke und um 
zusagen if x >= 30 mach sonstwas.

anbei der Code auszug der den Wert ausgibt und ans Uart weiterschickt...

      w1_byte_wr( READ );      // read command
      temp = w1_byte_rd();      // low byte
      temp |= (uint)w1_byte_rd() << 8;    // high byte
      if( id[0] == 0x10 )      // 9 -> 12 bit
        temp <<= 3;
      sprintf( s, "  T: %04X = ", temp );  // hex value
      uputs( s );
      sprintf( s, "%4d.%01døC", temp >> 4, (temp << 12) / 6553 ); // 
0.1øC
      uputsnl( s );

Wäre nett wenn mir jemand helfen könnte...

Mfg Nina
#550265
Lesenswert?
• ▲
▼
Leider ist Dein Posting etwas kryptisch und ich habe offen gesagt keine 
Lust, aus dem sprintf zu rekonstruieren, was Dein Sensor für Daten 
liefert.

Im Prinzip geht man bei solchen Problemen folgendermaßen vor:

Man nimmt die Umrechnungsfunktion, mit der man aus dem Sensorwert den 
Zielwert berechnet. Wenn die Umrechnungsfunktion eine Gerade ist

     y = a*x + b

dann wäre in Deinem Fall y die Temperatur in °C und x der Sensorwert.

Wenn Du jetzt wissen willst, welchen Wert der Sensor schickt, wenn 30°C 
erreicht sind, setzt Du einfach den Wert in die Formel ein:

     30 = a*x + b

und löst die Gleichung nach x auf.

Den Wert, der dabei heraus kommt, setzt Du in dein Programm ein.

Angemommen, bei Deiner Rechnung kommt 237 heraus, dann schreibst Du im 
Programm:

     if (temp > 237)
         MachwasWennWenigerAls30Grad();
     else
         MachwasWennGleichOderMehrAls30Grad();

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.