5 _channel_offset=channel_offset;
6 _current_channel=_channel_offset;
7 _addr=(uint8_t*) malloc(8*ds18b20_channels);
8 _ds18b20_channels=ds18b20_channels;
9 for (byte ii=0; ii<_ds18b20_channels; ++ii)
10 for (byte jj=0; jj<8; ++jj) _addr[ii+jj*8] = 0x0;
15 while(_current_channel<(_ds18b20_channels+_channel_offset)){
17 if(_addr[(_current_channel-1-_channel_offset)*8])
return _current_channel;
19 _current_channel=_channel_offset;
24 _current_channel=_channel_offset;
32 while(OneWire::search(_new_addr)){
33 if(OneWire::crc8(_new_addr, 7) !=_new_addr[7])
continue;
34 if (_new_addr[0] != 0x28)
continue;
42 for(i=0;i<_ds18b20_channels;i++){
47 for (j = 0; j < 9; j++) {
50 if(_data[0]==0xFF && _data[1]==0xFF
51 && _data[2]==0xFF && _data[3]==0xFF )
return (i+1+_channel_offset);
59 int addr_offset=(channel-1-_channel_offset)*8;
60 for(uint8_t i=0;i<8;i++){
61 _addr[addr_offset+i]=new_addr[i];
67 int ee_offset=(channel-1)*8;
68 int addr_offset=(channel-1-_channel_offset)*8;
69 if(! EEPROM.read(ee_offset))
return 0;
70 for(uint8_t i=0;i<8;i++){
71 _addr[addr_offset+i]=EEPROM.read(ee_offset+i);
73 if(OneWire::crc8(&_addr[addr_offset], 7) !=_addr[addr_offset+7]){
74 _addr[addr_offset]=0x0;
83 for(uint8_t i=0;i<_ds18b20_channels;i++){
92 const uint8_t* new_addr;
107 int ee_offset=(channel-1)*8;
108 int addr_offset=(channel-1-_channel_offset)*8;
109 for(uint8_t i=0;i<8;i++){
110 EEPROM.write(ee_offset+i,_addr[addr_offset+i]);
116 int addr_offset=(channel-1-_channel_offset)*8;
117 if(! _addr[addr_offset])
return 0x1;
122 select(&_addr[addr_offset]);
124 for (i = 0; i < 9; i++) {
127 if ( OneWire::crc8( _data, 8) != _data[8] && _data[7]!=0xFF){
128 if(! tries)
return 0x2;
131 if(_data[7]==0xFF) *((
long unsigned *) f)=NAN;
132 else *f = *(int16_t *)&_data[0]*0.0625;
137 for(uint8_t i=0;i<_ds18b20_channels;i++){
138 if(_addr[i*8]==0x0)
return (i+1+_channel_offset);
146 _addr[(channel-1-_channel_offset)*8]=0x0;
153 return &_addr[(channel-1-_channel_offset)*8];
157 for(uint8_t i=0;i<_ds18b20_channels;i++){
158 if(addr[0]==_addr[i*8] && addr[1]==_addr[i*8+1] &&
159 addr[2]==_addr[i*8+2] && addr[3]==_addr[i*8+3] &&
160 addr[4]==_addr[i*8+4] && addr[5]==_addr[i*8+5] &&
161 addr[6]==_addr[i*8+6] && addr[7]==_addr[i*8+7])
return (i+1+_channel_offset);
168 String s=String(
"0x");
169 for(uint8_t i=0;i<8;i++){
170 s+=String(addr[i],16);
uint8_t getNextChannel(void)
DS18B20(uint8_t pin, uint8_t channel_offset=0, uint8_t ds18b20_channels=DS18B20_CHANNELS)
uint8_t checkSensors(void)
const uint8_t * getChannelAddress(uint8_t channel) const
uint8_t getChannel(const uint8_t *addr)
const String addr2String(const uint8_t *addr)
uint8_t readChannel(uint8_t channel, float *f, uint8_t tries=1)
uint8_t getNextFreeChannel(void)
uint8_t setAllAddrFromEEPROM(void)
uint8_t getNumberOfChannels(void)
const uint8_t * search(void)
uint8_t deleteChannel(const uint8_t *addr)
void writeAddrToEEPROM(uint8_t channel)
uint8_t readAddrFromEEPROM(uint8_t channel)
uint8_t addSensor(const uint8_t *new_addr, uint8_t channel)