Arduino mais rtc ds 3231 acionando reles.

Galera estou com um problema, meu rtc não está obedecendo a data e hora quando coloco para atualizar no monitor serial, quando ligo o projeto pelça primeira vez tenho que ir no monitor serial e colocar a data e hora desta maneira
2018,8,17,08,43,25
ano,mês,dia,hora,minuto,segundo

mas ele está acionando os reles.

mas ele fica louco e fica com a hora e dia aleatório.

segue codigo

#include “Wire.h”
#define DS3231_ADDRESS 0x68
int segundos;
int minutos;
int horas;
int diadasemana;
int diadomes;
int mes;
int ano;
byte zero = 0x00;
int rele1 = 7;
int rele2 = 8;
int rele3 = 9;
int rele4 = 10;

bool ligarele1;
bool ligarele2;
bool ligarele3;
bool ligarele4;

void setup()
{
pinMode(rele1, OUTPUT);
digitalWrite(rele1, HIGH);
pinMode(rele2, OUTPUT);
digitalWrite(rele2, HIGH);
pinMode(rele3, OUTPUT);
digitalWrite(rele3, HIGH);
pinMode(rele4, OUTPUT);
digitalWrite(rele4, HIGH);
ligarele1 = false;
ligarele2 = false;
ligarele3 = false;
ligarele4 = false;
Wire.begin();
Serial.begin(9600);
}
byte ConverteParaBCD(byte val){ //Converte o número de decimal para BCD
return ( (val/1016) + (val%10) );
}
byte ConverteparaDecimal(byte val) { //Converte de BCD para decimal
return ( (val/16
10) + (val%16) );
}
void Mostrarelogio()
{
Wire.beginTransmission(DS3231_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS3231_ADDRESS, 7);
int segundos = ConverteparaDecimal(Wire.read());
int minutos = ConverteparaDecimal(Wire.read());
int horas = ConverteparaDecimal(Wire.read() & 0b111111);
int diadasemana = ConverteparaDecimal(Wire.read());
int diadomes = ConverteparaDecimal(Wire.read());
int mes = ConverteparaDecimal(Wire.read());
int ano = ConverteparaDecimal(Wire.read());
//Mostra a data no Serial Monitor
Serial.print(“Data: “);
Serial.print(diadomes);
Serial.print(”/”);
Serial.print(mes);
Serial.print("/");
Serial.print(ano);
Serial.print(" “);
Serial.print(“Hora : “);
Serial.print(horas);
Serial.print(”:”);
Serial.print(minutos);
Serial.print(”:");
Serial.print(segundos);
switch(diadasemana)
{
case 0:Serial.println(", Domingo");
case 1:Serial.println(", Segunda");
case 2:Serial.println(", Terca");
case 3:Serial.println(", Quarta");
case 4:Serial.println(", Quinta");
case 5:Serial.println(", Sexta");
case 6:Serial.println(", Sabado");
}

if ((horas >= 8) and (minutos <= 00) and (!ligarele1)) {
ligarele1 = true;
digitalWrite(rele1, LOW);}
if ((horas >= 8) and (minutos <= 30) and (!ligarele2)) {
ligarele2 = true;
digitalWrite(rele2, LOW);}
if ((horas >= 9) and (minutos <= 00) and (!ligarele3)) {
ligarele3 = true;
digitalWrite(rele3, LOW);}
if ((horas >= 9) and (minutos <= 30) and (!ligarele4)) {
ligarele4 = true;
digitalWrite(rele4, LOW);}

if ((horas >= 20) and (minutos <= 00) and (ligarele1)) {
ligarele1 = false;
digitalWrite(rele1, HIGH);}
if ((horas >= 20) and (minutos <= 30) and (ligarele2)) {
ligarele2 = false;
digitalWrite(rele2, HIGH);}
if ((horas >= 21) and (minutos <= 00) and (ligarele3)) {
ligarele3 = false;
digitalWrite(rele3, HIGH);}
if ((horas >= 21) and (minutos <= 30) and (ligarele4)) {
ligarele4 = false;
digitalWrite(rele4, HIGH);}

}void loop()
{
Mostrarelogio();
delay(1000);
}

Nada no teu código está feito para receber e sincronizar a data e hora se recebidos da porta série.

Adicionalmente, se leres o manual desse chip vais notar que o registo onde a hora está guardada não é propriamente "simples" de ler.

Outra coisa importante é que para usares a função lógica AND dentro do if deves usar && e não a palavra and...

finalmente, os relés provocam quedas de tensão no arduino quando actuam que podem provocar o que tu estás a ver... Isso é bastante comum se pesquisares no fórum e regra geral tem a ver com fontes de alimentação sem potência suficiente e falta de condensadores no circuito.