#include <OneWire.h> // in Farenheit
#define DS18B20_PIN 2
OneWire oneWire(DS18B20_PIN);
void printAddress(uint8_t deviceAddress[8]) {
for (uint8_t i = 0; i < 8; i++) {
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX);
Serial.print(" ");
}
}
float getTemperature() {
byte data[9];
byte addr[8];
oneWire.reset_search();
if (!oneWire.search(addr)) {
Serial.println("No more addresses.");
oneWire.reset_search();
delay(1000);
return -127.0; // Return an error value
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println(" CRC is not valid!");
return -127.0; // Return an error value
}
oneWire.reset();
oneWire.select(addr);
oneWire.write(0x44, 1); // start conversion, with parasite power on at the end
delay(750); // Wait for the conversion to complete (adjust as needed)
oneWire.reset();
oneWire.select(addr);
oneWire.write(0xBE); // Read Scratchpad
for (byte i = 0; i < 9; i++) {
data[i] = oneWire.read();
}
int16_t temperatureInt = (data[1] << 8) | data[0];
float temperatureCelsius = temperatureInt / 16.0;
// Convert Celsius to Fahrenheit
float temperatureFahrenheit = (temperatureCelsius * 9.0 / 5.0) + 32.0;
return temperatureFahrenheit;
}
void setup() {
Serial.begin(9600);
}
void loop() {
float temperature = getTemperature();
if (temperature != -127.0) {
Serial.print("Temperature: ");
Serial.print(temperature, 2);
Serial.println(" °F");
}
delay(5000); // wait 5 seconds for the next measurement
}