DHT11 -> mostrar temp y hum en display de 7 seg - 4 caracteres

Hola

Voy a montar un prototipo testeado y funcionando en su ubicación, pero necesito que indique la humedad en un display. Tengo un por aquí de cuatro caracteres y 7 segmentos.

He hecho el siguiente cableado:

Este código funciona a la perfección:

// Include library found at 
// https://docs.google.com/file/d/0Bwrp4uluZCpNdE9oWTY0M3BncTA/edit 
#include "SevSeg.h"
 
//Create an instance of the object.
SevSeg sevseg;
 
void setup() {
  // Set up pins
  // Arguments : 
  // First 0 is for common cathode
  // Following 0 to 11 numbers are for Arduino pins
  // connected to display in the following order
  // 1,2,3,4,A,B,C,D,E,F,G,DP
  sevseg.Begin(0,0,1,2,3,4,5,6,7,8,9,10,11);
}
 
void loop() {   
  // Prepare number to display, and dot position 
  // (0 to 3, other number means no dot)  
  sevseg.NewNum(1234,0);
  // Display number
  sevseg.PrintOutput();  
  // To maintain display with this wiring, 
  // we are forced to loop over those commands rapidly
}

Este es el código que tengo:

int sensor = 13; // PIN donde va conectado el sensor de temperatura y humedad DHT11
int rele = 12; // PIN donde va conectado el rele
int ON = LOW; // Variable para activar el rele (HIGH = apagado / LOW = encendido) ?Hago algo mal?
int OFF = HIGH; // Variable para desactivar el rele
//int LEDOK = 6; // LED verde - todo OK // Eliminado para poder conectar el display
//int LEDERR = 7; // LED rojo - ERROR // Eliminado para poder conectar el display

#include "SevSeg.h" // Carga la libreria para el display
#include <DHT.h> // Carga la libreria del sensor
#define DHTPIN sensor // Define el pin 4 para el sensor
#define DHTTYPE DHT11   // Define el tipo de sensor a DHT 11 

SevSeg sevseg;

DHT dht(DHTPIN, DHTTYPE);
//Create an instance of the object.




int hmax = 70; // Humedad maxima a la que se activa el extractor
int tol = 5 ; // Rango de seguridad para evitar que se encienda de manera intermitente el ventilador

void setup() {
  // put your setup code here, to run once:
  // Serial.begin(9600); // Activamos el monitor serie a 9600 bauds // Desactivado - da problemas con el display
  pinMode(rele, OUTPUT); // Activamos el PIN rele como salida para el rele

  dht.begin(); // Iniciamos el sensor de humedad

  // Set up pins
  // Arguments :
  // First 0 is for common cathode
  // Following 0 to 11 numbers are for Arduino pins
  // connected to display in the following order
  // 1,2,3,4,A,B,C,D,E,F,G,DP
  sevseg.Begin(0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 21);

}

void loop() {
  // Aqui se leen los datos del sensor y se envian por el monitor de serie

  int h = dht.readHumidity();
  int t = dht.readTemperature();

  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h) || h == 0 && t == 0) {
    Serial.println("Failed to read from DHT");
    //digitalWrite(LEDERR, HIGH); // Eliminado para poder conectar el display
  } else {
    // digitalWrite(LEDOK, HIGH); // Eliminado para poder conectar el display
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.println(" *C");
    delay(2000);

  }

  // Empieza la parte del rele que controla el ventilador
  if (h > hmax) {
    digitalWrite(rele, ON);

  }
  if (h < hmax - tol) {
    digitalWrite(rele, OFF);
  }

  // Prepare number to display, and dot position
  // (0 to 3, other number means no dot)
  int num;
  char texto = h + t;
  num = atoi("texto");
  sevseg.NewNum(num, 2);
  // Display number
  sevseg.PrintOutput();
  // To maintain display with this wiring,
  // we are forced to loop over those commands rapidly





}

Y tengo dos problemas:
-Con el sensor desconectado, si activo el puerto serie para leer los datos en el ordenador, el display no muestra los dígitos correctamente. Si comento la línea del serial.Begin todo OK, salvo que cada dos segundos aprox, hace un parpadeo
-Si conecto el sensor, el parpadeo es a la inversa. El display está apagado y cada dos segundos aprox, muestra fugaazmente el número.

¿Qué puede ser?

Gracias
Un saludo

Pines 0 y 1 no puedes usarlos para el display si usas el puerto serie.

OK, gracias.
Era una de novato, por lo que veo, je je je.
¿Y la segunda parte, qué es debido? Si comento la parte del puerto serie me sigue parpadeando. Aunque se ve correctamente el número, no entiendo por qué.

Todo esta relacionado con lo mismo. Si usas los pines 0 y 1 usando la salida Serie te va a comprometer el funcionameinto del panel de LED

NOTA: Llegué a los 4000 msgs!!!

OK, muchas gracias por la info. Como no tengo más salidas, y era para una prueba, no me quedó otro remedio. Así me vale. Disculpa la demora, pero no se me activan los avisos por defecto.

Los avisos creo que no funcionan.
Puedes usar pines en teoría solo analogicos(tmb son digitales) A0 a A5 si no los usas.

Ok. Pensé que solo eran para entradas. Bien esta saberlo, muchas gracias de nuevo!

Definelas en el setup como salidas, claro.

pinMode(A4, OUTPUT);
pinMode(A5, OUTPUT);

Otra cosa, porque no usas un decodificador de 7 segmentos SN7447 (anodo común) o un 7448 (catodo común). Usa solo 4 salidas BCD y exita los display, luego necesitas otros 4 para comandar los Led en el pin común a cada uno.


Este esquema muestra lo que te digo
Usa un deco 74HC48 porque los transistores BC547 cierran contra GND. Entonces usas 4 pines para el decodificador mas 4 pines para cada control del dígito.

Uy, eso creo que se me escapa. Pero gracias por la Info. Estoy haciendo pruebas con el material que me vino en el kit. Es de lo qe dispongo. Luego realmente el display no lo voy a montar. Solo era para las pruebas. Gracias de nuevo.

Entonces sigue como lo tenias cableado. Pense que era un proyecto que quedaría armado en algun sitio.
Por cierto no es tan diferente, es reducir todo a 8 pines. 4 para el decodificador que lo consigues en una tienda de electróncia y 4 para comandar los transistores o bien sin ellos directo con el arduino.

Ok, lo estudiare con mas tiempo. Tengo un 74hc595 , creo, lo he puesto de memoria...
De nuevo, gracias!

De todas formas 7 para los segmentos + 4 para cada display son 11 y tienes justamente de la 1 a la 13, exactamente 11 pines digitales.
O sea no tienes que hacer cambios para una prueba.