annotate service/arduinoNode/arduino-libraries/DallasTemperature/DallasTemperature.cpp @ 1318:16a5c8df0f20

release 0.1.0 Ignore-this: d8176b1d00777747f431c40155fd4a6c darcs-hash:218fd667f0dc71e85c1d0d4d971f9ce478e88597
author drewp <drewp@bigasterisk.com>
date Mon, 22 Apr 2019 23:31:29 -0700
parents 4f5825a9fc47
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
970
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
1 // This library is free software; you can redistribute it and/or
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
2 // modify it under the terms of the GNU Lesser General Public
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
3 // License as published by the Free Software Foundation; either
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
4 // version 2.1 of the License, or (at your option) any later version.
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
5
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
6 // Version 3.7.2 modified on Dec 6, 2011 to support Arduino 1.0
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
7 // See Includes...
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
8 // Modified by Jordan Hochenbaum
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
9
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
10 #include "DallasTemperature.h"
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
11
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
12 #if ARDUINO >= 100
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
13 #include "Arduino.h"
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
14 #else
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
15 extern "C" {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
16 #include "WConstants.h"
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
17 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
18 #endif
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
19
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
20 DallasTemperature::DallasTemperature(OneWire* _oneWire)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
21 #if REQUIRESALARMS
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
22 : _AlarmHandler(&defaultAlarmHandler)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
23 #endif
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
24 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
25 _wire = _oneWire;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
26 devices = 0;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
27 parasite = false;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
28 bitResolution = 9;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
29 waitForConversion = true;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
30 checkForConversion = true;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
31 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
32
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
33 // initialise the bus
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
34 void DallasTemperature::begin(void)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
35 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
36 DeviceAddress deviceAddress;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
37
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
38 _wire->reset_search();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
39 devices = 0; // Reset the number of devices when we enumerate wire devices
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
40
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
41 while (_wire->search(deviceAddress))
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
42 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
43 if (validAddress(deviceAddress))
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
44 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
45 if (!parasite && readPowerSupply(deviceAddress)) parasite = true;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
46
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
47 ScratchPad scratchPad;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
48
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
49 readScratchPad(deviceAddress, scratchPad);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
50
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
51 bitResolution = max(bitResolution, getResolution(deviceAddress));
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
52
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
53 devices++;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
54 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
55 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
56 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
57
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
58 // returns the number of devices found on the bus
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
59 uint8_t DallasTemperature::getDeviceCount(void)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
60 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
61 return devices;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
62 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
63
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
64 // returns true if address is valid
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
65 bool DallasTemperature::validAddress(const uint8_t* deviceAddress)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
66 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
67 return (_wire->crc8(deviceAddress, 7) == deviceAddress[7]);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
68 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
69
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
70 // finds an address at a given index on the bus
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
71 // returns true if the device was found
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
72 bool DallasTemperature::getAddress(uint8_t* deviceAddress, uint8_t index)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
73 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
74 uint8_t depth = 0;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
75
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
76 _wire->reset_search();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
77
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
78 while (depth <= index && _wire->search(deviceAddress))
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
79 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
80 if (depth == index && validAddress(deviceAddress)) return true;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
81 depth++;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
82 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
83
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
84 return false;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
85 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
86
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
87 // attempt to determine if the device at the given address is connected to the bus
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
88 bool DallasTemperature::isConnected(const uint8_t* deviceAddress)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
89 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
90 ScratchPad scratchPad;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
91 return isConnected(deviceAddress, scratchPad);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
92 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
93
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
94 // attempt to determine if the device at the given address is connected to the bus
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
95 // also allows for updating the read scratchpad
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
96 bool DallasTemperature::isConnected(const uint8_t* deviceAddress, uint8_t* scratchPad)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
97 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
98 readScratchPad(deviceAddress, scratchPad);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
99 return (_wire->crc8(scratchPad, 8) == scratchPad[SCRATCHPAD_CRC]);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
100 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
101
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
102 // read device's scratch pad
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
103 void DallasTemperature::readScratchPad(const uint8_t* deviceAddress, uint8_t* scratchPad)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
104 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
105 // send the command
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
106 _wire->reset();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
107 _wire->select(deviceAddress);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
108 _wire->write(READSCRATCH);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
109
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
110 // TODO => collect all comments & use simple loop
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
111 // byte 0: temperature LSB
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
112 // byte 1: temperature MSB
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
113 // byte 2: high alarm temp
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
114 // byte 3: low alarm temp
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
115 // byte 4: DS18S20: store for crc
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
116 // DS18B20 & DS1822: configuration register
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
117 // byte 5: internal use & crc
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
118 // byte 6: DS18S20: COUNT_REMAIN
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
119 // DS18B20 & DS1822: store for crc
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
120 // byte 7: DS18S20: COUNT_PER_C
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
121 // DS18B20 & DS1822: store for crc
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
122 // byte 8: SCRATCHPAD_CRC
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
123 //
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
124 // for(int i=0; i<9; i++)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
125 // {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
126 // scratchPad[i] = _wire->read();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
127 // }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
128
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
129
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
130 // read the response
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
131
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
132 // byte 0: temperature LSB
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
133 scratchPad[TEMP_LSB] = _wire->read();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
134
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
135 // byte 1: temperature MSB
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
136 scratchPad[TEMP_MSB] = _wire->read();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
137
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
138 // byte 2: high alarm temp
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
139 scratchPad[HIGH_ALARM_TEMP] = _wire->read();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
140
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
141 // byte 3: low alarm temp
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
142 scratchPad[LOW_ALARM_TEMP] = _wire->read();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
143
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
144 // byte 4:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
145 // DS18S20: store for crc
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
146 // DS18B20 & DS1822: configuration register
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
147 scratchPad[CONFIGURATION] = _wire->read();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
148
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
149 // byte 5:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
150 // internal use & crc
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
151 scratchPad[INTERNAL_BYTE] = _wire->read();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
152
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
153 // byte 6:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
154 // DS18S20: COUNT_REMAIN
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
155 // DS18B20 & DS1822: store for crc
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
156 scratchPad[COUNT_REMAIN] = _wire->read();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
157
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
158 // byte 7:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
159 // DS18S20: COUNT_PER_C
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
160 // DS18B20 & DS1822: store for crc
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
161 scratchPad[COUNT_PER_C] = _wire->read();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
162
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
163 // byte 8:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
164 // SCTRACHPAD_CRC
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
165 scratchPad[SCRATCHPAD_CRC] = _wire->read();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
166
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
167 _wire->reset();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
168 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
169
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
170 // writes device's scratch pad
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
171 void DallasTemperature::writeScratchPad(const uint8_t* deviceAddress, const uint8_t* scratchPad)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
172 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
173 _wire->reset();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
174 _wire->select(deviceAddress);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
175 _wire->write(WRITESCRATCH);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
176 _wire->write(scratchPad[HIGH_ALARM_TEMP]); // high alarm temp
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
177 _wire->write(scratchPad[LOW_ALARM_TEMP]); // low alarm temp
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
178 // DS1820 and DS18S20 have no configuration register
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
179 if (deviceAddress[0] != DS18S20MODEL) _wire->write(scratchPad[CONFIGURATION]); // configuration
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
180 _wire->reset();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
181 _wire->select(deviceAddress); //<--this line was missing
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
182 // save the newly written values to eeprom
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
183 _wire->write(COPYSCRATCH, parasite);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
184 delay(20); // <--- added 20ms delay to allow 10ms long EEPROM write operation (as specified by datasheet)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
185 if (parasite) delay(10); // 10ms delay
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
186 _wire->reset();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
187 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
188
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
189 // reads the device's power requirements
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
190 bool DallasTemperature::readPowerSupply(const uint8_t* deviceAddress)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
191 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
192 bool ret = false;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
193 _wire->reset();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
194 _wire->select(deviceAddress);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
195 _wire->write(READPOWERSUPPLY);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
196 if (_wire->read_bit() == 0) ret = true;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
197 _wire->reset();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
198 return ret;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
199 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
200
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
201
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
202 // set resolution of all devices to 9, 10, 11, or 12 bits
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
203 // if new resolution is out of range, it is constrained.
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
204 void DallasTemperature::setResolution(uint8_t newResolution)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
205 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
206 bitResolution = constrain(newResolution, 9, 12);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
207 DeviceAddress deviceAddress;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
208 for (int i=0; i<devices; i++)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
209 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
210 getAddress(deviceAddress, i);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
211 setResolution(deviceAddress, bitResolution);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
212 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
213 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
214
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
215 // set resolution of a device to 9, 10, 11, or 12 bits
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
216 // if new resolution is out of range, 9 bits is used.
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
217 bool DallasTemperature::setResolution(const uint8_t* deviceAddress, uint8_t newResolution)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
218 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
219 ScratchPad scratchPad;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
220 if (isConnected(deviceAddress, scratchPad))
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
221 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
222 // DS1820 and DS18S20 have no resolution configuration register
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
223 if (deviceAddress[0] != DS18S20MODEL)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
224 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
225 switch (newResolution)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
226 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
227 case 12:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
228 scratchPad[CONFIGURATION] = TEMP_12_BIT;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
229 break;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
230 case 11:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
231 scratchPad[CONFIGURATION] = TEMP_11_BIT;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
232 break;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
233 case 10:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
234 scratchPad[CONFIGURATION] = TEMP_10_BIT;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
235 break;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
236 case 9:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
237 default:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
238 scratchPad[CONFIGURATION] = TEMP_9_BIT;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
239 break;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
240 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
241 writeScratchPad(deviceAddress, scratchPad);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
242 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
243 return true; // new value set
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
244 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
245 return false;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
246 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
247
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
248 // returns the global resolution
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
249 uint8_t DallasTemperature::getResolution()
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
250 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
251 return bitResolution;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
252 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
253
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
254 // returns the current resolution of the device, 9-12
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
255 // returns 0 if device not found
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
256 uint8_t DallasTemperature::getResolution(const uint8_t* deviceAddress)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
257 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
258 // DS1820 and DS18S20 have no resolution configuration register
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
259 if (deviceAddress[0] == DS18S20MODEL) return 12;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
260
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
261 ScratchPad scratchPad;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
262 if (isConnected(deviceAddress, scratchPad))
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
263 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
264 switch (scratchPad[CONFIGURATION])
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
265 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
266 case TEMP_12_BIT:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
267 return 12;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
268
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
269 case TEMP_11_BIT:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
270 return 11;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
271
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
272 case TEMP_10_BIT:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
273 return 10;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
274
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
275 case TEMP_9_BIT:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
276 return 9;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
277 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
278 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
279 return 0;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
280 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
281
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
282
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
283 // sets the value of the waitForConversion flag
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
284 // TRUE : function requestTemperature() etc returns when conversion is ready
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
285 // FALSE: function requestTemperature() etc returns immediately (USE WITH CARE!!)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
286 // (1) programmer has to check if the needed delay has passed
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
287 // (2) but the application can do meaningful things in that time
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
288 void DallasTemperature::setWaitForConversion(bool flag)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
289 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
290 waitForConversion = flag;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
291 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
292
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
293 // gets the value of the waitForConversion flag
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
294 bool DallasTemperature::getWaitForConversion()
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
295 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
296 return waitForConversion;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
297 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
298
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
299
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
300 // sets the value of the checkForConversion flag
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
301 // TRUE : function requestTemperature() etc will 'listen' to an IC to determine whether a conversion is complete
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
302 // FALSE: function requestTemperature() etc will wait a set time (worst case scenario) for a conversion to complete
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
303 void DallasTemperature::setCheckForConversion(bool flag)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
304 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
305 checkForConversion = flag;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
306 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
307
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
308 // gets the value of the waitForConversion flag
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
309 bool DallasTemperature::getCheckForConversion()
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
310 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
311 return checkForConversion;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
312 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
313
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
314 bool DallasTemperature::isConversionAvailable(const uint8_t* deviceAddress)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
315 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
316 // Check if the clock has been raised indicating the conversion is complete
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
317 ScratchPad scratchPad;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
318 readScratchPad(deviceAddress, scratchPad);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
319 return scratchPad[0];
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
320 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
321
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
322
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
323 // sends command for all devices on the bus to perform a temperature conversion
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
324 void DallasTemperature::requestTemperatures()
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
325 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
326 _wire->reset();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
327 _wire->skip();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
328 _wire->write(STARTCONVO, parasite);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
329
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
330 // ASYNC mode?
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
331 if (!waitForConversion) return;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
332 blockTillConversionComplete(bitResolution, NULL);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
333 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
334
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
335 // sends command for one device to perform a temperature by address
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
336 // returns FALSE if device is disconnected
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
337 // returns TRUE otherwise
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
338 bool DallasTemperature::requestTemperaturesByAddress(const uint8_t* deviceAddress)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
339 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
340 _wire->reset();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
341 _wire->select(deviceAddress);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
342 _wire->write(STARTCONVO, parasite);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
343
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
344 // check device
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
345 ScratchPad scratchPad;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
346 if (!isConnected(deviceAddress, scratchPad)) return false;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
347
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
348 // ASYNC mode?
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
349 if (!waitForConversion) return true;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
350 blockTillConversionComplete(getResolution(deviceAddress), deviceAddress);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
351
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
352 return true;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
353 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
354
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
355 // returns number of milliseconds to wait till conversion is complete (based on IC datasheet)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
356 int16_t DallasTemperature::millisToWaitForConversion(uint8_t bitResolution)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
357 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
358 switch (bitResolution)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
359 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
360 case 9:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
361 return 94;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
362 case 10:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
363 return 188;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
364 case 11:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
365 return 375;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
366 default:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
367 return 750;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
368 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
369 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
370
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
371 // Continue to check if the IC has responded with a temperature
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
372 void DallasTemperature::blockTillConversionComplete(uint8_t bitResolution, const uint8_t* deviceAddress)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
373 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
374 int delms = millisToWaitForConversion(bitResolution);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
375 if (deviceAddress != NULL && checkForConversion && !parasite)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
376 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
377 unsigned long timend = millis() + delms;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
378 while(!isConversionAvailable(deviceAddress) && (millis() < timend));
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
379 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
380 else
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
381 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
382 delay(delms);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
383 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
384 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
385
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
386 // sends command for one device to perform a temp conversion by index
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
387 bool DallasTemperature::requestTemperaturesByIndex(uint8_t deviceIndex)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
388 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
389 DeviceAddress deviceAddress;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
390 getAddress(deviceAddress, deviceIndex);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
391 return requestTemperaturesByAddress(deviceAddress);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
392 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
393
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
394 // Fetch temperature for device index
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
395 float DallasTemperature::getTempCByIndex(uint8_t deviceIndex)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
396 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
397 DeviceAddress deviceAddress;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
398 if (!getAddress(deviceAddress, deviceIndex))
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
399 return DEVICE_DISCONNECTED_C;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
400 return getTempC((uint8_t*)deviceAddress);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
401 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
402
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
403 // Fetch temperature for device index
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
404 float DallasTemperature::getTempFByIndex(uint8_t deviceIndex)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
405 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
406 DeviceAddress deviceAddress;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
407 if (!getAddress(deviceAddress, deviceIndex))
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
408 return DEVICE_DISCONNECTED_F;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
409 return getTempF((uint8_t*)deviceAddress);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
410 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
411
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
412 // reads scratchpad and returns fixed-point temperature, scaling factor 2^-7
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
413 int16_t DallasTemperature::calculateTemperature(const uint8_t* deviceAddress, uint8_t* scratchPad)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
414 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
415 int16_t fpTemperature =
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
416 (((int16_t) scratchPad[TEMP_MSB]) << 11) |
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
417 (((int16_t) scratchPad[TEMP_LSB]) << 3);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
418
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
419 /*
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
420 DS1820 and DS18S20 have a 9-bit temperature register.
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
421
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
422 Resolutions greater than 9-bit can be calculated using the data from
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
423 the temperature, and COUNT REMAIN and COUNT PER °C registers in the
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
424 scratchpad. The resolution of the calculation depends on the model.
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
425
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
426 While the COUNT PER °C register is hard-wired to 16 (10h) in a
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
427 DS18S20, it changes with temperature in DS1820.
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
428
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
429 After reading the scratchpad, the TEMP_READ value is obtained by
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
430 truncating the 0.5°C bit (bit 0) from the temperature data. The
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
431 extended resolution temperature can then be calculated using the
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
432 following equation:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
433
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
434 COUNT_PER_C - COUNT_REMAIN
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
435 TEMPERATURE = TEMP_READ - 0.25 + --------------------------
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
436 COUNT_PER_C
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
437
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
438 Hagai Shatz simplified this to integer arithmetic for a 12 bits
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
439 value for a DS18S20, and James Cameron added legacy DS1820 support.
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
440
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
441 See - http://myarduinotoy.blogspot.co.uk/2013/02/12bit-result-from-ds18s20.html
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
442 */
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
443
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
444 if (deviceAddress[0] == DS18S20MODEL)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
445 fpTemperature = ((fpTemperature & 0xfff0) << 3) - 16 +
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
446 (
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
447 ((scratchPad[COUNT_PER_C] - scratchPad[COUNT_REMAIN]) << 7) /
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
448 scratchPad[COUNT_PER_C]
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
449 );
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
450
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
451 return fpTemperature;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
452 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
453
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
454
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
455 // returns temperature in 1/128 degrees C or DEVICE_DISCONNECTED_RAW if the
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
456 // device's scratch pad cannot be read successfully.
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
457 // the numeric value of DEVICE_DISCONNECTED_RAW is defined in
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
458 // DallasTemperature.h. It is a large negative number outside the
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
459 // operating range of the device
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
460 int16_t DallasTemperature::getTemp(const uint8_t* deviceAddress)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
461 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
462 ScratchPad scratchPad;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
463 if (isConnected(deviceAddress, scratchPad)) return calculateTemperature(deviceAddress, scratchPad);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
464 return DEVICE_DISCONNECTED_RAW;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
465 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
466
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
467 // returns temperature in degrees C or DEVICE_DISCONNECTED_C if the
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
468 // device's scratch pad cannot be read successfully.
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
469 // the numeric value of DEVICE_DISCONNECTED_C is defined in
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
470 // DallasTemperature.h. It is a large negative number outside the
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
471 // operating range of the device
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
472 float DallasTemperature::getTempC(const uint8_t* deviceAddress)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
473 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
474 return rawToCelsius(getTemp(deviceAddress));
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
475 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
476
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
477 // returns temperature in degrees F or DEVICE_DISCONNECTED_F if the
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
478 // device's scratch pad cannot be read successfully.
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
479 // the numeric value of DEVICE_DISCONNECTED_F is defined in
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
480 // DallasTemperature.h. It is a large negative number outside the
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
481 // operating range of the device
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
482 float DallasTemperature::getTempF(const uint8_t* deviceAddress)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
483 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
484 return rawToFahrenheit(getTemp(deviceAddress));
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
485 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
486
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
487 // returns true if the bus requires parasite power
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
488 bool DallasTemperature::isParasitePowerMode(void)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
489 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
490 return parasite;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
491 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
492
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
493 #if REQUIRESALARMS
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
494
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
495 /*
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
496
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
497 ALARMS:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
498
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
499 TH and TL Register Format
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
500
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
501 BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
502 S 2^6 2^5 2^4 2^3 2^2 2^1 2^0
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
503
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
504 Only bits 11 through 4 of the temperature register are used
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
505 in the TH and TL comparison since TH and TL are 8-bit
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
506 registers. If the measured temperature is lower than or equal
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
507 to TL or higher than or equal to TH, an alarm condition exists
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
508 and an alarm flag is set inside the DS18B20. This flag is
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
509 updated after every temperature measurement; therefore, if the
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
510 alarm condition goes away, the flag will be turned off after
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
511 the next temperature conversion.
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
512
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
513 */
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
514
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
515 // sets the high alarm temperature for a device in degrees Celsius
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
516 // accepts a float, but the alarm resolution will ignore anything
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
517 // after a decimal point. valid range is -55C - 125C
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
518 void DallasTemperature::setHighAlarmTemp(const uint8_t* deviceAddress, char celsius)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
519 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
520 // make sure the alarm temperature is within the device's range
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
521 if (celsius > 125) celsius = 125;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
522 else if (celsius < -55) celsius = -55;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
523
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
524 ScratchPad scratchPad;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
525 if (isConnected(deviceAddress, scratchPad))
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
526 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
527 scratchPad[HIGH_ALARM_TEMP] = (uint8_t)celsius;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
528 writeScratchPad(deviceAddress, scratchPad);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
529 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
530 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
531
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
532 // sets the low alarm temperature for a device in degrees Celsius
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
533 // accepts a float, but the alarm resolution will ignore anything
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
534 // after a decimal point. valid range is -55C - 125C
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
535 void DallasTemperature::setLowAlarmTemp(const uint8_t* deviceAddress, char celsius)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
536 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
537 // make sure the alarm temperature is within the device's range
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
538 if (celsius > 125) celsius = 125;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
539 else if (celsius < -55) celsius = -55;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
540
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
541 ScratchPad scratchPad;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
542 if (isConnected(deviceAddress, scratchPad))
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
543 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
544 scratchPad[LOW_ALARM_TEMP] = (uint8_t)celsius;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
545 writeScratchPad(deviceAddress, scratchPad);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
546 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
547 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
548
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
549 // returns a char with the current high alarm temperature or
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
550 // DEVICE_DISCONNECTED for an address
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
551 char DallasTemperature::getHighAlarmTemp(const uint8_t* deviceAddress)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
552 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
553 ScratchPad scratchPad;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
554 if (isConnected(deviceAddress, scratchPad)) return (char)scratchPad[HIGH_ALARM_TEMP];
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
555 return DEVICE_DISCONNECTED_C;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
556 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
557
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
558 // returns a char with the current low alarm temperature or
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
559 // DEVICE_DISCONNECTED for an address
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
560 char DallasTemperature::getLowAlarmTemp(const uint8_t* deviceAddress)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
561 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
562 ScratchPad scratchPad;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
563 if (isConnected(deviceAddress, scratchPad)) return (char)scratchPad[LOW_ALARM_TEMP];
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
564 return DEVICE_DISCONNECTED_C;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
565 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
566
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
567 // resets internal variables used for the alarm search
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
568 void DallasTemperature::resetAlarmSearch()
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
569 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
570 alarmSearchJunction = -1;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
571 alarmSearchExhausted = 0;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
572 for(uint8_t i = 0; i < 7; i++)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
573 alarmSearchAddress[i] = 0;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
574 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
575
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
576 // This is a modified version of the OneWire::search method.
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
577 //
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
578 // Also added the OneWire search fix documented here:
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
579 // http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238032295
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
580 //
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
581 // Perform an alarm search. If this function returns a '1' then it has
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
582 // enumerated the next device and you may retrieve the ROM from the
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
583 // OneWire::address variable. If there are no devices, no further
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
584 // devices, or something horrible happens in the middle of the
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
585 // enumeration then a 0 is returned. If a new device is found then
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
586 // its address is copied to newAddr. Use
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
587 // DallasTemperature::resetAlarmSearch() to start over.
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
588 bool DallasTemperature::alarmSearch(uint8_t* newAddr)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
589 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
590 uint8_t i;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
591 char lastJunction = -1;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
592 uint8_t done = 1;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
593
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
594 if (alarmSearchExhausted) return false;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
595 if (!_wire->reset()) return false;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
596
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
597 // send the alarm search command
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
598 _wire->write(0xEC, 0);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
599
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
600 for(i = 0; i < 64; i++)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
601 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
602 uint8_t a = _wire->read_bit( );
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
603 uint8_t nota = _wire->read_bit( );
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
604 uint8_t ibyte = i / 8;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
605 uint8_t ibit = 1 << (i & 7);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
606
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
607 // I don't think this should happen, this means nothing responded, but maybe if
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
608 // something vanishes during the search it will come up.
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
609 if (a && nota) return false;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
610
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
611 if (!a && !nota)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
612 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
613 if (i == alarmSearchJunction)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
614 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
615 // this is our time to decide differently, we went zero last time, go one.
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
616 a = 1;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
617 alarmSearchJunction = lastJunction;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
618 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
619 else if (i < alarmSearchJunction)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
620 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
621 // take whatever we took last time, look in address
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
622 if (alarmSearchAddress[ibyte] & ibit) a = 1;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
623 else
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
624 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
625 // Only 0s count as pending junctions, we've already exhausted the 0 side of 1s
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
626 a = 0;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
627 done = 0;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
628 lastJunction = i;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
629 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
630 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
631 else
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
632 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
633 // we are blazing new tree, take the 0
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
634 a = 0;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
635 alarmSearchJunction = i;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
636 done = 0;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
637 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
638 // OneWire search fix
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
639 // See: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238032295
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
640 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
641
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
642 if (a) alarmSearchAddress[ibyte] |= ibit;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
643 else alarmSearchAddress[ibyte] &= ~ibit;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
644
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
645 _wire->write_bit(a);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
646 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
647
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
648 if (done) alarmSearchExhausted = 1;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
649 for (i = 0; i < 8; i++) newAddr[i] = alarmSearchAddress[i];
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
650 return true;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
651 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
652
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
653 // returns true if device address might have an alarm condition
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
654 // (only an alarm search can verify this)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
655 bool DallasTemperature::hasAlarm(const uint8_t* deviceAddress)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
656 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
657 ScratchPad scratchPad;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
658 if (isConnected(deviceAddress, scratchPad))
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
659 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
660 char temp = calculateTemperature(deviceAddress, scratchPad) >> 7;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
661
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
662 // check low alarm
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
663 if (temp <= (char)scratchPad[LOW_ALARM_TEMP]) return true;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
664
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
665 // check high alarm
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
666 if (temp >= (char)scratchPad[HIGH_ALARM_TEMP]) return true;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
667 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
668
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
669 // no alarm
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
670 return false;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
671 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
672
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
673 // returns true if any device is reporting an alarm condition on the bus
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
674 bool DallasTemperature::hasAlarm(void)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
675 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
676 DeviceAddress deviceAddress;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
677 resetAlarmSearch();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
678 return alarmSearch(deviceAddress);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
679 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
680
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
681 // runs the alarm handler for all devices returned by alarmSearch()
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
682 void DallasTemperature::processAlarms(void)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
683 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
684 resetAlarmSearch();
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
685 DeviceAddress alarmAddr;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
686
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
687 while (alarmSearch(alarmAddr))
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
688 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
689 if (validAddress(alarmAddr))
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
690 _AlarmHandler(alarmAddr);
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
691 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
692 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
693
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
694 // sets the alarm handler
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
695 void DallasTemperature::setAlarmHandler(AlarmHandler *handler)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
696 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
697 _AlarmHandler = handler;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
698 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
699
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
700 // The default alarm handler
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
701 void DallasTemperature::defaultAlarmHandler(const uint8_t* deviceAddress)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
702 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
703 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
704
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
705 #endif
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
706
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
707 // Convert float Celsius to Fahrenheit
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
708 float DallasTemperature::toFahrenheit(float celsius)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
709 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
710 return (celsius * 1.8) + 32;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
711 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
712
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
713 // Convert float Fahrenheit to Celsius
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
714 float DallasTemperature::toCelsius(float fahrenheit)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
715 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
716 return (fahrenheit - 32) * 0.555555556;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
717 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
718
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
719 // convert from raw to Celsius
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
720 float DallasTemperature::rawToCelsius(int16_t raw)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
721 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
722 if (raw <= DEVICE_DISCONNECTED_RAW)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
723 return DEVICE_DISCONNECTED_C;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
724 // C = RAW/128
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
725 return (float)raw * 0.0078125;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
726 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
727
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
728 // convert from raw to Fahrenheit
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
729 float DallasTemperature::rawToFahrenheit(int16_t raw)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
730 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
731 if (raw <= DEVICE_DISCONNECTED_RAW)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
732 return DEVICE_DISCONNECTED_F;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
733 // C = RAW/128
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
734 // F = (C*1.8)+32 = (RAW/128*1.8)+32 = (RAW*0.0140625)+32
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
735 return ((float)raw * 0.0140625) + 32;
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
736 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
737
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
738 #if REQUIRESNEW
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
739
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
740 // MnetCS - Allocates memory for DallasTemperature. Allows us to instance a new object
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
741 void* DallasTemperature::operator new(unsigned int size) // Implicit NSS obj size
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
742 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
743 void * p; // void pointer
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
744 p = malloc(size); // Allocate memory
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
745 memset((DallasTemperature*)p,0,size); // Initialise memory
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
746
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
747 //!!! CANT EXPLICITLY CALL CONSTRUCTOR - workaround by using an init() methodR - workaround by using an init() method
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
748 return (DallasTemperature*) p; // Cast blank region to NSS pointer
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
749 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
750
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
751 // MnetCS 2009 - Free the memory used by this instance
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
752 void DallasTemperature::operator delete(void* p)
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
753 {
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
754 DallasTemperature* pNss = (DallasTemperature*) p; // Cast to NSS pointer
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
755 pNss->~DallasTemperature(); // Destruct the object
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
756
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
757 free(p); // Free the memory
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
758 }
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
759
4f5825a9fc47 some external arduino libs, minus examples and docs
drewp <drewp@bigasterisk.com>
parents:
diff changeset
760 #endif