Tengo un medidor con DHT22 con dos display de 7seg.
Me interesaría bloquear el DHT22 cuando llegue a 65%RH y el display refleje los 65%RH fijos....cuando baje de 65%RH que retome la medición normal del DHT22.
Gracias por su ayuda.
#include <OneWire.h>
#include <DHT.h>
#define DHTTYPE DHT22 // DHT 22 (AM2302)
// Configuro pines
int latchPin = 8; //Pin para el latch de los 74HC595
int clockPin = 12; //Pin para Reloj de los 74HC595
int dataPin = 11; //Pin Datos serie para 74HC595
float h,t;
DHT dht(7, DHTTYPE); //Pin entrada del DHT22
// caracteres display 7 seg. del 0-9
byte numberSet[10] = {
B00111111, B00000110, B01011011, B01001111, // 0,1,2,3
B01100110, B01101101, B01111101, B00000111, // 4,5,6,7
B01111111, B01101111 // 8,9
};
void setup() {
// inicializa serial
Serial.begin(9600);
// inicializa sensor de humedad
dht.begin();
// salida registros de desplazamiento
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
h = dht.readHumidity(); // leer el valor de la humedad
// Compruebe si alguna de las lecturas es fallida y salir si es fallida (e intentarlo de nuevo)
if (isnan(h)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Hum = ");
Serial.print(h);
display(h);
delay(1000);
}
void display(float Number){
int iNum = (int)(Number*10); // con esto aseguro 1 digito decimal
int decimal = iNum %10; // digito decimal
iNum /= 10;
int unidad = iNum % 10;
iNum /= 10;
int decena = iNum % 10;
displayNumb(decimal, unidad, decena);
}
void displayNumb(int a, int b, int c) {
// saca el codigo de numeros
byte bitsA = numberSet[a];
byte bitsB = numberSet[b];
byte bitsC = numberSet[c];
// set listo para cambiar
digitalWrite(latchPin, LOW);
// decimal
shiftOut(dataPin, clockPin, bitsA);
// unidad
shiftOut(dataPin, clockPin, bitsB);
// decena
shiftOut(dataPin, clockPin, bitsC);
// shift salida datos
digitalWrite(latchPin, HIGH);
}
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
int i=0;
int pinState;
digitalWrite(myDataPin, 0);
digitalWrite(myClockPin, 0);
for (i=7; i>=0; i--) {
digitalWrite(myClockPin, 0);
if ( myDataOut & (1<<i) ) {
pinState= 1;
}
else {
pinState= 0;
}
digitalWrite(myDataPin, pinState);
digitalWrite(myClockPin, 1);
digitalWrite(myDataPin, 0);
}
digitalWrite(myClockPin, 0);
}