#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
}