Hi, Im doing a new program to control a grow chamber, mostly is the humidity control and the fogger times, at this point I like to have two mayor "subrutines" one for the watering in the day and another on the night, since they use the same variables, but different variables, It occurs to me, it might be handy to write a "universal watering program"
The idea is to have a function to change between the day and night programs, and use the same subrutine but each with is one values.
So this is what I got so far:
//time definitions------------------------------------------
#define segundo 1000
#define minuto (60*segundo)
#define hora (60*minuto)
//struct definitinions--------------------------------------
struct factors { byte id;
int minHum;
int maxHum;
unsigned long timeBtwWatering;
unsigned long timeInWatering;
} ;//factors;
//definitions for watering machine:
enum wateringMachineOptions {startFogger, startTimmer, waitMaxHum, startMaxHTimer, endWatering};
wateringMachineOptions wateringMachine = startFogger;
//Hardware Pins
const byte fogger = 2;
const byte foggerFan = 3;
//////////////////////////////////////////////////////////////////////
void setup()
{
pinMode(fogger, OUTPUT);
pinMode(foggerFan, OUTPUT);
//---------------------------------------
Serial.begin(9600);
//day time factors------------------------
factors dayProgram;
dayProgram.id = 0;
dayProgram.minHum = 20;
dayProgram.maxHum = 90;
dayProgram.timeBtwWatering = (10*minuto);
dayProgram.timeInWatering = (10*minuto);
//nigth factors---------------------------
factors ngtProgram;
ngtProgram.id = 1;
ngtProgram.minHum = 10;
ngtProgram.maxHum = 70;
ngtProgram.timeBtwWatering = (30*minuto);
ngtProgram.timeInWatering = (5*minuto);
}
void loop()
{
}
//Fuction dedicated to start the watering machine and keep
//min time in max humidity.
void watering()
{
switch(wateringMachine)
{
case (startFogger):
//turn on the fogger and move foward
foggerON();
Serial.println("Start Fogger");
wateringMachine = startTimmer;
break;
case (startTimmer):
//start the timmer and move foward
Serial.println("The timmer begins");
wateringMachine = waitMaxHum;
break;
case (waitMaxHum):
wateringMachine = startMaxHTimer;
break;
case (startMaxHTimer):
Serial.println("Watering End ");
wateringMachine = endWatering;
break;
case(endWatering):
Serial.println("Exit Watering");
break;
}
}
void foggerON()
{
digitalWrite(fogger, LOW);
digitalWrite(foggerFan , LOW);
}
void srtTimmer()
{
}
The idea is to have a switch case to call each subroutine, and each subroutine call its owns timmers and such.
I have the two struct with its factors, and be possible to write two routines for this, but since Im trying to learn.
How I can write a "Univerasal roututine for this structs"?
Pseudo:
loop()
{
if (time = dayTime) waterignOption = DayTime;
if (time = ngtTime) wateringOption = nigtTime;
watering()
{
case (startFogger):
brake; ///
case (startTimmer):
//start the timmer and move foward
Serial.println("The timmer begins");
wateringMachine = waitMaxHum;
break;
}
}
void starTimmer()
{
if(millis() - programType.srt.Timmer > program.Type.program.watter.delay ?????
}
}
I hope this make some sense.
Thnaks.
-Alex.