#include "OneWire.h"

OneWire ds(7); 

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

byte i; // лічильник для циклів
byte data[9];
byte addr[8];
float celsius, fahrenheit;

void loop() {
  ds.search(addr);
  delay(250);
  
  Serial.print("ID =");
  for( i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);    
  
  delay(1000);     
  
  ds.reset();
  ds.select(addr);    
  ds.write(0xBE);        

  for ( i = 0; i < 9; i++) {  // запис дати з датчика
    data[i] = ds.read();
  }

  Serial.println();

  int16_t raw = (data[1] << 8) | data[0];

  raw = raw << 3; // Роздільна здатність 9 біт за замовчуванням
  if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
    raw = (raw & 0xFFF0) + 12 - data[6];
  }
  
  celsius = (float)raw / 16.0;

  Serial.print("  Celsius = ");
  Serial.println(celsius);
  Serial.println();
  delay(2000);
}