Riflettendo sul tuo codice iniziale, mi sembra che il problema che non lo fa funzionare correttamente sia la mancata aggiornamento della variabile tempo con la funzione millis()
Non so se è corretto prova a vedere, potrebbero esserci degli errori.
byte flag1=1,flag2=1;
void loop () {
pul_p = digitalRead (PULSANTEP);
pul_m = digitalRead (PULSANTEM);
diminuisci();
aumenta();
salva();
t = SHT2x.GetTemperature();
h = SHT2x.GetHumidity();
if (valore <= h) {
if(flag1){// Eseguo una sola volta
tempo_1=millis();
flag1=0; //evita che venga ripetuto questo codice
}
if (millis() - tempo_1 > (pausa_1)) {
digitalWrite (LED, HIGH);
flag2=1; // Predispone la pausa a umidità maggiore
}
}
if (valore > h) {
if(flag2){// Eseguo una sola volta
tempo_2=millis();
flag2=0;
}
if (millis() - tempo_2 > (pausa_1)) {
digitalWrite (LED, LOW);
flag1=1; // predispone la pausa a umidità minore
}
}
}