int readDS18B20_CRC(byte ROMcodeIdx) { static byte scratchpad[9]; for(int i=0; i<3; i++) { // maximal 3 Versuche, einen Wert mit korrekter CRC zu lesen ds18b20.reset(); ds18b20.select(ROMcode_g[ROMcodeIdx]); ds18b20.write(0x44); // This command initiates a single temperature conversion ds18b20.reset(); ds18b20.select(ROMcode_g[ROMcodeIdx]); ds18b20.write(0xBE); // Read Scratchpad for(int j=0; j<9; j++) { scratchpad[j]=ds18b20.read(); } if(scratchpad[5]==0xFF && scratchpad[7]==0x10 && OneWire::crc8(scratchpad, 8)==scratchpad[8]) { // BIT 15 14 1 1 11 10 09 08 07 06 05 04 03 02 01 00 // S S S S S 2^6 2^5 2^4 2^3 2^2 2^1 2^0 2^-1 2^-2 2^-3 2^-4 return((scratchpad[1]<<8)|scratchpad[0]); } } return(0x8FFF); // Fehlerkennung (0x8FFF kann nicht als Temperatur-Wert vorkommen) } |