Fijate si así hace lo que buscas (cambié algunos nombres de variables para ser más claro, al menos para mi)
/*
Sketch para calcular la temperatura promedio total de cuatro sensores Dht11 siempre y cuando todos esten +o- en un promedio
de lo contrario el sensor que no cumpla con esa condición no se contabilizara para el promedio
*/
#include <DHT.h>
#define DHT1PIN 44 //Seleccionamos el pin en el que se conectará el sensor, en nuestro caso el pin Digital 44
#define DHT2PIN 45 //Seleccionamos el pin en el que se conectará el sensor, en nuestro caso el pin Digital 45
#define DHT3PIN 46 //Seleccionamos el pin en el que se conectará el sensor, en nuestro caso el pin Digital 46
#define DHT4PIN 47 //Seleccionamos el pin en el que se conectará el sensor, en nuestro caso el pin Digital 47
#define DHTTYPE DHT11 //Se selecciona el DHT11(hay otros DHT)
DHT dht1(DHT1PIN, DHTTYPE); //se inician los sensores
DHT dht2(DHT2PIN, DHTTYPE); //se inician los sensores
DHT dht3(DHT3PIN, DHTTYPE); //se inician los sensores
DHT dht4(DHT4PIN, DHTTYPE); //se inician los sensores
//////Definimos las Variables: Temperatura 1,2,3 y 4 Max y Min, Humedad 1,2,3 y 4 Max y Min, Indice de calos 1,2,3,4 Promedio h y t/////
float t1, t2, t3, t4;
float h1, h2, h3, h4;
float ic1, ic2, ic3, ic4;
//float hmin = 20.0, hmax = 60.0;
//float tmin = 20.0, tmax = 28.0;
float t1ant, t2ant, t3ant, t4ant;
float h1ant, h2ant, h3ant, h4ant;
float ic1ant, ic2ant, ic3ant, ic4ant;
float ptinf, ptsup, phinf, phsup, picinf, picsup;
float promTreal, promHreal , promICreal;
float promTutil, promHutil, promICutil;
float promTant, promHant, promICant;
//const float topt = 28.0; //Temperatura Optima
bool t1_ok = false;
bool t2_ok = false;
bool t3_ok = false;
bool t4_ok = false;
bool h1_ok = false;
bool h2_ok = false;
bool h3_ok = false;
bool h4_ok = false;
bool ic1_ok = false;
bool ic2_ok = false;
bool ic3_ok = false;
bool ic4_ok = false;
float act = 0;
float divt = 0;
float ach = 0;
float divh = 0;
float acic = 0;
float divic = 0;
void setup() {
Serial.begin(9600); //Se inicia la comunicación serial
dht1.begin(); //Se inicia el sensor de humedad y temperatura
dht2.begin(); //Se inicia el sensor de humedad y temperatura
dht3.begin(); //Se inicia el sensor de humedad y temperatura
dht4.begin(); //Se inicia el sensor de humedad y temperatura
}
void loop() {
//////// sensores de Temperatura y humedad/////
t1 = dht1.readTemperature(); //se guarda la temperatura en la variable t
t2 = dht2.readTemperature(); //se guarda la temperatura en la variable t2
t3 = dht3.readTemperature(); //se guarda la temperatura en la variable t3
t4 = dht4.readTemperature(); //se guarda la temperatura en la variable t4
h1 = dht1.readHumidity(); //se guarda el valor de la humedad en la variable h
h2 = dht2.readHumidity(); //se guarda el valor de la humedad en la variable h2
h3 = dht3.readHumidity(); //se guarda el valor de la humedad en la variable h3
h4 = dht4.readHumidity(); //se guarda el valor de la humedad en la variable h4
ic1 = dht1.computeHeatIndex(t1, h1, false);
ic2 = dht2.computeHeatIndex(t2, h2, false);
ic3 = dht3.computeHeatIndex(t3, h3, false);
ic4 = dht4.computeHeatIndex(t4, h4, false);
promTreal = (t1 + t2 + t3 + t4) / 4; /////////////////// esto es parte de mi problema, OJO OJO OJO OJO//////////
promHreal = (h1 + h2 + h3 + h4) / 4; ///////////////////
promICreal = (ic1 + ic2 + ic3 + ic4 ) / 4; ///Promedio para indice de Calor
ptinf = promTreal * 0.9; //para calcular el promedio - 10%
ptsup = promTreal * 1.1; //para calcular el promedio + 10%
phinf = promHreal * 0.9;
phsup = promHreal * 1.1;
picinf = promICreal * 0.9;
picsup = promICreal * 1.1;
t1_ok = (t1 >= ptinf) & (t1 <= ptsup); //solo es ok t1 si cumple con la condicion
t2_ok = (t2 >= ptinf) & (t2 <= ptsup); //solo es ok t2 si cumple con la condicion
t3_ok = (t3 >= ptinf) & (t3 <= ptsup); //solo es ok t3 si cumple con la condicion
t4_ok = (t4 >= ptinf) & (t4 <= ptsup); //solo es ok t4 si cumple con la condicion
h1_ok = (h1 >= phinf) & (h1 <= phsup); //solo es ok t1 si cumple con la condicion
h2_ok = (h2 >= phinf) & (h2 <= phsup); //solo es ok t2 si cumple con la condicion
h3_ok = (h3 >= phinf) & (h3 <= phsup); //solo es ok t3 si cumple con la condicion
h4_ok = (h4 >= phinf) & (h4 <= phsup); //solo es ok t4 si cumple con la condicion
ic1_ok = (ic1 >= picinf) & (ic1 <= picsup); //solo es ok t1 si cumple con la condicion
ic2_ok = (ic2 >= picinf) & (ic2 <= picsup); //solo es ok t2 si cumple con la condicion
ic3_ok = (ic3 >= picinf) & (ic3 <= picsup); //solo es ok t3 si cumple con la condicion
ic4_ok = (ic4 >= picinf) & (ic4 <= picsup); //solo es ok t4 si cumple con la condicion
if (t1_ok && h1_ok && ic1_ok) {
act += t1;
divt++;
ach += h1;
divh++;
acic += ic1;
divic++;
}
if (t2_ok && h2_ok && ic2_ok) {
act += t2;
divt++;
ach += h2;
divh++;
acic += ic2;
divic++;
}
if (t3_ok && h3_ok && ic3_ok) {
act += t3;
divt++;
ach += h3;
divh++;
acic += ic3;
divic++;
}
if (t4_ok && h4_ok && ic4_ok) {
act += t4;
divt++;
ach += h4;
divh++;
acic += ic4;
divic++;
}
promTutil = act / divt;
promHutil = ach / divh;
promICutil = acic / divic;
//////////////se muestra en el monitor serial si el valor de alguna variable cambia///////
// if (tact2 != t2ant || hact2 != h2ant || icact != icant || tact1 != t1ant || hact1 != h1ant || promTutil != promTant || icact != icant) {
if((t1 != t1ant) || (t2 != t2ant) || (t3 != t3ant) || (t4 != t4ant)) {
if((h1 != h1ant) || (h2 != h2ant) || (h3 != h3ant) || (h4 != h4ant)) {
if((promTutil != promTant) || (promHutil != promHant) || (promICutil != promICant)) {
Serial.println(); //esta linea me organiza las nuevas lecturas en una nueva linea en el monitor serial
// Mostrar en monitor serial la temperatura
Serial.print(" Temp1: "); Serial.print(String ((int)t1)); Serial.print("ºC"); //indica un cambio de temperatura o un cambio en la humedad
Serial.print(" Temp2: "); Serial.print(String ((int)t2)); Serial.print("ºC"); //indica un cambio de temperatura o un cambio en la humedad
Serial.print(" Temp3: "); Serial.print(String ((int)t3)); Serial.print("ºC"); //indica un cambio de temperatura o un cambio en la humedad
Serial.print(" Temp4: "); Serial.print(String ((int)t4)); Serial.print("ºC"); //indica un cambio de temperatura o un cambio en la humedad
// Mostrar en monitor serial la humedad relativa
Serial.print(" Hum1: "); Serial.print(String ((int)h1)); Serial.print(" %"); //indica un cambio de la humedad1
Serial.print(" Hum2: "); Serial.print(String ((int)h2)); Serial.print(" %"); //indica un cambio de la humedad1
Serial.print(" Hum3: "); Serial.print(String ((int)h3)); Serial.print(" %"); //indica un cambio de la humedad1
Serial.print(" Hum4: "); Serial.print(String ((int)h4)); Serial.print(" %"); //indica un cambio de la humedad1
// Mostrar en monitor serial el promedio de temperatura y humedad
Serial.print(" promt: "); Serial.print(String ((int)promTutil)); Serial.write(byte(0)); Serial.print("ºC"); Serial.print(" promh: "); Serial.print(String ((int)promHutil));
Serial.print(" %");
Serial.print(" Ind Calor: "); Serial.print(String ((int)promICutil)); Serial.print("ºC"); // Mostrar en monitor serial el indice de caloren ºC
}
}
}
t1_ok = false;
t2_ok = false;
t3_ok = false;
t4_ok = false;
h1_ok = false;
h2_ok = false;
h3_ok = false;
h4_ok = false;
ic1_ok = false;
ic2_ok = false;
ic3_ok = false;
ic4_ok = false;
t1ant = t1;
t2ant = t2;
t3ant = t3;
t4ant = t4;
h1ant = h1;
h2ant = h2;
h3ant = h3;
h4ant = h4;
ic1ant = ic1;
ic2ant = ic2;
ic3ant = ic3;
ic4ant = ic4;
promTant = promTutil;
promHant = promHutil;
promICant = promICutil;
}
Lo compilé perfectamente pero no tengo forma de probarlo, no tengo Mega ni DHT. Espero te sirva.
Edito: Avísame si necesitas que te aclare algo
Saludos