#include <OneWire.h>

OneWire  ds(12);  

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

  Serial.println( SerNumDS1820() );

}

void loop(void) {
  
}

/******************************************************************
 * eindeutige Seriennummer aus DS1820 generieren
 * 
 *  Rückgabe:     xxxxx           keine gültige Seriennummer
 *                EE48A61D1601    Bespiel für gültige Seriennummer
 *                
 *  20.10.2016  Jürgen, www.DL8MA.de              
 */
String SerNumDS1820( void ) {
  byte i;
  byte addr[8];
  String SerNum = "";
  String str = "";

  if ( !ds.search(addr)) {                        // DS1820 auslesen - wenn keiner mehr gefunden wird:   
    ds.reset_search();                            // Suche zurücksetzen 
    delay(250);
    return( "xxxx" );                             // Rückgabe von "xxxx" als ungültige Seriennummer
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {        // Checksumme überprüfen
      return( "xxxx" );                           // Rückgabe von "xxxx" als ungültige Seriennummer
  }

  for( i = 1; i < 7; i++) {                       // Bytes der Seriennummer auslesen  
    if( addr[i] < 10 )                            // Hexzahlen < 10 eine Null voranstellen
      str = "0" + String( addr[i], HEX);          
    else
      str = String( addr[i], HEX);
    SerNum = SerNum + str;
    SerNum.toUpperCase();                         // Grossbuchstaben sind hier gebräuchlicher  
  }

  return( SerNum );                               // gültige Seriennummer zurückgeben
}