Mercurial > code > home > repos > homeauto
annotate service/arduinoNode/arduino-libraries/DallasTemperature/DallasTemperature.cpp @ 970:4f5825a9fc47
some external arduino libs, minus examples and docs
Ignore-this: 444126f11a1755109b3b29cbeaa6b9bd
darcs-hash:20150411084314-312f9-165a2a8d6ee806950c8a7ae2145364d286fd50b4
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Sat, 11 Apr 2015 01:43:14 -0700 |
parents | |
children |
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 |