Temp sensor DS18B20 - Serial output not an integer

Using the following example code from the OneWire library, all i get in the serial console is lots of ASCII. Attached is a screenshot of the ASCII

I am new to Arduino. I believe a simple integer temp readout should be quite basic

The Arduino is not official (http://www.freetronics.com/collections/arduino/products/eleven) and neither is the Temp module

#include <OneWire.h>

// OneWire DS18S20, DS18B20, DS1822 Temperature Example
//
// http://www.pjrc.com/teensy/td_libs_OneWire.html
//
// The DallasTemperature library can do all this work for you!
// http://milesburton.com/Dallas_Temperature_Control_Library

OneWire  ds(10);  // on pin 10

void setup(void) {
  Serial.begin(9600);
}

void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
  
  if ( !ds.search(addr)) {
    Serial.println("No more addresses.");
    Serial.println();
    ds.reset_search();
    delay(250);
    return;
  }
  
  Serial.print("ROM =");
  for( i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return;
  }
  Serial.println();
 
  // the first ROM byte indicates which chip
  switch (addr[0]) {
    case 0x10:
      Serial.println("  Chip = DS18S20");  // or old DS1820
      type_s = 1;
      break;
    case 0x28:
      Serial.println("  Chip = DS18B20");
      type_s = 0;
      break;
    case 0x22:
      Serial.println("  Chip = DS1822");
      type_s = 0;
      break;
    default:
      Serial.println("Device is not a DS18x20 family device.");
      return;
  } 

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);         // start conversion, with parasite power on at the end
  
  delay(1000);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
  
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad

  Serial.print("  Data = ");
  Serial.print(present,HEX);
  Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  Serial.print(" CRC=");
  Serial.print(OneWire::crc8(data, 8), HEX);
  Serial.println();

  // convert the data to actual temperature

  unsigned int raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // count remain gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw << 3;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
    // default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
  Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");
  Serial.print(fahrenheit);
  Serial.println(" Fahrenheit");
}

Look at the bottom corner of the terminal window. See the baud rate? That has to match the baud rate you are sending it. You are sending 9600 bauds. Does it match?

Wow, it was something so simple. Now it outputs english!

Thankyou. Also i had it in the wrong pin so it gave incorrect data

Several different ways to use these sensors HERE:

Thanks! I can now get good readings from it.

One quick question, though, I have no 4.7k pulldown resistor, and when i use one i don’t get a temp. reading. Can this damage anything?

#include <OneWire.h>

//Temp sensor DS18B20 pin
OneWire  ds(3);
int ambient = 50;

void setup(void) {
  Serial.begin(115200);
  //
  pinMode(13, OUTPUT);
  int fanspd=1;  
  int fmin = 26.56;
  int fmax = 55;
  
  //Turn off onboard LED (used as Protect indicator)
  digitalWrite(13, HIGH);
  delay(1);
  digitalWrite(13, LOW);
}



void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  int del = 750;
  int fanspd = 1;
  int protect = 0;
  int fmin = 26.56;
  int fmax = 55;
  float celsius, fahrenheit;
  
  if ( !ds.search(addr)) {
    ds.reset_search();
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,0);         // start conversion, with parasite power on at the end
  
  delay(del);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
  
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad

  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
  }

  // convert the data to actual temperature

  unsigned int raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // count remain gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw << 3;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
    // default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  Serial.print(celsius);
  Serial.print(" °C");
  Serial.println();
  
  //Find ambient
    //Overheat
  if ((float)raw / 16.0 < ambient) {if (protect = 0) {
ambient = ((float)raw / 16.0);
Serial.print("Ambient=");
Serial.print(ambient);
Serial.print(" ");}}
  
  //Error Checking
  
  //Temp is warmer than Min
  if ((float)raw / 16.0 >= fmin) 
  {
    fanspd=1;
  Serial.print("Cooling ");
}


//No sensor readout (data pin connection lost)
  if (OneWire::crc8(addr, 7) != addr[7] or (float)raw / 16.0 == 0)//((float)raw / 16.0 == 0)  
  {
   fanspd=100;
  protect = 2;
}

//Overheat - Temp higher than fmax
  if ((float)raw / 16.0 >= fmax)  {fanspd=100;
  Serial.println("Error 1 - Overheat");
  protect = 1;
}

if (protect == 1) {
 fanspd=100;
 digitalWrite(13, HIGH);
 delay(50);
digitalWrite(13, LOW);
if ((float)raw / 16.0 <= fmax - 1)
{
 protect = 0; 
}
}

  if (protect == 2) 
    {
     fanspd=100;
      Serial.println("Error 2 - Sensor missing or quite cold (0.00 C)");
     digitalWrite(13, HIGH);
     delay(50);
     digitalWrite(13, LOW);
     delay(100);
     digitalWrite(13, HIGH);
     delay(50);
     digitalWrite(13, LOW);
     if ((float)raw / 16.0 != 0)
     {
       protect = 0;
     }
    } 
}

I have no 4.7k pulldown resistor,

??? The 1 wire bus uses a pull up resistor.

oh, i meant pullup resistor. Either way, can not having it wreck the microcontroller? I connected a fan RPM cable straight to a digital pin as well.

Either way, can not having it wreck the microcontroller?

No. It might not work, it might be more susceptible to interference but it won't do any harm.