Download this file
#include "temperature.h"
#include 

Temperature::Temperature():
  ds(6), initialized(false)
{
  uint8_t retries = 5;
  while (retries && !ds.search(addr)) {
    ds.reset_search();
    delay(250);
    retries--;
  }
  if (retries &&
      OneWire::crc8( addr, 7) == addr[7] &&
      addr[0] == 0x10) {
    initialized = true;
  }
}

void Temperature::start_reading() {
  if (!initialized) return;
  ds.reset();
  ds.select(addr);
  ds.write(0x44,0); // 0: no parasitic power, 1: with parasitic power
  ready_time = millis() + 1000;
}

unsigned short Temperature::get_value() {
  if (!initialized) return 0xFF00; // out of range of the DS18S20 => error
  while((int32_t) (millis() - ready_time) < 0)
    delay(5);
  ds.reset();
  ds.select(addr);
  ds.write(0xBE);
  //Serial.print("buf: ");
  for (int i = 0; i < 9; i++) {
    data[i] = ds.read();
    //Serial.print(data[i], HEX); Serial.print(" ");
  }
  //Serial.println();
  unsigned short val = (data[1] << 8) | data[0];
  return val;
}

// vim:ft=arduino