int relay[5] = {53, 13, 12, A0, A1}; unsigned long time_group[5]; unsigned long num_rep_group[5] = { 1, 1, 1, 1, 1 }; void seq(int group, bool st_ini, unsigned long time_ini, unsigned long time_on, unsigned long time_off, unsigned long time_total) { unsigned time_actual = millis()-time_group[group]; if ((time_on + time_off)>0) { unsigned temp_time = time_total - time_ini; int num_rep = temp_time / (time_on + time_off); if (time_actual<=time_ini) { digitalWrite(relay[group], st_ini); num_rep_group[group] = 1; } else if (time_actual<=(time_ini + (num_rep_group[group]*time_on + (num_rep_group[group]-1)*time_off))) { digitalWrite(relay[group], !st_ini); } else if (time_actual<=(time_ini + num_rep_group[group]*(time_on + time_off))) { digitalWrite(relay[group], st_ini); } else if(time_actual=time_total) { time_group[group] = millis(); } } else { if (time_actual<=time_ini) { digitalWrite(relay[group], st_ini); } else if(time_actual=time_total) { time_group[group] = millis(); } } } void setup() { for(int i=0; i<5; i++) { pinMode(relay[i], OUTPUT); digitalWrite(relay[i], HIGH); time_group[i] = millis(); } } void loop() { seq(0, LOW, 10000, 0, 0, 130000); seq(1, HIGH, 15000, 500, 500, 130000); seq(2, HIGH, 20000, 1000, 1000, 130000); seq(3, HIGH, 25000, 3000, 3000, 130000); seq(4, HIGH, 25000, 3000, 3000, 130000); }