mirror of
https://github.com/esphome/esphome.git
synced 2026-05-27 20:05:31 +08:00
[gpio][dallas_temp] Fix one_wire read64() and DS18S20 division by zero (#14866)
This commit is contained in:
@@ -136,6 +136,9 @@ bool DallasTemperatureSensor::check_scratch_pad_() {
|
|||||||
float DallasTemperatureSensor::get_temp_c_() {
|
float DallasTemperatureSensor::get_temp_c_() {
|
||||||
int16_t temp = (this->scratch_pad_[1] << 8) | this->scratch_pad_[0];
|
int16_t temp = (this->scratch_pad_[1] << 8) | this->scratch_pad_[0];
|
||||||
if ((this->address_ & 0xff) == DALLAS_MODEL_DS18S20) {
|
if ((this->address_ & 0xff) == DALLAS_MODEL_DS18S20) {
|
||||||
|
if (this->scratch_pad_[7] == 0) {
|
||||||
|
return NAN;
|
||||||
|
}
|
||||||
return (temp >> 1) + (this->scratch_pad_[7] - this->scratch_pad_[6]) / float(this->scratch_pad_[7]) - 0.25;
|
return (temp >> 1) + (this->scratch_pad_[7] - this->scratch_pad_[6]) / float(this->scratch_pad_[7]) - 0.25;
|
||||||
}
|
}
|
||||||
switch (this->resolution_) {
|
switch (this->resolution_) {
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ uint8_t IRAM_ATTR GPIOOneWireBus::read8() {
|
|||||||
uint64_t IRAM_ATTR GPIOOneWireBus::read64() {
|
uint64_t IRAM_ATTR GPIOOneWireBus::read64() {
|
||||||
InterruptLock lock;
|
InterruptLock lock;
|
||||||
uint64_t ret = 0;
|
uint64_t ret = 0;
|
||||||
for (uint8_t i = 0; i < 8; i++) {
|
for (uint8_t i = 0; i < 64; i++) {
|
||||||
ret |= (uint64_t(this->read_bit_()) << i);
|
ret |= (uint64_t(this->read_bit_()) << i);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
Reference in New Issue
Block a user