Using DST RTC by Andy Doro

Thank you for all the suggestions. I found that there were some typos which have been corrected.
This is the current version of the sketch.

// Author : John Marchant G0RJM
// Created : 25/01/2024
// Description : A project to display the current date, time and temperature on the 20x4 LCD screen
// and create a thermostatic heating control of three zones to include frost protection.
// This has been based on the RTClib ds3231 example along with many parts borrowed
// from several other files/sketches and in collaboration with several authors from the
// Arduino Forum in particular blh64, StefanL38 and UKHeliBob.

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include "RTClib.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#include "DST_RTC.h"
#include <EEPROM.h>

#define ONE_WIRE_BUS_1 3
#define ONE_WIRE_BUS_2 4
#define ONE_WIRE_BUS_3 5

OneWire oneWire_range(ONE_WIRE_BUS_1);
OneWire oneWire_club(ONE_WIRE_BUS_2);
OneWire oneWire_airgun(ONE_WIRE_BUS_3);

const byte range_relay = 9;  // Relay outputs
const byte club_relay = 10;
const byte airgun_relay = 11;
const byte boiler_relay = 12;

float range_temperature;
float club_temperature;
float airgun_temperature;

const float temperature_setpoint_range = 22.0;   // C
const float temperature_setpoint_club = 22.0;    // C
const float temperature_setpoint_airgun = 22.0;  // C
const float frost_setpoint = 22.0;               // C
const float deadzone = 1.0;                      // C

const int SCREEN_ON_TIME = 30000;
const int backlight_buttonPin = 8;
int buttonState = 0;
unsigned long currentMillis = 0;
unsigned long previousMillisScreen = 0;
bool screenOn = false;

DallasTemperature sensor_range(&oneWire_range);
DallasTemperature sensor_club(&oneWire_club);
DallasTemperature sensor_airgun(&oneWire_airgun);

enum { SUNDAY,
       MONDAY,
       TUESDAY,
       WEDNESDAY,
       THURSDAY,
       FRIDAY,
       SATURDAY };

const int On_Normal = 16 * 60UL + 00;   // 16:00
const int Off_Normal = 21 * 60UL + 30;  // 21:30
const int On_Sunday = 12 * 60UL + 00;   // 12:00 for Sundays
const int Off_Sunday = 17 * 60UL + 30;  // 17:30 for Sundays

#if defined(ARDUINO_SAMD_ZERO) && defined(SERIAL_PORT_USBVIRTUAL)
// Required for Serial on Zero based boards
#define Serial SERIAL_PORT_USBVIRTUAL
#endif

LiquidCrystal_I2C lcd(0X27, 20, 4);
RTC_DS3231 rtc;   // clock object
DST_RTC dst_rtc;  // DST object

// Define US or EU rules for DST comment out as required. More countries could be added with different rules in DST_RTC.cpp
// const char rulesDST[] = "US"; // US DST rules
const char rulesDST[] = "EU";  // EU DST rules

char daysOfTheWeek[7][4] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
byte char_temp[8] = { B00100, B01010, B01010, B01110, B01110, B11111, B11111, B01110 };  // for thermometer icon

void setup() {

  pinMode(range_relay, OUTPUT);
  pinMode(club_relay, OUTPUT);
  pinMode(airgun_relay, OUTPUT);
  pinMode(boiler_relay, OUTPUT);
  pinMode(backlight_buttonPin, INPUT);

  rtc.begin();
  lcd.init();
  lcd.backlight();
  lcd.createChar(0, char_temp);
  lcd.setCursor(4, 0);
  lcd.print("Take it easy!");
  lcd.setCursor(4, 1);
  lcd.print("Working on it");
  lcd.setCursor(2, 2);
  lcd.print("G0RJM Three Zone");
  lcd.setCursor(1, 3);
  lcd.print("Temperature Control");
  delay(1000);
  lcd.clear();
  if (rtc.lostPower()) {
    // When the time needs to be set up on a new device, or after a power loss, uncomment the
    // following line. This sets the RTC to the date & time this sketch was compiled
    // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
  /*
    This line sets the RTC with an explicit date & time (standard time - not DST), for example to set
    March 28, 2020 at 23:58:5 you would call:
    // rtc.adjust(DateTime(2020, 3, 28, 23, 58, 5));
    If used load the sketch a second time with this line commented out or the RTC will reset to
    this time on power up or reset.
  */

  Serial.begin(115200);
  Serial.println("G0RJM Three zone Temperature Control");

  Wire.begin();

  sensor_range.begin();
  sensor_club.begin();
  sensor_airgun.begin();

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(__DATE__, __TIME__));
    // DST? If we're in it, let's subtract an hour from the RTC time to keep our DST calculation correct. This gives us
    // Standard Time which our DST check will add an hour back to if we're in DST.
    DateTime standardTime = rtc.now();
    if (dst_rtc.checkDST(standardTime) == true) {  // check whether we're in DST right now. If we are, subtract an hour.
      standardTime = standardTime.unixtime() - 3600;
    }
    rtc.adjust(standardTime);
  }
}

//--------------------------Timeswitch Control---------------------------//
void loop() {

  DateTime now = rtc.now();
  int currentTime = now.hour() * 60UL + now.minute();

  bool isHeatOn;  // true = heating time

  //------------------------Daylight Saving Setting=---------------------//
  {
    DateTime standardTime = rtc.now();

    Serial.println("Standard Time");
    printTheTime(standardTime);

    DateTime theTime = dst_rtc.calculateTime(standardTime);  // takes into account DST

    Serial.println("time adjusted for Daylight Saving Time");
    printTheTime(theTime);

    delay(1000);  // 1 second
  }




  //----------------------Timed heating setting-------------------------//
  if (now.dayOfTheWeek() != SUNDAY) {
    // Monday to saturday so use normal times
    if (currentTime < On_Normal || currentTime > Off_Normal) {
      // outside normal heating time
      isHeatOn = false;
    } else {
      // within normal heating time
      isHeatOn = true;
    }
  } else {
    // Sunday times
    if (currentTime < On_Sunday || currentTime > Off_Sunday) {
      // outside normal heating time
      isHeatOn = false;
    } else {
      // within normal heating time
      isHeatOn = true;
    }
  }

  if (isHeatOn) {
    Serial.println("Normal Heating ");
    NormalTemperature();
  } else {
    Serial.println("Frost Prevention  ");
    FrostPrevention();
  }

  // ------------------------Backlight display----------------------------//

  buttonState = digitalRead(backlight_buttonPin);

  if (buttonState == HIGH) {
    previousMillisScreen = millis();
    lcd.backlight();
    screenOn = true;
  }
  // if time passed above SCREEN_ON_TIME after we turned it on
  if ((buttonState == LOW) && (millis() - previousMillisScreen >= SCREEN_ON_TIME)) {
    lcd.noBacklight();
    screenOn = false;
    Serial.println("Backlight OFF");
  }

  if ((screenOn) && (millis() - previousMillisScreen >= SCREEN_ON_TIME)) {
    lcd.noBacklight();
    screenOn = false;
    Serial.println("Backlight OFF");
  }

  //--------------------------Date display------------------------------//
  lcd.setCursor(0, 0);
  lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
  lcd.setCursor(3, 0);
  lcd.print(":");
  lcd.setCursor(4, 0);
  if (now.day() < 10) lcd.print('0');
  lcd.print(now.day(), DEC);
  lcd.print(':');
  if (now.month() < 10) lcd.print('0');
  lcd.print(now.month(), DEC);
  lcd.print(':');
  lcd.print(now.year(), DEC);

  //-------------------------Time display-------------------------------//
  lcd.setCursor(15, 0);
  if (now.hour() < 10) lcd.print('0');
  lcd.print(now.hour(), DEC);
  lcd.print(':');
  if (now.minute() < 10) lcd.print('0');
  lcd.print(now.minute(), DEC);

  //-----------------------Temperature display - -----------------------//
  lcd.setCursor(0, 1);  // Range
  lcd.print("Range: ");
  lcd.print(sensor_range.getTempCByIndex(0));

  lcd.setCursor(12, 1);
  lcd.write((char)223);
  lcd.print('C');

  lcd.setCursor(0, 2);  // Clubroom
  lcd.print("Club:  ");
  lcd.print(sensor_club.getTempCByIndex(0));

  lcd.setCursor(12, 2);
  lcd.write((char)223);
  lcd.print('C');

  lcd.setCursor(0, 3);  // Airgun Range
  lcd.print("Airgun:");
  lcd.print(sensor_airgun.getTempCByIndex(0));

  lcd.setCursor(12, 3);
  lcd.write((char)223);
  lcd.print('C');

  //---------------------------Serial print-----------------------------//
  Serial.print(now.day(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print("Requesting temperatures...");
  sensor_range.requestTemperatures();
  sensor_club.requestTemperatures();
  sensor_airgun.requestTemperatures();
  Serial.println(" done");
  Serial.print("Range: ");
  Serial.println(sensor_range.getTempCByIndex(0));
  Serial.print("Club: ");
  Serial.println(sensor_club.getTempCByIndex(0));
  Serial.print("Airgun: ");
  Serial.println(sensor_airgun.getTempCByIndex(0));

  delay(1000);
}
//------------------------Daylight saving control-----------------------//
// print time to serial
void printTheTime(DateTime theTimeP) {

  Serial.print(theTimeP.year(), DEC);
  Serial.print('/');
  Serial.print(theTimeP.month(), DEC);
  Serial.print('/');
  Serial.print(theTimeP.day(), DEC);
  Serial.print(' ');
  Serial.print(theTimeP.hour(), DEC);
  Serial.print(':');
  Serial.print(theTimeP.minute(), DEC);
  Serial.print(':');
  Serial.print(theTimeP.second(), DEC);
  Serial.println();
}

And this is the error message.


FQBN: arduino:avr:uno
Using board 'uno' from platform in folder: C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6
Using core 'arduino' from platform in folder: C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6

Detecting libraries used...
C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard C:\Users\johnm\AppData\Local\Temp\arduino\sketches\96DFED36EB631C459DC15A354B23E126\sketch\Three_zone_heating_controller_V1.2.7.ino.cpp -o nul
Alternatives for LiquidCrystal_I2C.h: [LiquidCrystal I2C@1.1.2]
ResolveLibrary(LiquidCrystal_I2C.h)
  -> candidates: [LiquidCrystal I2C@1.1.2]
C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard -Ic:\Users\johnm\Documents\Arduino\libraries\LiquidCrystal_I2C C:\Users\johnm\AppData\Local\Temp\arduino\sketches\96DFED36EB631C459DC15A354B23E126\sketch\Three_zone_heating_controller_V1.2.7.ino.cpp -o nul
Alternatives for Wire.h: [Wire@1.0]
ResolveLibrary(Wire.h)
  -> candidates: [Wire@1.0]
C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard -Ic:\Users\johnm\Documents\Arduino\libraries\LiquidCrystal_I2C -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire\src C:\Users\johnm\AppData\Local\Temp\arduino\sketches\96DFED36EB631C459DC15A354B23E126\sketch\Three_zone_heating_controller_V1.2.7.ino.cpp -o nul
Alternatives for RTClib.h: [RTClib@2.1.3]
ResolveLibrary(RTClib.h)
  -> candidates: [RTClib@2.1.3]
C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard -Ic:\Users\johnm\Documents\Arduino\libraries\LiquidCrystal_I2C -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire\src -Ic:\Users\johnm\Documents\Arduino\libraries\RTClib\src C:\Users\johnm\AppData\Local\Temp\arduino\sketches\96DFED36EB631C459DC15A354B23E126\sketch\Three_zone_heating_controller_V1.2.7.ino.cpp -o nul
Alternatives for Adafruit_I2CDevice.h: [Adafruit BusIO@1.15.0]
ResolveLibrary(Adafruit_I2CDevice.h)
  -> candidates: [Adafruit BusIO@1.15.0]
C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard -Ic:\Users\johnm\Documents\Arduino\libraries\LiquidCrystal_I2C -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire\src -Ic:\Users\johnm\Documents\Arduino\libraries\RTClib\src -Ic:\Users\johnm\Documents\Arduino\libraries\Adafruit_BusIO C:\Users\johnm\AppData\Local\Temp\arduino\sketches\96DFED36EB631C459DC15A354B23E126\sketch\Three_zone_heating_controller_V1.2.7.ino.cpp -o nul
Alternatives for OneWire.h: [OneWire@2.3.7]
ResolveLibrary(OneWire.h)
  -> candidates: [OneWire@2.3.7]
C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard -Ic:\Users\johnm\Documents\Arduino\libraries\LiquidCrystal_I2C -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire\src -Ic:\Users\johnm\Documents\Arduino\libraries\RTClib\src -Ic:\Users\johnm\Documents\Arduino\libraries\Adafruit_BusIO -Ic:\Users\johnm\Documents\Arduino\libraries\OneWire C:\Users\johnm\AppData\Local\Temp\arduino\sketches\96DFED36EB631C459DC15A354B23E126\sketch\Three_zone_heating_controller_V1.2.7.ino.cpp -o nul
Alternatives for DallasTemperature.h: [MAX31850 DallasTemp@1.1.6 DallasTemperature@3.9.0]
ResolveLibrary(DallasTemperature.h)
  -> candidates: [MAX31850 DallasTemp@1.1.6 DallasTemperature@3.9.0]
C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard -Ic:\Users\johnm\Documents\Arduino\libraries\LiquidCrystal_I2C -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire\src -Ic:\Users\johnm\Documents\Arduino\libraries\RTClib\src -Ic:\Users\johnm\Documents\Arduino\libraries\Adafruit_BusIO -Ic:\Users\johnm\Documents\Arduino\libraries\OneWire -Ic:\Users\johnm\Documents\Arduino\libraries\DallasTemperature C:\Users\johnm\AppData\Local\Temp\arduino\sketches\96DFED36EB631C459DC15A354B23E126\sketch\Three_zone_heating_controller_V1.2.7.ino.cpp -o nul
Alternatives for DST_RTC.h: [DST RTC@1.1.1]
ResolveLibrary(DST_RTC.h)
  -> candidates: [DST RTC@1.1.1]
C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard -Ic:\Users\johnm\Documents\Arduino\libraries\LiquidCrystal_I2C -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire\src -Ic:\Users\johnm\Documents\Arduino\libraries\RTClib\src -Ic:\Users\johnm\Documents\Arduino\libraries\Adafruit_BusIO -Ic:\Users\johnm\Documents\Arduino\libraries\OneWire -Ic:\Users\johnm\Documents\Arduino\libraries\DallasTemperature -Ic:\Users\johnm\Documents\Arduino\libraries\DST_RTC C:\Users\johnm\AppData\Local\Temp\arduino\sketches\96DFED36EB631C459DC15A354B23E126\sketch\Three_zone_heating_controller_V1.2.7.ino.cpp -o nul
Alternatives for EEPROM.h: [EEPROM@2.0]
ResolveLibrary(EEPROM.h)
  -> candidates: [EEPROM@2.0]
C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard -Ic:\Users\johnm\Documents\Arduino\libraries\LiquidCrystal_I2C -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire\src -Ic:\Users\johnm\Documents\Arduino\libraries\RTClib\src -Ic:\Users\johnm\Documents\Arduino\libraries\Adafruit_BusIO -Ic:\Users\johnm\Documents\Arduino\libraries\OneWire -Ic:\Users\johnm\Documents\Arduino\libraries\DallasTemperature -Ic:\Users\johnm\Documents\Arduino\libraries\DST_RTC -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\EEPROM\src C:\Users\johnm\AppData\Local\Temp\arduino\sketches\96DFED36EB631C459DC15A354B23E126\sketch\Three_zone_heating_controller_V1.2.7.ino.cpp -o nul
Using cached library dependencies for file: c:\Users\johnm\Documents\Arduino\libraries\LiquidCrystal_I2C\LiquidCrystal_I2C.cpp
Using cached library dependencies for file: C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire\src\Wire.cpp
Using cached library dependencies for file: C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire\src\utility\twi.c
Using cached library dependencies for file: c:\Users\johnm\Documents\Arduino\libraries\RTClib\src\RTC_DS1307.cpp
Using cached library dependencies for file: c:\Users\johnm\Documents\Arduino\libraries\RTClib\src\RTC_DS3231.cpp
Using cached library dependencies for file: c:\Users\johnm\Documents\Arduino\libraries\RTClib\src\RTC_Micros.cpp
Using cached library dependencies for file: c:\Users\johnm\Documents\Arduino\libraries\RTClib\src\RTC_Millis.cpp
Using cached library dependencies for file: c:\Users\johnm\Documents\Arduino\libraries\RTClib\src\RTC_PCF8523.cpp
Using cached library dependencies for file: c:\Users\johnm\Documents\Arduino\libraries\RTClib\src\RTC_PCF8563.cpp
Using cached library dependencies for file: c:\Users\johnm\Documents\Arduino\libraries\RTClib\src\RTClib.cpp
Using cached library dependencies for file: c:\Users\johnm\Documents\Arduino\libraries\Adafruit_BusIO\Adafruit_BusIO_Register.cpp
Alternatives for SPI.h: [SPI@1.0]
ResolveLibrary(SPI.h)
  -> candidates: [SPI@1.0]
Using cached library dependencies for file: c:\Users\johnm\Documents\Arduino\libraries\Adafruit_BusIO\Adafruit_I2CDevice.cpp
Using cached library dependencies for file: c:\Users\johnm\Documents\Arduino\libraries\Adafruit_BusIO\Adafruit_SPIDevice.cpp
Using cached library dependencies for file: c:\Users\johnm\Documents\Arduino\libraries\OneWire\OneWire.cpp
Using cached library dependencies for file: c:\Users\johnm\Documents\Arduino\libraries\DallasTemperature\DallasTemperature.cpp
C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard -Ic:\Users\johnm\Documents\Arduino\libraries\LiquidCrystal_I2C -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire\src -Ic:\Users\johnm\Documents\Arduino\libraries\RTClib\src -Ic:\Users\johnm\Documents\Arduino\libraries\Adafruit_BusIO -Ic:\Users\johnm\Documents\Arduino\libraries\OneWire -Ic:\Users\johnm\Documents\Arduino\libraries\DallasTemperature -Ic:\Users\johnm\Documents\Arduino\libraries\DST_RTC -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\EEPROM\src -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\SPI\src c:\Users\johnm\Documents\Arduino\libraries\DST_RTC\DST_RTC.cpp -o nul
Using cached library dependencies for file: C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\SPI\src\SPI.cpp
Generating function prototypes...
C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard -Ic:\Users\johnm\Documents\Arduino\libraries\LiquidCrystal_I2C -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire\src -Ic:\Users\johnm\Documents\Arduino\libraries\RTClib\src -Ic:\Users\johnm\Documents\Arduino\libraries\Adafruit_BusIO -Ic:\Users\johnm\Documents\Arduino\libraries\OneWire -Ic:\Users\johnm\Documents\Arduino\libraries\DallasTemperature -Ic:\Users\johnm\Documents\Arduino\libraries\DST_RTC -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\EEPROM\src -IC:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\SPI\src C:\Users\johnm\AppData\Local\Temp\arduino\sketches\96DFED36EB631C459DC15A354B23E126\sketch\Three_zone_heating_controller_V1.2.7.ino.cpp -o C:\Users\johnm\AppData\Local\Temp\20344875\sketch_merged.cpp
C:\Users\johnm\AppData\Local\Arduino15\packages\builtin\tools\ctags\5.8-arduino11/ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives C:\Users\johnm\AppData\Local\Temp\20344875\sketch_merged.cpp
Compiling sketch...
"C:\\Users\\johnm\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Users\\johnm\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\johnm\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\standard" "-Ic:\\Users\\johnm\\Documents\\Arduino\\libraries\\LiquidCrystal_I2C" "-IC:\\Users\\johnm\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\Wire\\src" "-Ic:\\Users\\johnm\\Documents\\Arduino\\libraries\\RTClib\\src" "-Ic:\\Users\\johnm\\Documents\\Arduino\\libraries\\Adafruit_BusIO" "-Ic:\\Users\\johnm\\Documents\\Arduino\\libraries\\OneWire" "-Ic:\\Users\\johnm\\Documents\\Arduino\\libraries\\DallasTemperature" "-Ic:\\Users\\johnm\\Documents\\Arduino\\libraries\\DST_RTC" "-IC:\\Users\\johnm\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\EEPROM\\src" "-IC:\\Users\\johnm\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\SPI\\src" "C:\\Users\\johnm\\AppData\\Local\\Temp\\arduino\\sketches\\96DFED36EB631C459DC15A354B23E126\\sketch\\Three_zone_heating_controller_V1.2.7.ino.cpp" -o "C:\\Users\\johnm\\AppData\\Local\\Temp\\arduino\\sketches\\96DFED36EB631C459DC15A354B23E126\\sketch\\Three_zone_heating_controller_V1.2.7.ino.cpp.o"
C:\Users\johnm\Documents\Arduino\Three_zone_heating_controller_V1.2.7\Three_zone_heating_controller_V1.2.7.ino: In function 'void setup()':
C:\Users\johnm\Documents\Arduino\Three_zone_heating_controller_V1.2.7\Three_zone_heating_controller_V1.2.7.ino:124:13: error: 'class RTC_DS3231' has no member named 'isrunning'
   if (! rtc.isrunning()) {
             ^~~~~~~~~
Multiple libraries were found for "DallasTemperature.h"
  Used: C:\Users\johnm\Documents\Arduino\libraries\DallasTemperature
  Not used: C:\Users\johnm\Documents\Arduino\libraries\MAX31850_DallasTemp
Using library LiquidCrystal I2C at version 1.1.2 in folder: C:\Users\johnm\Documents\Arduino\libraries\LiquidCrystal_I2C 
Using library Wire at version 1.0 in folder: C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire 
Using library RTClib at version 2.1.3 in folder: C:\Users\johnm\Documents\Arduino\libraries\RTClib 
Using library Adafruit BusIO at version 1.15.0 in folder: C:\Users\johnm\Documents\Arduino\libraries\Adafruit_BusIO 
Using library OneWire at version 2.3.7 in folder: C:\Users\johnm\Documents\Arduino\libraries\OneWire 
Using library DallasTemperature at version 3.9.0 in folder: C:\Users\johnm\Documents\Arduino\libraries\DallasTemperature 
Using library DST RTC at version 1.1.1 in folder: C:\Users\johnm\Documents\Arduino\libraries\DST_RTC 
Using library EEPROM at version 2.0 in folder: C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\EEPROM 
Using library SPI at version 1.0 in folder: C:\Users\johnm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\SPI 
exit status 1

Compilation error: 'class RTC_DS3231' has no member named 'isrunning'

I have checked the Andy Doro example which compiles with no problem. I have to presume that there must be a conflict with others parts of my sketch. Your guidance would be most appreciated.