Agradecería ayuda con código para medidor de humedad y 74HC595 2 digitos.

Hola....... me he armado un lío para hacer un medidor de humedad con el dht22 y 74hc595 con dos digitos. Si alguien del foro lo ha realizado agradecería me lo pase para poder estudiarlo ya que soy NOVATO ó ayuda en corrección del código adjunto. GRACIAS.

#include <OneWire.h>
#include <DHT.h>

// pin setups
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
DHT dht(2, DHT22);   //Pin entrada del DHT22

// librerias para conectar el Sensor
OneWire oneWire(tempPin);


// 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() {
  float h = dht.readHumidity(); // leer el valor de la humedad
  if (isnan(h)) 
  
  Serial.println(h);
  
  // cast to float (solo dos digitos)
  int rT = (int)t;
  
  // digito de las unidades
  int units = rT % 10;
  
  // digito de las decenas
  rT = rT/10;
  int tens = rT % 10;
  
  displayNumb(units, tens);
  delay(100);
  
}

void displayNumb(int a, int b) {
  // saca el codigo de numeros
  byte bitsA = numberSet[a];
  byte bitsB = numberSet[b];
  
  // set listo para cambiar
  digitalWrite(latchPin, LOW);
  
  // unidades
  shiftOut(dataPin, clockPin, bitsA);
  // decenas
  shiftOut(dataPin, clockPin, bitsB);
  
  // 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);
}

"Parece que no hay ayuda"....por favor ayudenme.
GRACIAS

Hola.
En primer lugar, deberías explicar un poco más concretamente tu problema: si es para leer el sensor, calcular los dígitos o para mostrarlos...
En segundo lugar, para códigos cortos como el tuyo, lo mejor es mostrar el código en el propio mensaje (seguro que más gente se animará a echarle un vistazo). Para ello, selecciona en el IDE todo el código, y aquí en el editor pulsas el icono de almohadilla que hay en la parte superior, y pegas tu código entre las dos etiquetas que aparecen:
[ code ] tal que aquí [ /code]
Y en tercer lugar, no debería ser necesario que reescribas la función shiftOut.
Saludos.

Con el IDE 0023 salen estos errores:
sketch_sep13a:10: error: 'tempPin' was not declared in this scope
sketch_sep13a.cpp: In function 'void loop()':
sketch_sep13a:41: error: 't' was not declared in this scope

Hola.
De momento, suponiendo, por ejemplo que tu termómetro va conectado al pin3, pon antes de la línea
OneWire oneWire(tempPin);
Esto:
const int tempPin=3;

Y en la línea
int rT = (int)t;

supongo que será
int rT = (int)h;

Saludos.

Gracias...no lo entiendo muy bien, intento hacer un medidor de humedad relativa. Agradecería tus indicaciones que sean para "TORPES" como yo.

Con las rectificacines no da errores ......pero no funciona en Proteus.......

¿Qué código tienes actualmente?

hay francisco.. que pasa con ese código que lo dejamos funcionando y te das contra la pared con cada mejora.. jajaja bueno asi es, al comienzo y asi nos pasó a todos los que no somos tan buenos programadores.
Hay gente que visualiza todo sin problemas y otros como nosotros somos mas de prueba error.

Porque no pones tu archivo proteus y el codigo Arduino asi vemos que ocurre porque de lo contrario hacer que ambas cosas funcionen, no tendrá hablando por dias.
Como ya te dije antes... ayuda mucho cuando se explica el problema y se agregan los archivos con los que se trabaja.

El código es para un medidor de humedad de dos dígitos con los 74HC595 y el DHT22.
La versión de Proteus 7.1 que temgo no tiene la DLL el DHT22 pero la versión 8.1 si tiene los DLL del DHT11 y DHT22 . Te adjunto archivo con proteus 7.10 no se como poner el DHT22.

Código actual:

#include <OneWire.h>
#include <DHT.h>

// pin setups
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
DHT dht(2, DHT22);   //Pin entrada del DHT22

// librerias para conectar el Sensor
const int tempPin=2;
OneWire oneWire(tempPin);


// 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() {
  float h = dht.readHumidity(); // leer el valor de la humedad
  if (isnan(h)) 
  
  Serial.println(h);
  
  // cast to float (solo dos digitos)
   int rT = (int)h;
  
  // digito de las unidades
  int units = rT % 10;
  
  // digito de las decenas
  rT = rT/10;
  int tens = rT % 10;
  
  displayNumb(units, tens);
  delay(100);
  
}

void displayNumb(int a, int b) {
  // saca el codigo de numeros
  byte bitsA = numberSet[a];
  byte bitsB = numberSet[b];
  
  // set listo para cambiar
  digitalWrite(latchPin, LOW);
  
  // unidades
  shiftOut(dataPin, clockPin, bitsA);
  // decenas
  shiftOut(dataPin, clockPin, bitsB);
  
  // 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);
}

Por la tarde adjunto simulación Proteus 7.10 ( Le falta el DHT22).
Muchas gracias

higrometro.DSN (81.1 KB)

Ayuda .....por favor....
GRACIAS

Alguna ayudita....GRACIAS...a todos....

Que no funciona Francisco?

Lo intento simular y no funciona...como el termómetro que si lo simulo bien.....No se que parte del código esta mal.
Gracias por tu atención...y ayuda...Salu2

Te mandé mensaje francisco, enviame a mi email. Lo encuentras en mi perfil.

Subelos aca tambien

No se si lo recibiste..?te mande un privado 3/10/2014 con la información .....ya me indicarás lo que subo al foro....ya charlamos.
Gracias.

Pasame que libreria DTH estas usando, necesito el link

Te adjunto DLL proteus 8.1 del DHT22 (DHTXX).
Salu2

DHTXX.DLL (68.5 KB)

Hola francisco, te resolvi el problema aunque el manejo del DS18X20 mucho no me gusta pero funciona.
Te agregue un display ya que como tienes decimales pense que era mas apropiado.
Los datos estan en donde ya sabes.

Higrometro_81.ino (4.6 KB)

Higrometro8.1.pdsprj (19.1 KB)

Muchas gracias por tu inapreciable ayuda.
Salu2