6 #ifndef __SENSORS_DS18B20_h__
7 #define __SENSORS_DS18B20_h__
10 #if defined(ARDUINO_ARCH_STM32F1)
11 #include <OneWireSTM.h>
28 while( ow.search(a) == 1 && num < max) {
29 if( OneWire::crc8(a,7) == a[7] ) {
46 for( uint8_t num=0; num < count; ++num, ++devs ) {
54 static bool valid(uint8_t* addr) {
55 return *addr == 0x10 || *addr == 0x28 || *addr == 0x22;
65 void init (OneWire& ow,uint8_t* addr) {
67 for( uint8_t i=0; i<8; ++i )
72 void convert(__attribute__((unused))
bool kick=
false) {
85 while (_wire->read() == 0) ;
94 for (uint8_t i = 0; i < 9; i++) {
95 data[i] = _wire->read();
98 if (OneWire::crc8(data, 8) == data[8]) {
99 int16_t raw = (data[1] << 8) | data[0];
100 if (_addr[0] == 0x10) {
102 if (data[7] == 0x10) {
104 raw = (raw & 0xFFF0) + 12 - data[6];
107 byte cfg = (data[4] & 0x60);
109 if (cfg == 0x00) raw = raw & ~7;
110 else if (cfg == 0x20) raw = raw & ~3;
111 else if (cfg == 0x40) raw = raw & ~1;
114 _temperature = (raw*10)/16;
118 void measure (__attribute__((unused))
bool async=
false) {
119 if( _present ==
true ) {