unsigned long tiempoAnterior_1 = 0;
unsigned long tiempoLimite_1 = 10000;
unsigned long tiempoAnterior_2 = 0;
unsigned long tiempoLimite_2 = 10000;
unsigned long tiempoAnterior_3 = 0;
unsigned long tiempoLimite_3 = 10000;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
//---------------------------DEFINIENDO VARIABLES LOCALES-------------------------------------
unsigned long tiempoActual = millis();
static int signal_1;
static int signal_2;
static int signal_3;
static long suma_1 = 0;
static long suma_2 = 0;
static long suma_3 = 0;
static long contador_1;
static long contador_2;
static long contador_3;
static float promedio_1;
static float promedio_2;
static float promedio_3;
static bool refresh_1 = false;
static bool refresh_2 = false;
static bool refresh_3 = false;
//-------------------FUNCIÓN QUE SE ACTUALIZA CONSTANTEMENTE, AQUÍ SE PROCESARÁN LOS DESCANSOS-------------------------
checkRefresh(refresh_1, refresh_2, refresh_3); //Actualiza cada valor de descanso, cuando pasan 10 segundos estos equivalen a verdadero
//---------------------------------------------------------------------------------------------------------------------
//------------------MOSTRANDO PROMEDIO DE LA SEÑAL 1 CADA 10 SEGUNDOS-------------------------------------
if(tiempoActual - tiempoAnterior_1 >= tiempoLimite_1) { //Si el tiempo actual menos el tiempo anterior es igual o mayor al tiempo limite 1...
tiempoAnterior_1 = tiempoActual; //El tiempo anterior 1 equivale al tiempo actual
refresh_1 = true; //Una variable que se manda dentro de una función que constantemente esta siendo actualizada
promedio_1 = (float)suma_1 / (float)contador_1; //Se saca el promedio
Serial.print("La humedad es de: "); //Imprime lo siguiente...
Serial.print(promedio_1);
Serial.println(" gramos sobre metro cúbico");
Serial.println("*************************");
}
//--------------SACANDO PROMEDIO DE LA SEÑAL 1 MIENTRAS NO HAYA QUE DESCANSAR------------------------------
else if(refresh_1 == false) { //Sino, mientras esta variable sea falsa, significa que no han pasado 10 segundos.
signal_1 = random(1,100); //Genera numeros random del 1 al 100
suma_1 += signal_1; //Suma los valores de las sumas
contador_1++; //Suma un contador que lleva la cuenta de cuantas veces se contó
}
//********************************FIN SEÑAL 1*********************************************
//********************************INICIO SEÑAL 2***************************************
//----------------MOSTRANDO PROMEDIO DE LA SEÑAL 2 CADA 10 SEGUNDOS-------------------------------------
if(tiempoActual - tiempoAnterior_2 >= tiempoLimite_2) { //Mismo código que señal 1...
tiempoAnterior_2 = tiempoActual;
refresh_2 = true;
promedio_2 = (float)suma_2 / (float)contador_2;
Serial.print("La proximidad es de: ");
Serial.print(promedio_2);
Serial.println(" metros");
Serial.println("*************************");
}
//--------------SACANDO PROMEDIO DE LA SEÑAL 2 MIENTRAS NO HAYA QUE DESCANSAR------------------------------
else if (refresh_2 == false){ //Mismo código que señal 1...
signal_2 = random(1,100);
suma_2 += signal_1;
contador_2++;
}
//********************************FIN SEÑAL 2*********************************************
//********************************INICIO SEÑAL 3***************************************
//----------------MOSTRANDO PROMEDIO DE LA SEÑAL 2 CADA 10 SEGUNDOS-------------------------------------
if(tiempoActual - tiempoAnterior_3 >= tiempoLimite_3) { //Mismo código que señal 3...
tiempoAnterior_3 = tiempoActual;
refresh_3 = true;
promedio_3 = (float)suma_3 / (float)contador_3;
Serial.print("El acelerometro detectó: ");
Serial.print(promedio_3);
Serial.println(" metros");
Serial.println("*************************");
}
//--------------SACANDO PROMEDIO DE LA SEÑAL 2 MIENTRAS NO HAYA QUE DESCANSAR------------------------------
else if (refresh_3 == false) { //Mismo código que señal 1...
signal_3 = random(1,100);
suma_3 += signal_1;
contador_3++;
}
}
//--------------------------------------INICIO DE FUNCIÓN DE DESCANSO----------------------------------------------------
void checkRefresh (bool &descanso1, bool &descanso2, bool &descanso3) { //Esta función recibe los valores de descanso y manipula directamente aquel valor fuera de la función
unsigned long actualTime = millis(); //Una variable local que lleva el tiempo dentro de nuestra función.
//----------------------------DEFINIENDO VARIABLES LOCALES A LA FUNCIÓN RELACIONADAS AL TIEMPO--------------------------------
static unsigned long beforeTime_1 = 0;
static unsigned long beforeTime_2 = 0;
static unsigned long beforeTime_3 = 0;
const int limite_1 = 1000;
const int limite_2 = 300;
const int limite_3 = 2000;
static bool active_1 = true;
static bool active_2 = true;
static bool active_3 = true;
//-------------------------------AQUI SE CONTROLA EL TIEMPO LIMITE 1-------------------------------------------------
if(descanso1 == true && active_1 == true) { //Si dos variables son equivalentes a verdadero, entonces..-
beforeTime_1 = actualTime; //El tiempo anterior local es igual al tiempo actual
active_1 = false; //Una variable desactiva esta condición y sale del if.
}
if(actualTime - beforeTime_1 >= limite_1 && active_1 == false) { //Si el tiempo actual menos el tiempo anterior es mayor o igual al limite1 y la variable es igual a falso...
descanso1 = false; //Descanso es igual a 1, devolviendo así el valor a la función original y haciendo que el programa vuelva a funcionar
active_1 = true; //La ultima variable equivale a verdadero, desactivando este if pero activando una variable necesaria para volver a iniciar el ciclo
tiempoAnterior_1 = actualTime; //El tiempoAnterior_1, el cual es el tiempo fuera de la función equivale al tiempo Actual
}
//---------------------------AQUI TERMINA DE EVALUARSE EL PRIMER DESCANSO DEL PRIMER SENSOR-------------------------
//---------------------------------AQUI SE CONTROLA EL TIEMPO LIMITE 2-------------------------------------------------
if(descanso2 == true && active_2 == true) { //Mismo código que con el limite 1
beforeTime_2 = actualTime;
active_2 = false;
}
if(actualTime - beforeTime_2 >= limite_2 && active_2 == false) {
descanso2 = false;
active_2 = true;
tiempoAnterior_2 = actualTime;
}
//------------------------AQUI TERMINA DE EVALUARSE EL SEGUNDO DESCANSO DEL SEGUNDO SENSOR-------------------------
//---------------------------------AQUI SE CONTROLA EL TIEMPO LIMITE 3-------------------------------------------------
if(descanso3 == true && active_3 == true) { //Mismo código que con el limite 2
beforeTime_3 = actualTime;
active_3 = false;
}
if(actualTime - beforeTime_3 >= limite_3 && active_3 == false) {
descanso3 = false;
active_3 = true;
tiempoAnterior_3 = actualTime;
}
//------------------------AQUI TERMINA DE EVALUARSE EL SEGUNDO DESCANSO DEL SEGUNDO SENSOR-------------------------
}