Skip to content

Commit f72579e

Browse files
author
Miles Burton
committed
fix: Resolved merge conflicts - take one million
1 parent f68e828 commit f72579e

File tree

1 file changed

+64
-132
lines changed

1 file changed

+64
-132
lines changed

DallasTemperature.cpp

Lines changed: 64 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -1,137 +1,69 @@
1-
#include "DallasTemperature.h"
1+
#pragma once
22

3-
namespace Dallas {
4-
5-
// Constructors
6-
DallasTemperature::DallasTemperature() = default;
7-
8-
DallasTemperature::DallasTemperature(OneWire* oneWire) : oneWire(oneWire) {}
9-
10-
DallasTemperature::DallasTemperature(OneWire* oneWire, uint8_t pullupPin)
11-
: oneWire(oneWire), pullupPin(pullupPin) {}
12-
13-
// Configuration
14-
void DallasTemperature::begin() {
15-
if (!oneWire) return;
16-
oneWire->reset_search();
17-
parasitePowerMode = false;
18-
bitResolution = 9;
19-
}
20-
21-
void DallasTemperature::setOneWire(OneWire* oneWire) {
22-
this->oneWire = oneWire;
23-
}
24-
25-
void DallasTemperature::setPullupPin(uint8_t pullupPin) {
26-
this->pullupPin = pullupPin;
27-
pinMode(pullupPin, OUTPUT);
28-
deactivateExternalPullup();
29-
}
30-
31-
// Device Management
32-
uint8_t DallasTemperature::getDeviceCount() const {
33-
uint8_t count = 0;
34-
DeviceAddress address;
35-
oneWire->reset_search();
36-
while (oneWire->search(address.data())) {
37-
count++;
38-
}
39-
return count;
40-
}
41-
42-
uint8_t DallasTemperature::getDS18Count() const {
43-
uint8_t count = 0;
44-
DeviceAddress address;
45-
oneWire->reset_search();
46-
while (oneWire->search(address.data())) {
47-
if (address[0] == 0x28) { // Match DS18B20 family code
48-
count++;
49-
}
50-
}
51-
return count;
52-
}
53-
54-
bool DallasTemperature::isConnected(const DeviceAddress& address) const {
55-
ScratchPad scratchPad;
56-
return isConnected(address, scratchPad);
57-
}
58-
59-
bool DallasTemperature::isConnected(const DeviceAddress& address, ScratchPad& scratchPad) const {
60-
return readScratchPad(address, scratchPad);
61-
}
3+
#include <stdint.h>
4+
#include <Arduino.h>
5+
#ifdef __STM32F1__
6+
#include <OneWireSTM.h>
7+
#else
8+
#include <OneWire.h>
9+
#endif
6210

63-
// Temperature Reading
64-
DallasTemperature::Request DallasTemperature::requestTemperatures() {
65-
Request req = {true, millis()};
66-
oneWire->reset();
67-
oneWire->skip();
68-
oneWire->write(0x44, parasitePowerMode); // Start temperature conversion
69-
delay(750); // Wait for conversion
70-
return req;
71-
}
72-
73-
float DallasTemperature::getTempC(const DeviceAddress& address, uint8_t retryCount) const {
74-
ScratchPad scratchPad;
75-
if (!isConnected(address, scratchPad)) {
76-
return -127.0f; // Disconnected
77-
}
78-
return rawToCelsius(calculateTemperature(address, scratchPad));
79-
}
80-
81-
float DallasTemperature::getTempF(const DeviceAddress& address, uint8_t retryCount) const {
82-
return toFahrenheit(getTempC(address, retryCount));
83-
}
84-
85-
// Utility Methods
86-
float DallasTemperature::toFahrenheit(float celsius) {
87-
return (celsius * 1.8f) + 32.0f;
88-
}
89-
90-
float DallasTemperature::toCelsius(float fahrenheit) {
91-
return (fahrenheit - 32.0f) * 0.555555556f;
92-
}
93-
94-
float DallasTemperature::rawToCelsius(int32_t raw) {
95-
return raw * 0.0078125f;
96-
}
97-
98-
float DallasTemperature::rawToFahrenheit(int32_t raw) {
99-
return toFahrenheit(rawToCelsius(raw));
100-
}
101-
102-
// Internal Methods
103-
bool DallasTemperature::readScratchPad(const DeviceAddress& address, ScratchPad& scratchPad) const {
104-
oneWire->reset();
105-
oneWire->select(address.data());
106-
oneWire->write(0xBE); // Read Scratchpad
107-
for (auto& byte : scratchPad) {
108-
byte = oneWire->read();
109-
}
110-
return true;
111-
}
112-
113-
bool DallasTemperature::readPowerSupply(const DeviceAddress& address) const {
114-
oneWire->reset();
115-
oneWire->select(address.data());
116-
oneWire->write(0xB4); // Read Power Supply
117-
return oneWire->read_bit();
118-
}
119-
120-
void DallasTemperature::activateExternalPullup() const {
121-
if (pullupPin) {
122-
digitalWrite(pullupPin, LOW);
123-
}
124-
}
125-
126-
void DallasTemperature::deactivateExternalPullup() const {
127-
if (pullupPin) {
128-
digitalWrite(pullupPin, HIGH);
129-
}
130-
}
11+
namespace Dallas {
13112

132-
int32_t DallasTemperature::calculateTemperature(const DeviceAddress& address, const ScratchPad& scratchPad) const {
133-
int32_t rawTemp = ((static_cast<int16_t>(scratchPad[1]) << 8) | scratchPad[0]);
134-
return rawTemp;
135-
}
13+
class DallasTemperature {
14+
public:
15+
static constexpr const char* LIB_VERSION = "4.0.0";
16+
17+
using DeviceAddress = uint8_t[8];
18+
using ScratchPad = uint8_t[9];
19+
20+
struct Request {
21+
bool result;
22+
unsigned long timestamp;
23+
operator bool() const { return result; }
24+
};
25+
26+
// Constructors
27+
DallasTemperature();
28+
explicit DallasTemperature(OneWire* oneWire);
29+
DallasTemperature(OneWire* oneWire, uint8_t pullupPin);
30+
31+
// Configuration
32+
void begin();
33+
void setOneWire(OneWire* oneWire);
34+
void setPullupPin(uint8_t pullupPin);
35+
36+
// Device Management
37+
uint8_t getDeviceCount() const;
38+
uint8_t getDS18Count() const;
39+
bool isConnected(const DeviceAddress& address) const;
40+
bool isConnected(const DeviceAddress& address, ScratchPad& scratchPad) const;
41+
42+
// Temperature Reading
43+
Request requestTemperatures();
44+
Request requestTemperaturesByAddress(const DeviceAddress& address);
45+
Request requestTemperaturesByIndex(uint8_t index);
46+
float getTempC(const DeviceAddress& address, uint8_t retryCount = 0) const;
47+
float getTempF(const DeviceAddress& address, uint8_t retryCount = 0) const;
48+
49+
// Utility Methods
50+
static float toFahrenheit(float celsius);
51+
static float toCelsius(float fahrenheit);
52+
static float rawToCelsius(int32_t raw);
53+
static float rawToFahrenheit(int32_t raw);
54+
55+
private:
56+
bool parasitePowerMode = false;
57+
uint8_t bitResolution = 9;
58+
OneWire* oneWire = nullptr;
59+
uint8_t pullupPin = 0;
60+
61+
bool readScratchPad(const DeviceAddress& address, ScratchPad& scratchPad) const;
62+
bool readPowerSupply(const DeviceAddress& address) const;
63+
void activateExternalPullup() const;
64+
void deactivateExternalPullup() const;
65+
66+
int32_t calculateTemperature(const DeviceAddress& address, const ScratchPad& scratchPad) const;
67+
};
13668

13769
} // namespace Dallas

0 commit comments

Comments
 (0)