Lab_interaccio/2022/Llum_bcn_Massana/Llum_bcn_Massana.ino
2025-02-25 21:29:42 +01:00

70 lines
2 KiB
C++

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)
{
if (num_rep_group[group]< num_rep) num_rep_group[group]++;
}
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)
{
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);
}