DS 1820 zeigt falsche Werte an

Hallo ,ich will über Funk 433MHz die Temperatur schicken. Ich verwende einen UNO mit DS18S20
und den Sketch im Anhang. Das Senden funktioniert ja nur der Temperaturwert ist n.io.
Angezeigt wird 2,75 Grad(Bei 20 Grad Raumtemperatur). Wenn ich den Sensor berühre steigt der Wert
auf 3,XX. Also ist er richtig angeschlossen und reagiert. Im seriellen Monitor wird dasselbe angezeigt.

Wo liegt der Umrechnungsfehler?

Der u. gezeigte Skech ist bekannt und läuft bestimmt schon öfter ohne Fehler.

//Wireless temperature transmitter
//simple wireless temperature tranmitter   
// DS18S20 sensor is connected to pin 8  
// Rf modules tranmit (data) pin is connected to pin 7 on the arduino 
// More info: http://blog.riyas.org/2014/06/cheap-remote-wireless-temperature-sensor-with-arduino-uno-433mhz-rfmodule.html 
#include <VirtualWire.h>  
#include <OneWire.h>   
int DS18S20_Pin = 8; //DS18S20 Signal pin on digital 2  
OneWire ds(DS18S20_Pin); // on digital pin 2  
char *controller;  
char msg[6];  
void setup()   
  {  
     Serial.begin(9600);  
     pinMode(13,OUTPUT);  
     vw_set_ptt_inverted(true); //  
     vw_set_tx_pin(7);  
     vw_setup(4000);// speed of data transfer Kbps  
  }  
void loop()  
  {   
     float temperature = getTemp();  
     Serial.println(temperature);  
     dtostrf(temperature, 6, 2, msg);  
     digitalWrite(13,0);  
     vw_send((uint8_t *)msg, strlen(msg)); // Send temperature.  
     vw_wait_tx();  
     delay(500);  
     digitalWrite(13,1); // blink the led on pin13  
     delay(500);  
  }  
float getTemp()  
{  
 //returns the temperature from one DS18S20 in DEG Celsius  
 byte data[12];  
 byte addr[8];  
 if ( !ds.search(addr)) {  
   //no more sensors on chain, reset search  
   ds.reset_search();  
   return -1000;  
 }  
 if ( OneWire::crc8( addr, 7) != addr[7]) {  
   Serial.println("CRC is not valid!");  
   return -1000;  
 }  
 if ( addr[0] != 0x10 && addr[0] != 0x28) {  
   Serial.print("Device is not recognized");  
   return -1000;  
 }  
 ds.reset();  
 ds.select(addr);  
 ds.write(0x44,1); // start conversion, with parasite power on at the end  
 byte present = ds.reset();  
 ds.select(addr);    
 ds.write(0xBE); // Read Scratchpad  
 for (int i = 0; i < 9; i++) { // we need 9 bytes  
  data[i] = ds.read();  
 }  
 ds.reset_search();  
 byte MSB = data[1];  
 byte LSB = data[0];  
 float tempRead = ((MSB << 8) | LSB); //using two's compliment  
 float TemperatureSum = tempRead / 16;  
 return TemperatureSum;  
}

Nimm ein Beispiel aus der Dallas lib, dann weisst du, ob es am Sketch oder Sensor liegt

Und setz dein Sketch in Code tags

Sensor hab ich schon getauscht

Gut. Hast du den Sketch auch schon getauscht?

Weil im Sketch steht was von ds18s20 und im Titel von 1820. oder hast du den ds18b20?

Siehe auch hier

Wie schon geschrieben solltest du ein Beispiel der Library nehmen.
Und ich vermisse in deinem Sketch die “Dallas-Library”.
Zudem ist deine Geschwindigkeit (kps) für die VirtualWire zu hoch.
Die schafft nur 2000 !
Zudem ist ein Sketch schlecht zu lesen, setze den bitte in Code-Tags, Schaltfläche </> oben links im Editorfenster.

@HotSystems, @EIEspanol Danke jetzt weiss ich auch wo ich den Sketch einbinden muß. (Hab nähmlich gesucht wie das geht) Also ich habe die Dallas-Library eingebunden und habe im Sketch alles was DS18S20 heißt auf DS18B20 umbenannt. Jetzt zeigts wenigstens die richtige Temperatur zwar nur in 0,5 Grad schritten an. Aber vorerst mal gut so und vielen Dank

Xwill:
zwar nur in 0,5 Grad schritten an

Die Auflösung kann man ändern

Xwill: Danke jetzt weiss ich auch wo ich den Sketch einbinden muß. (Hab nähmlich gesucht wie das geht)

Schön....und warum machst du es nicht ?

Jetzt hab ich`s hingekriegt mit dem Code