Adding another relay(s) in rtc relay sketch

Hi guys,

at first excuse my english language and my programming skills.
I have this code for switching 1 relay depending of rtc time. I've tried add another 1 or 2 relays but without success.

#include <DS3231.h>

int Relay = 4;
int temp;

DS3231  rtc(SDA, SCL);
Time t;

const int OnHour = 22;
const int OnMin = 55;
const int OffHour = 23;
const int OffMin = 5;

void setup() {
  Serial.begin(9600);
  rtc.begin();
  pinMode(Relay, OUTPUT);
  digitalWrite(Relay, HIGH);
}

void loop() {
  temp = rtc.getTemp();
  t = rtc.getTime();
  
  if(t.hour<10) {
    Serial.print("0");
    Serial.print(t.hour);
  }
  else {
    Serial.print(t.hour);
  }
  Serial.print(":");
  
  if(t.min<10) {
    Serial.print("0");
    Serial.print(t.min);
  }
  else {
    Serial.print(t.min);
  }
  Serial.print(":");
 
  if(t.sec<10) {
    Serial.print("0");
    Serial.print(t.sec);
  }
  else {
    Serial.print(t.sec);
  }
 
  Serial.println(" ");
  Serial.println(temp);
  Serial.println("°C");
  delay (1000); 
  
  if(t.hour == OnHour && t.min == OnMin){
    digitalWrite(Relay,LOW);
    Serial.println("LIGHT ON ");
    }
    
    else if(t.hour == OffHour && t.min == OffMin){
      digitalWrite(Relay,HIGH);
      Serial.println("LIGHT OFF");
    }
}

I've tried this edited code, but causes mess in switching:

#include <DS3231.h>

int Relay = 4;
int Relay2 = 5;
int temp;

DS3231  rtc(SDA, SCL);
Time t;

const int OnHour = 22;
const int OnMin = 55;
const int OffHour = 23;
const int OffMin = 5;

const int Relay2OnHour = 22;
const int Relay2OnMin = 55;
const int Relay2OffHour = 23;
const int Relay2OffMin = 5;

void setup() {
  Serial.begin(9600);
  rtc.begin();
  pinMode(Relay, OUTPUT);
  digitalWrite(Relay, HIGH);
}

void loop() {
  temp = rtc.getTemp();
  t = rtc.getTime();
  
  if(t.hour<10) {
    Serial.print("0");
    Serial.print(t.hour);
  }
  else {
    Serial.print(t.hour);
  }
  Serial.print(":");
  
  if(t.min<10) {
    Serial.print("0");
    Serial.print(t.min);
  }
  else {
    Serial.print(t.min);
  }
  Serial.print(":");
 
  if(t.sec<10) {
    Serial.print("0");
    Serial.print(t.sec);
  }
  else {
    Serial.print(t.sec);
  }
 
  Serial.println(" ");
  Serial.println(temp);
  Serial.println("°C");
  delay (1000); 
  
  if(t.hour == OnHour && t.min == OnMin){
    digitalWrite(Relay,LOW);
    Serial.println("LIGHT ON ");
    }
    
    else if(t.hour == OffHour && t.min == OffMin){
      digitalWrite(Relay,HIGH);
      Serial.println("LIGHT OFF");
    }

  if(t.hour == Relay2OnHour && t.min == Relay2OnMin){
    digitalWrite(Relay,LOW);
    Serial.println("LIGHT2 ON ");
    }
    
    else if(t.hour == Relay2OffHour && t.min == Relay2OffMin){
      digitalWrite(Relay,HIGH);
      Serial.println("LIGHT2 OFF");
    }
}

How is correct way to add another 1 or 2 relays?

why do you want to use multiple relays? And which board are you using?

Sorry I forgot nd I missed. Relays should be switched in different time. I use arduino nano board.

For example:

const int OnHour = 6;
const int OnMin = 30;
const int OffHour = 7;
const int OffMin = 30;

const int Relay2OnHour = 8;
const int Relay2OnMin = 0;
const int Relay2OffHour = 23;
const int Relay2OffMin = 5;

Your current code controls the first relay based on the times of relay2. Change the digitalWrites in the second relay timing.

You will also need a pinMode in setup for the second relay.

Mean you this?

void setup() {
  Serial.begin(9600);
  rtc.begin();
  pinMode(Relay, OUTPUT);
  digitalWrite(Relay, HIGH);
  pinMode(Relay2, OUTPUT);
  digitalWrite(Relay2, HIGH);
}

and

if(t.hour == Relay2OnHour && t.min == Relay2OnMin){
    digitalWrite(Relay2,LOW);
    Serial.println("LIGHT2 ON ");
    }
   
    else if(t.hour == Relay2OffHour && t.min == Relay2OffMin){
      digitalWrite(Relay2,HIGH);
      Serial.println("LIGHT2 OFF");
    }

I will try and I will give feedback.

You haven't put relay2 in setup():

void setup() {
  Serial.begin(9600);
  rtc.begin();
  digitalWrite(Relay, HIGH);
  digitalWrite(Relay2, HIGH);
  pinMode(Relay, OUTPUT);
  pinMode(Relay2, OUTPUT);
  
}

Oops! @aughostino, didn't mean to step on your toes. :confused:

this code is functional

#include <DS3231.h>

int Relay = 4;
int Relay2 = 5;
int temp;

DS3231  rtc(SDA, SCL);
Time t;

const int OnHour = 16;
const int OnMin = 6;
const int OffHour = 16;
const int OffMin = 9;

const int Relay2OnHour = 16;
const int Relay2OnMin = 7;
const int Relay2OffHour = 16;
const int Relay2OffMin = 8;

void setup() {
  Serial.begin(9600);
  rtc.begin();
  pinMode(Relay, OUTPUT);
  pinMode(Relay2, OUTPUT);
  digitalWrite(Relay, HIGH);
  digitalWrite(Relay2, HIGH);
}

void loop() {
  temp = rtc.getTemp();
  t = rtc.getTime();
  
  if(t.hour<10) {
    Serial.print("0");
    Serial.print(t.hour);
  }
  else {
    Serial.print(t.hour);
  }
  Serial.print(":");
  
  if(t.min<10) {
    Serial.print("0");
    Serial.print(t.min);
  }
  else {
    Serial.print(t.min);
  }
  Serial.print(":");
 
  if(t.sec<10) {
    Serial.print("0");
    Serial.print(t.sec);
  }
  else {
    Serial.print(t.sec);
  }
 
  Serial.println(" ");
  Serial.println(temp);
  Serial.println("°C");
  delay (1000); 
  
  if(t.hour == OnHour && t.min == OnMin){
    digitalWrite(Relay,LOW);
    Serial.println("LIGHT ON ");
    }
    
    else if(t.hour == OffHour && t.min == OffMin){
      digitalWrite(Relay,HIGH);
      Serial.println("LIGHT OFF");
    }
  if(t.hour == Relay2OnHour && t.min == Relay2OnMin){
    digitalWrite(Relay2,LOW);
    Serial.println("LIGHT2 ON ");
    }
    
    else if(t.hour == Relay2OffHour && t.min == Relay2OffMin){
      digitalWrite(Relay2,HIGH);
      Serial.println("LIGHT2 OFF");
    }
}

Thanks very much, guys.

PS: next step will be adding a display nokia 5110 and showing Serial.print on display >:(

Hi,

problem again, I've tried to show time on Nokia 5110 display.

code:

lcd.GotoXY(0,0);
lcd.LcdString(t.hour);

is not working

here is all sketch

#include <Nokia5110.h>
#include <DS3231.h>

#define RST 8
#define CE 7
#define DC 6
#define DIN 5
#define CLK 4

LCDnokia5110 lcd(RST, CE, DC, DIN, CLK);

int Relay = 11;
int Relay2 = 12;
int temp;

DS3231  rtc(SDA, SCL);
Time t;

const int OnHour = 21;
const int OnMin = 40;
const int OffHour = 21;
const int OffMin = 43;

const int Relay2OnHour = 21;
const int Relay2OnMin = 41;
const int Relay2OffHour = 21;
const int Relay2OffMin = 42;

void setup() {
  Serial.begin(9600);
  rtc.begin();
  pinMode(Relay, OUTPUT);
  pinMode(Relay2, OUTPUT);
  digitalWrite(Relay, HIGH);
  digitalWrite(Relay2, HIGH);

  lcd.LcdInitialise();
  lcd.LcdClear();
  lcd.CharSpace = 1; // nastavení velikosti mezery mezi písmeny,lze nastavit na 0, 1 či 2 body
  lcd.GotoXY(0,1);
  lcd.LcdString("Relay 1:");
  lcd.GotoXY(55,1);
  lcd.LcdString("OFF");
  lcd.GotoXY(0,2);
  lcd.LcdString("Relay 2:");
  lcd.GotoXY(55,2);
  lcd.LcdString("OFF");
}

void loop() {
  temp = rtc.getTemp();
  t = rtc.getTime();
  
  
  if(t.hour<10) {
    Serial.print("0");
    Serial.print(t.hour);
  }
  else {
    Serial.print(t.hour);
  }
  Serial.print(":");
  
  if(t.min<10) {
    Serial.print("0");
    Serial.print(t.min);
  }
  else {
    Serial.print(t.min);
  }
  Serial.print(":");
 
  if(t.sec<10) {
    Serial.print("0");
    Serial.print(t.sec);
  }
  else {
    Serial.print(t.sec);
  }
 
  Serial.println(" ");
  Serial.println(temp);
  Serial.println("°C");
  delay (1000); 

lcd.GotoXY(0,0);
lcd.LcdString(t.hour);

  if(t.hour == OnHour && t.min == OnMin){
    digitalWrite(Relay,LOW);
    lcd.GotoXY(55,1);
    lcd.LcdString("ON ");
    }
    
    else if(t.hour == OffHour && t.min == OffMin){
      digitalWrite(Relay,HIGH);
      lcd.GotoXY(55,1);
      lcd.LcdString("OFF");
    }
    
  if(t.hour == Relay2OnHour && t.min == Relay2OnMin){
    digitalWrite(Relay2,LOW);
    lcd.GotoXY(55,2);
    lcd.LcdString("ON ");
    }
    
    else if(t.hour == Relay2OffHour && t.min == Relay2OffMin){
      digitalWrite(Relay2,HIGH);
      lcd.GotoXY(55,2);
      lcd.LcdString("OFF");
    }
}

Static text is OK, but showing time on display case, that are showing some symbols :frowning: where is problem? excluding my skills.