Hello,
I am facing an issue, and I'm not sure where the problem lies. The complete code I am using, along with the Proteus diagrams, is attached below.
`#include <OneWire.h>
#include <DallasTemperature.h>
#include <NonBlockingDallas.h>
#include <LiquidCrystal.h>
//================= Config ====================
#define ONE_WIRE_BUS A2 // DS18B20 pin now A2
#define TIME_INTERVAL 1500 // Temperature polling interval (ms)
// LCD: RS=0, E=3, D4-D7 = 4, 5, 6, 7
LiquidCrystal lcd(0, 3, 4, 5, 6, 7);
//=============================================
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature dallasTemp(&oneWire);
NonBlockingDallas temperatureSensors(&dallasTemp);
//=============================================
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp Monitor");
// Init sensor
temperatureSensors.begin(NonBlockingDallas::resolution_12, TIME_INTERVAL);
// Register callbacks
temperatureSensors.onIntervalElapsed(handleIntervalElapsed);
temperatureSensors.onTemperatureChange(handleTemperatureChange);
temperatureSensors.onDeviceDisconnected(handleDeviceDisconnected);
// First request
temperatureSensors.requestTemperature();
}
void loop() {
temperatureSensors.update();
}
//=============================================
// Every reading (even if temp didn’t change)
void handleIntervalElapsed(int deviceIndex, int32_t temperatureRAW)
{
float tempC = temperatureSensors.rawToCelsius(temperatureRAW);
float tempF = temperatureSensors.rawToFahrenheit(temperatureRAW);
// Serial Output
Serial.print(F("[Interval] deviceIndex="));
Serial.print(deviceIndex);
Serial.print(F(" | RAW="));
Serial.print(temperatureRAW);
Serial.print(F(" | "));
Serial.print(tempC);
Serial.print(F("°C | "));
Serial.print(tempF);
Serial.println(F("°F"));
// LCD Output
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.print(tempC, 1);
lcd.print((char)223); // Degree symbol
lcd.print("C "); // clear tail
}
//=============================================
// Only when temp actually changes
void handleTemperatureChange(int deviceIndex, int32_t temperatureRAW)
{
float tempC = temperatureSensors.rawToCelsius(temperatureRAW);
float tempF = temperatureSensors.rawToFahrenheit(temperatureRAW);
Serial.print(F("[Change] deviceIndex="));
Serial.print(deviceIndex);
Serial.print(F(" | RAW="));
Serial.print(temperatureRAW);
Serial.print(F(" | "));
Serial.print(tempC);
Serial.print(F("°C | "));
Serial.print(tempF);
Serial.println(F("°F"));
lcd.clear();
lcd.setCursor(1, 1);
lcd.print("T:");
lcd.print(tempC, 1);
lcd.print((char)223); // Degree symbol
lcd.print("C "); // clear tail
}
//=============================================
// When sensor disconnects
void handleDeviceDisconnected(int deviceIndex)
{
Serial.print(F("[DISCONNECTED] Sensor "));
Serial.print(deviceIndex);
Serial.println(F(" disconnected."));
lcd.setCursor(0, 1);
lcd.print("Sensor Lost ");
}
`

Hello,
I am facing an issue, and I'm not sure where the problem lies. The complete code I am using, along with the Proteus diagrams, is attached below.
`#include <OneWire.h>
#include <DallasTemperature.h>
#include <NonBlockingDallas.h>
#include <LiquidCrystal.h>
//================= Config ====================
#define ONE_WIRE_BUS A2 // DS18B20 pin now A2
#define TIME_INTERVAL 1500 // Temperature polling interval (ms)
// LCD: RS=0, E=3, D4-D7 = 4, 5, 6, 7
LiquidCrystal lcd(0, 3, 4, 5, 6, 7);
//=============================================
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature dallasTemp(&oneWire);
NonBlockingDallas temperatureSensors(&dallasTemp);
//=============================================
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp Monitor");
// Init sensor
temperatureSensors.begin(NonBlockingDallas::resolution_12, TIME_INTERVAL);
// Register callbacks
temperatureSensors.onIntervalElapsed(handleIntervalElapsed);
temperatureSensors.onTemperatureChange(handleTemperatureChange);
temperatureSensors.onDeviceDisconnected(handleDeviceDisconnected);
// First request
temperatureSensors.requestTemperature();
}
void loop() {
temperatureSensors.update();
}
//=============================================
// Every reading (even if temp didn’t change)
void handleIntervalElapsed(int deviceIndex, int32_t temperatureRAW)
{
float tempC = temperatureSensors.rawToCelsius(temperatureRAW);
float tempF = temperatureSensors.rawToFahrenheit(temperatureRAW);
// Serial Output
Serial.print(F("[Interval] deviceIndex="));
Serial.print(deviceIndex);
Serial.print(F(" | RAW="));
Serial.print(temperatureRAW);
Serial.print(F(" | "));
Serial.print(tempC);
Serial.print(F("°C | "));
Serial.print(tempF);
Serial.println(F("°F"));
// LCD Output
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.print(tempC, 1);
lcd.print((char)223); // Degree symbol
lcd.print("C "); // clear tail
}
//=============================================
// Only when temp actually changes
void handleTemperatureChange(int deviceIndex, int32_t temperatureRAW)
{
float tempC = temperatureSensors.rawToCelsius(temperatureRAW);
float tempF = temperatureSensors.rawToFahrenheit(temperatureRAW);
Serial.print(F("[Change] deviceIndex="));
Serial.print(deviceIndex);
Serial.print(F(" | RAW="));
Serial.print(temperatureRAW);
Serial.print(F(" | "));
Serial.print(tempC);
Serial.print(F("°C | "));
Serial.print(tempF);
Serial.println(F("°F"));
lcd.clear();
lcd.setCursor(1, 1);
lcd.print("T:");
lcd.print(tempC, 1);
lcd.print((char)223); // Degree symbol
lcd.print("C "); // clear tail
}
//=============================================
// When sensor disconnects
void handleDeviceDisconnected(int deviceIndex)
{
Serial.print(F("[DISCONNECTED] Sensor "));
Serial.print(deviceIndex);
Serial.println(F(" disconnected."));
lcd.setCursor(0, 1);

lcd.print("Sensor Lost ");
}
`