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.
system
March 3, 2018, 11:29am
6
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);
}
system
March 3, 2018, 11:32am
7
Oops! @aughostino , didn't mean to step on your toes.
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 where is problem? excluding my skills.