/*
Timer relay control set up for 4 relay unit.
Each relay is individually controlled.
*/
// Questions? Ask them here: Hi Guys new to Arduino as you will see trying to get a 4 channel relay to work based on time of day for a Aquaponics setup, it will work for the first section of Alarm.alarmRepeat and then stop. I'm fairly confident that's its not looping through the pump controls functions, i need a loop function for the time and also for the pump control. Don't know how to use a while loop to control. if you could help that would be appreciated. Regards Damien.
// http://forum.arduino.cc/index.php?topic=66054.0
#include <TimeLib.h>
#include <TimeAlarms.h>
#define PIN_RELAY_1 2 // the Arduino pin, which connects to the IN1 pin of relay module
#define PIN_RELAY_2 3 // the Arduino pin, which connects to the IN2 pin of relay module
#define PIN_RELAY_3 4 // the Arduino pin, which connects to the IN3 pin of relay module
#define PIN_RELAY_4 5 // the Arduino pin, which connects to the IN4 pin of relay module
AlarmId id;
void setup() {
Serial.begin(9600);
while (!Serial) ; // wait for Arduino Serial Monitor
pinMode(PIN_RELAY_1, OUTPUT);
pinMode(PIN_RELAY_2, OUTPUT);
pinMode(PIN_RELAY_3, OUTPUT);
pinMode(PIN_RELAY_4, OUTPUT); //This Relay not currently used
setTime(6,59,50,1,1,11); // set time to Saturday 8:29:00am Jan 1 2011 (this is where the time is set date isnt important)
// Day time timers
Alarm.alarmRepeat(7,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(7,00,10, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(7,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(7,01,10, AirPumpOff); // stops air pump
Alarm.alarmRepeat(7,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(7,02,10, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(7,03,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(7,03,10, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(7,04,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(7,04,10, AirPumpOff); // stops air pump
Alarm.alarmRepeat(7,05,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(7,05,10, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(9,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(9,10,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(9,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(9,45,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(9,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(9,12,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(10,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(10,10,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(10,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(10,45,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(10,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(10,12,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(11,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(11,10,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(11,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(11,45,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(11,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(11,12,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(12,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(12,10,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(12,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(12,45,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(12,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(12,12,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(13,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(13,10,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(13,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(13,45,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(13,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(13,12,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(14,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(14,10,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(14,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(14,45,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(14,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(14,12,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(15,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(15,10,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(15,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(15,45,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(15,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(15,12,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(16,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(16,10,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(16,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(16,45,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(16,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(16,12,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(16,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(16,10,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(16,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(16,45,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(16,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(16,12,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(17,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(17,10,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(17,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(17,45,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(17,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(17,12,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(18,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(18,10,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(18,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(18,45,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(18,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(18,12,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(19,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(19,10,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(19,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(19,45,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(19,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(19,12,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(20,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(20,10,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(20,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(20,45,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(20,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(20,12,0, Pump2Off); // turns off pump 2 at set time
// Night shift timer starts
Alarm.alarmRepeat(21,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(21,05,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(21,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(21,30,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(21,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(21,07,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(22,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(22,05,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(22,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(22,30,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(22,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(22,07,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(23,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(23,05,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(23,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(23,30,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(23,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(23,07,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(0,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(0,05,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(0,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(0,30,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(0,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(0,07,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(1,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(1,05,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(1,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(1,30,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(1,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(1,07,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(2,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(2,05,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(2,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(2,30,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(2,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(2,07,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(3,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(3,05,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(3,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(3,30,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(3,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(3,07,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(4,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(4,05,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(4,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(4,30,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(4,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(4,07,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(5,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(5,05,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(5,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(5,30,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(5,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(5,07,0, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(6,00,0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(6,05,0, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(6,01,0, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(6,30,0, AirPumpOff); // stops air pump
Alarm.alarmRepeat(6,02,0, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(6,07,0, Pump2Off); // turns off pump 2 at set time
// // create timers, to trigger relative to when they're created
// Alarm.timerRepeat(15, Repeats); // timer for every 15 seconds
// id = Alarm.timerRepeat(2, Repeats2); // timer for every 2 seconds
// Alarm.timerOnce(10, OnceOnly); // called once after 10 seconds
}
// functions to be called when an alarm triggers:
void Pump1On() {
Serial.println("Turn pump 1 on");
digitalWrite(PIN_RELAY_1, HIGH);
}
void Pump1Off() {
Serial.println("Turn pump 1 off");
digitalWrite(PIN_RELAY_1, LOW);
}
void AirPumpOn() {
Serial.println("Turn air pump on");
digitalWrite(PIN_RELAY_2, HIGH);
}
void AirPumpOff() {
Serial.println("Turn air pump off");
digitalWrite(PIN_RELAY_2, LOW);
}
void Pump2On() {
Serial.println("Turn pump 2 on");
digitalWrite(PIN_RELAY_3, HIGH);
}
void Pump2Off() {
Serial.println("Turn pump 2 off");
digitalWrite(PIN_RELAY_3, LOW);
}
void loop() {
digitalClockDisplay();
Alarm.delay(1000); // wait one second between clock display
}
void digitalClockDisplay() {
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.println();
}
void printDigits(int digits) {
Serial.print(":");
if (digits < 10)
Serial.print('0');
Serial.print(digits);
}
Never used the alarm library but I suggest You go back to its documentation and read the lines You have not been reading yet.
Is that all that's needed, calling Alarm.delay? I suggest investigating that.
Thanks Railroader (me too work with track machines) yes all I need is a nice way to continue looping through the code for the time. I’ll have a look at the documentation and see what I’m missing I’m sure it’s a bit. Thanks for the help.
Hi,
I tested your code here and the same problem occurred.
But I identified that the code is executed with the first 6 events of alarmRepeat():
So I modified your code for simplicity and added 2 new functions.
The problem remains.
I'm not competent enough to identify why the library only allows 6 alarmRepeat(): events.
/*
Timer relay control set up for 4 relay unit.
Each relay is individually controlled.
*/
// Questions? Ask them here: Hi Guys new to Arduino as you will see trying to get a 4 channel relay to work based on time of day for a Aquaponics setup, it will work for the first section of Alarm.alarmRepeat and then stop. I'm fairly confident that's its not looping through the pump controls functions, i need a loop function for the time and also for the pump control. Don't know how to use a while loop to control. if you could help that would be appreciated. Regards Damien.
// http://forum.arduino.cc/index.php?topic=66054.0
#include <TimeLib.h>
#include <TimeAlarms.h>
#define PIN_RELAY_1 2 // the Arduino pin, which connects to the IN1 pin of relay module
#define PIN_RELAY_2 3 // the Arduino pin, which connects to the IN2 pin of relay module
#define PIN_RELAY_3 4 // the Arduino pin, which connects to the IN3 pin of relay module
#define PIN_RELAY_4 5 // the Arduino pin, which connects to the IN4 pin of relay module
//AlarmId id;
void setup() {
Serial.begin(9600);
while (!Serial) ; // wait for Arduino Serial Monitor
pinMode(PIN_RELAY_1, OUTPUT);
pinMode(PIN_RELAY_2, OUTPUT);
pinMode(PIN_RELAY_3, OUTPUT);
pinMode(PIN_RELAY_4, OUTPUT); //This Relay not currently used
setTime(6, 59, 58, 1, 1, 11); // set time to Saturday 8:29:00am Jan 1 2011 (this is where the time is set date isnt important)
// Day time timers
Alarm.alarmRepeat(7, 00, 0, Pump1On); // turns pump 1 on at set time
Alarm.alarmRepeat(7, 00, 2, Pump1Off); // turns pump 1 off at set time
Alarm.alarmRepeat(7, 00, 4, AirPumpOn); // starts Air pump
Alarm.alarmRepeat(7, 00, 6, AirPumpOff); // stops air pump
Alarm.alarmRepeat(7, 00, 9, Pump2On); // start pump 2 at set time
Alarm.alarmRepeat(7, 00, 10, Pump2Off); // turns off pump 2 at set time
Alarm.alarmRepeat(7, 00, 12, Pump1NewOn); // turns pump 1 on at set time <<<<<<<------------------------------
Alarm.alarmRepeat(7, 00, 14, Pump1NewOff); // turns pump 1 off at set time <<<<<<<---------------------------------
// // create timers, to trigger relative to when they're created
// Alarm.timerRepeat(15, Repeats); // timer for every 15 seconds
// id = Alarm.timerRepeat(2, Repeats2); // timer for every 2 seconds
// Alarm.timerOnce(10, OnceOnly); // called once after 10 seconds
}
// functions to be called when an alarm triggers:
void Pump1On() {
Serial.println("Turn pump 1 on");
digitalWrite(PIN_RELAY_1, HIGH);
}
void Pump1Off() {
Serial.println("Turn pump 1 off");
digitalWrite(PIN_RELAY_1, LOW);
}
void Pump1NewOn() {
Serial.println("Turn pump New 1 on");
digitalWrite(PIN_RELAY_1, HIGH);
}
void Pump1NewOff() {
Serial.println("Turn pump New 1 off");
digitalWrite(PIN_RELAY_1, LOW);
}
void AirPumpOn() {
Serial.println("Turn air pump on");
digitalWrite(PIN_RELAY_2, HIGH);
}
void AirPumpOff() {
Serial.println("Turn air pump off");
digitalWrite(PIN_RELAY_2, LOW);
}
void Pump2On() {
Serial.println("Turn pump 2 on");
digitalWrite(PIN_RELAY_3, HIGH);
}
void Pump2Off() {
Serial.println("Turn pump 2 off");
digitalWrite(PIN_RELAY_3, LOW);
}
void loop() {
digitalClockDisplay();
Alarm.delay(1000); // wait one second between clock display
}
void digitalClockDisplay() {
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.println();
}
void printDigits(int digits) {
Serial.print(":");
if (digits < 10)
Serial.print('0');
Serial.print(digits);
}
Printout:
6:59:58
6:59:59
Turn pump 1 on
7:00:00
7:00:01
Turn pump 1 off
7:00:02
7:00:03
Turn air pump on
7:00:04
7:00:05
Turn air pump off
7:00:06
7:00:07
7:00:08
Turn pump 2 on
7:00:09
Turn pump 2 off
7:00:10
7:00:11
7:00:12 <<<<<< fail from here
7:00:13
7:00:14
7:00:15
7:00:16
7:00:17
7:00:18
Thankyou ruilviana,
Appreciate you effort yes a bit of a tricky problem I’ll try read more on the documentation for the time function and see if there is a reason it won’t work properly. Damien.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.