Ligar e desligar rele com RTC em dias alternados e horas usando Arduino uno

Boa noite
preciso de ajuda com
RTC.get(rtc,true);
dá o seguintes erro
botoes_31223.ino: In function 'void loop()':
botoes_31223:235: error: no matching function for call to 'DS1307RTC::get(int [7], int)'
C:\Users\Antonio\Documents\Arduino\libraries\DS1307RTC/DS1307RTC.h:17: note: candidates are: static time_t DS1307RTC::get()

#include <LiquidCrystal.h> //Inclui a biblioteca do LCD
#include <Wire.h>
#include <Time.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <DS1307RTC.h> 

#define ONE_WIRE_BUS 10
#define RELAY13 //pino do rele
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer = { 0x28, 0xDF, 0x63, 0x51, 0x05, 0x00, 0x00, 0xC3 };

// Pinos de comando dos botões do relógio
#define clockSet A0
#define clockUp 9
#define clockDown 8
 
//Estados de Clock
#define stClockRunning 0
#define stSetDay 1
#define stSetMonth 2
#define stSetYear 3
#define stSetHour 4
#define stSetMinute 5
#define stSetSecond 6
int pinorelay13 = 13; 
int stat = stClockRunning;
int rtc[7]; 
int rele = 7;
int led = 13;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //configuração dos pinos do lcd
 
void Print(int number)
{
 lcd.print(number/10);
 lcd.print(number%10);
}
 
// Preenchimento do display LCD
void printTime()
{
 lcd.setCursor(2,1); Print(hour());
 lcd.print(":"); Print(minute());
 lcd.print(":"); Print(second());
 lcd.setCursor(3,0); Print(day());
 lcd.print("/"); Print(month());
 lcd.print("/"); Print(year());
 lcd.setCursor(0,0);
 lcd.noCursor(); // Cursor invisível
 lcd.noBlink(); // Efeito blink desligado
 
 if (stat != stClockRunning)
 lcd.print("*");
 else
 lcd.print(" ");
 simbolorelogio();
 lcd.setCursor(0,1);
 lcd.write(3);
 
 switch(stat)
 {
 case stSetDay:
 lcd.setCursor(1,0);
 lcd.print("d ");
 lcd.setCursor(4,0);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 case stSetMonth:
 lcd.setCursor(1,0);
 lcd.print("m ");
 lcd.setCursor(7,0);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 case stSetYear:
 lcd.setCursor(1,0);
 lcd.print("a ");
 lcd.setCursor(12,0);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 case stSetHour:
 lcd.setCursor(1,0);
 lcd.print("h ");
 lcd.setCursor(3,1);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 case stSetMinute:
 lcd.setCursor(1,0);
 lcd.print("M ");
 lcd.setCursor(6,1);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 case stSetSecond:
 lcd.setCursor(1,0);
 lcd.print("s ");
 lcd.setCursor(9,1);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 }
}
 
// Lê pino usando limiar, como um interruptor, isto é,
// interruptor pressionado primeira vez liga, pela segunda vez desliga
int readPinSwitch(int pin, int threshold)
{
 if (digitalRead(pin))
 {
 unsigned long tt = millis();
 while (digitalRead(pin));
 if ((millis() - tt) > threshold)
 return 1;
 else
 return 0;
 }
 else
 return 0;
}
 
//Lê pino usando limiar
int readPin(int pin, int threshold)
{
 if (digitalRead(pin))
 {
 unsigned long tt = millis();
 while ((digitalRead(pin) && (millis() - tt) <= threshold));
 if (digitalRead(pin))
 return 1;
 else
 return 0;
 }
 else
 return 0;
}
 
// obter novo status, se houver
int getStat()
{
 if (readPinSwitch(clockSet,300))
 if (stat == stSetSecond)
 return stClockRunning;
 else
 return stat+1;
 else
 return stat;
}
 
// definir Arduino e tempo do RTC
void setRTCTime(int hour, int minute, int second, int day, int month, int year)
{
// define tempo do Arduino
 setTime(hour,minute,second,day,month,year);
 time_t t = now();
// define tempo do RTC
 RTC.set(t);
}
 
void simbolorelogio()
{
 byte relogio[8] = {
 B00000,
 B01110,
 B10101,
 B10111,
 B10001,
 B01110,
 B00000,
 B00000};
 lcd.createChar(3, relogio); // Cria o caractere personalizado de um relogio
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
lcd.print("Error");
}


else
{
lcd.setCursor(11,1);  
lcd.print(tempC);
lcd.print("");

}
} 
 
void setup()
{
pinMode(rele, OUTPUT); //define o pino 10 como saída
pinMode(led, OUTPUT); //define o led (pino 13) do arduino como como saída
digitalWrite (rele, LOW); //desliga relé
digitalWrite(led, LOW); //desliga led  
 pinMode(pinorelay13, OUTPUT); //Define o pino como saida
sensors.begin(); 
sensors.setResolution(insideThermometer, 10);
	// Start the I2C interface
	Wire.begin();
       
	// Start the serial interface
	Serial.begin(9600);
lcd.begin(16, 2);     
lcd.clear(); // start with a blank screen



 pinMode(clockUp,INPUT); // configura os pinos dos botões como entrada
 pinMode(clockDown,INPUT);
 pinMode(clockSet,INPUT);
 
 lcd.begin(16, 2); // Seta o display para 16 colunas and 2 linhas
 setSyncProvider(RTC.get); // função para obter o tempo do RTC
 if(timeStatus()!= timeSet) // verifica status do RTC e retorna erro
 {
 lcd.setCursor(0,0);
 lcd.print("Erro do RTC:");
 lcd.setCursor(0,1);
 lcd.print("Ajuste o Relogio");
 delay(3000);
 lcd.clear();
 }
}
 
int oldStat = stat;
unsigned long t=millis();
 
void loop()
{
RTC.get(rtc,true);
/*
Comando utilizado apenas pra ficar enviando via USB a hora atual
para que possam monitorar no "serial monitor" do simulador Arduino
e ver se esta tudo funcionando de acordo
*/
  for(int i=0; i<7; i++)
{
    Serial.print(rtc[i]); // print os vários valores
    Serial.print(" ");
}
// ligar às 22:22:22
if (rtc[2] == 11 && rtc[1] == 50 && rtc[0] == 00) { 
digitalWrite(rele, HIGH);
digitalWrite(led, HIGH);
}
// desligar às 11:11:11
if (rtc[2] == 11 && rtc[1] == 52 && rtc[0] == 00) { 
digitalWrite(rele, LOW);
digitalWrite(led, LOW);
}

Serial.println();

/*
O codigo abaixo significa que, quando o RTC estiver no segundo 22,
ele irá acionar o relé e o led. Para utilizar o minuto como referencia,
alterar rtc[0] para rtc[1], e assim sussecivamente
*/

if (rtc[2] == 11 && rtc[1] == 11 && rtc[0] == 11) { 
digitalWrite(rele, HIGH);
digitalWrite(led, HIGH);
}
delay(1000);
{
  //Aciona o rele
  digitalWrite(pinorelay13, HIGH); 
  delay(50); //Aguarda 2 Horas
  //Desliga o rele
  digitalWrite(pinorelay13, LOW); 
  delay(50); //Aguarda 5 segundos e reinicia o processo
  sensors.requestTemperatures();

printTemperature(insideThermometer);
lcd.setCursor(17,1);
delay(04/33/20); //
  //Desliga o rele

  delay(04/36/20); //Aguarda 5 segundos   
  
 int value = 0;
 printTime(); // rotina que imprime o tempo no lcd
 delay(100);
 stat=getStat();
 if (stat != oldStat)
 {
 t=millis();
 oldStat = stat;
 }
 else
 if ((stat != stClockRunning) && ((millis() - t) > 30000)) //tempo em milisegundos que o ajuste do relógio ficará disponível para ser alterado
 stat=stClockRunning;
 switch(stat)
 {
 case stClockRunning:
 break;
 case stSetDay:
 // inicializa value
 value=day();
 //si botao UP (para cima) for pressionado
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 31)
 value=1;
 setRTCTime(hour(),minute(),second(),value,month(),year());
 printTime();
 }
 //si botao DOWN (para baixo) for pressionado
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 1)
 value=31;
 setRTCTime(hour(),minute(),second(),value,month(),year());
 printTime();
 }
 break;
// ver comentários em stSetDay
 case stSetMonth:
 value=month();
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 12)
 value=1;
 setRTCTime(hour(),minute(),second(),day(),value,year());
 printTime();
 }
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 1)
 value=12;
 setRTCTime(hour(),minute(),second(),day(),value,year());
 printTime();
 }
 break;
 case stSetYear:
 value=year();
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 2050)
 value=2000;
 setRTCTime(hour(),minute(),second(),day(),month(),value);
 printTime();
 }
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 2000)
 value=2050;
 setRTCTime(hour(),minute(),second(),day(),month(),value);
 printTime();
 }
 break;
 case stSetHour:
 value=hour();
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 23)
 value=0;
 setRTCTime(value,minute(),second(),day(),month(),year());
 printTime();
 }
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 1)
 value=24;
 setRTCTime(value,minute(),second(),day(),month(),year());
 printTime();
 }
 break;
 case stSetMinute:
 value=minute();
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 59)
 value=0;
 setRTCTime(hour(),value,second(),day(),month(),year());
 printTime();
 }
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 0)
 value=59;
 setRTCTime(hour(),value,second(),day(),month(),year());
 printTime();
 }
 break;
 case stSetSecond:
 value=minute();
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 59)
 value=0;
 setRTCTime(hour(),minute(),value,day(),month(),year());
 printTime();
 }
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 0)
 value=59;
 setRTCTime(hour(),minute(),value,day(),month(),year());
 printTime();
 }
 }
}
}

O erro esta te a dizer que o objecto RTC que criaste nao conhece o metodo get com os argumentos que passas.O metodo get existe sim mas nao recebe qualquer parametro e tu estas a passar lhe dois RTC.get(rtc,true);
Ora nota como esta definido o metodo:

// PUBLIC FUNCTIONS
time_t DS1307RTC::get()   // Aquire data from buffer and convert to time_t
{
  tmElements_t tm;
  if (read(tm) == false) return 0;
  return(makeTime(tm));
}

Bom dia Hugo
Obrigado pela resposta
e peço desculpa da demora mas só foi possivel agora.
è que sou mesmo (0) nesta materia e quando me falas que o metodo nao recebe qualquer parametro e eu estou a passar 2
RTC.get(rtc,true); nã sei mesmo a que te referes.

O que eu estou a tentar fazer é ligar e desligar os reles para acender e apagar lampadas as horas que eu quizer com o horario da serial e este cádigo foi o que eu encontrei.

{
time_t DS1307RTC::get()   // Aquire data from buffer and convert to time_t

  tmElements_t tm;
  if (read(tm) == false) return 0;
  return(makeTime(tm));

// ligar às 22:22:22
if (rtc[2] == 11 && rtc[1] == 50 && rtc[0] == 00) { 
digitalWrite(rele, HIGH);
digitalWrite(led, HIGH);
}
// desligar às 11:11:11
if (rtc[2] == 11 && rtc[1] == 52 && rtc[0] == 00) { 
digitalWrite(rele, LOW);
digitalWrite(led, LOW);
}

e já fiz varias tentativas mas como sou mesmo leigo na materia está até ao momento Impossivel
Obrigado

@Be_Water: Se é leigo na matéria, de onde apareceu este seu código? Para além disso, é necessário escrever 3 post's diferentes para pedir ajuda?
A minha resposta, num dos outros post's (que não foi publicada, porque entretanto a thread foi bloqueada) foi:
Qual é a biblioteca que está a usar? Se for a mesma que eu tenho, esta linha:

RTC.get(rtc,true);

está errada e tem que ser:

RTC.get();

A minha outra pergunta é como é que apareceram ali os parâmetros rtc,true?

Boa tarde
peço desculpa
e não precisa de se zangar
os 3 post foi porque
o 1º desapareceu e nã o conseguia encontrar como não estou familiarizado com o forum pensei que só aceitassem em inglês
o 2º foi em inglês para ver se tinha resposta
e depois este agora que acabei por encontrar e agradecer
Tanto que sou leigo na materia que estou a tentar ir por partes com outros codigos e este código RTC.get(rtc,true); veio de outra livraria em que estava a trabalhar bem e por isso a minha questão.
Só não erra quem nada Faz e quanto mais se faz mais probabilidades Há de errar.
Mais uma vez peço desculpa
Cumps
Gomes

Vendo os seus posts me ocorre que com o uso da biblioteca TimeAlarm com a função alarmRepeat, haverá uma grande solução para determinar com exatidão o inicio de cada tarefa, lembrando que por default a librarie vem setada para um máximo de 6 alarmes e que para alterar isso deves editar o AtimeAlarm.h

Estou preciso também, alguém pode me enviar a biblioteca? A dias que venho tentando mas não obtenho sucesso. obrigado!

Uma rápida googlada: TimeAlarms Library, Run Functions At Specific Times