Relay timer issue not looping

/*
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.