function not declared in this scope

Hi all,

First of all, please note that I am a total newbie to Arduino and don't know much about C++ programming.

I recently wanted to hook up a DS1302 RTC to my Arduino, using the DS1302RTC library provided on Arduino playground (Arduino Playground - DS1302RTC).

I then wanted to test the code below, which is also provided on Arduino playground. Unfortunately, I got the error message "function setSyncProvider not declared in this scope". Please note that I have used the serial monitor instead of an LCD to visualize the output of the program and I have adjusted the code accordingly (i.e. commented redundant code relating to lcd out and replaced lcd.begin with Serial.begin etc.).

Any suggestion what is wrong with the code?

I would be grateful for your help!

// Timur Maksiomv 2014
//
// A quick demo of how to use DS1302-library to make a quick
// clock using a DS1302 and a 16x2 LCD.
//
// I assume you know how to connect the DS1302 and LCD.
// DS1302: CE pin -> Arduino Digital 27
// I/O pin -> Arduino Digital 29
// SCLK pin -> Arduino Digital 31
// VCC pin -> Arduino Digital 33
// GND pin -> Arduino Digital 35
//
// LCD: DB7 -> Arduino Digital 7
// DB6 -> Arduino Digital 6
// DB5 -> Arduino Digital 5
// DB4 -> Arduino Digital 4
// E -> Arduino Digital 9
// RS -> Arduino Digital 8

#include <LiquidCrystal.h>
#include <DS1302RTC.h>
#include <Time.h>

// Init the DS1302
// Set pins: CE, IO,CLK
DS1302RTC RTC(27, 29, 31);

// Optional connection for RTC module
#define DS1302_GND_PIN 33
#define DS1302_VCC_PIN 35

// Init the LCD
// initialize the library with the numbers of the interface pins
// lcd(RS, E, d4, d5, d6, d7)
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup()
{
// Setup LCD to 16x2 characters
lcd.begin(16, 2);

// Activate RTC module
digitalWrite(DS1302_GND_PIN, LOW);
pinMode(DS1302_GND_PIN, OUTPUT);

digitalWrite(DS1302_VCC_PIN, HIGH);
pinMode(DS1302_VCC_PIN, OUTPUT);

lcd.print("RTC activated");

delay(500);

// Check clock oscillation
lcd.clear();
if (RTC.haltRTC())
lcd.print("Clock stopped!");
else
lcd.print("Clock working.");

// Check write-protection
lcd.setCursor(0,1);
if (RTC.writeEN())
lcd.print("Write allowed.");
else
lcd.print("Write protected.");

delay ( 2000 );

// Setup Time library
lcd.clear();
lcd.print("RTC Sync");
setSyncProvider(RTC.get); // the function to get the time from the RTC
if(timeStatus() == timeSet)
lcd.print(" Ok!");
else
lcd.print(" FAIL!");

delay ( 2000 );

lcd.clear();
}

void loop()
{

// Display time centered on the upper line
lcd.setCursor(3, 0);
print2digits(hour());
lcd.print(" ");
print2digits(minute());
lcd.print(" ");
print2digits(second());

// Display abbreviated Day-of-Week in the lower left corner
lcd.setCursor(0, 1);
lcd.print(dayShortStr(weekday()));

// Display date in the lower right corner
lcd.setCursor(5, 1);
lcd.print(" ");
print2digits(day());
lcd.print("/");
print2digits(month());
lcd.print("/");
lcd.print(year());

// Warning!
if(timeStatus() != timeSet) {
lcd.setCursor(0, 1);
lcd.print(F("RTC ERROR: SYNC!"));
}

delay ( 1000 ); // Wait approx 1 sec
}

void print2digits(int number) {
// Output leading zero
if (number >= 0 && number < 10) {
lcd.write('0');
}
lcd.print(number);
}

Include <TimeLib.h> instead of <Time.h>.

1 Like

Thanks a lot, it works now! :slight_smile:

I see that people posting here in this forum usually put code in separate and scrollable windows. Could you let me know how this is done?

christian_n:
Thanks a lot, it works now! :slight_smile:

I see that people posting here in this forum usually put code in separate and scrollable windows. Could you let me know how this is done?

Start here

Use the </> button at the top of the posting area

Check out this sticky at the top of this forum entitled "Read this before posting a programming question"
https://forum.arduino.cc/index.php?topic=97455.0

Especially point 6

When you post your code put it between

...

tags. You can do that by hitting the </> button above the posting area.

Thank you both for your replies! Much appreciated.