Problema en multiplexacion de display 7segmentos

Buenas a todos, les paso a comentar que estoy teniendo ciertos problemas a la hora de multiplexar 4 displays 7 segmentos y a su vez mostrar en una pantalla lcd 20x4 cierta informacion.
El proyecto consiste en tomar la hora de un RTC y la humadad + temperatura de un DHT22. mostrar estas en la pantalla al igual que la fecha(salida del rtc) y mostrar la hora en los displays.
EL PROBLEMA: Este se genera cuando agrego la funcion la cual hace que la pantalla LCD muestre los datos respectivos. Los 7seg comienzan a parpadear y a su vez a frenar durante medio segundo aprox. En cambio si saco esta sentencia todo parece funcionar perfecto. Espero que alguno pueda brindarme una respuesta lo antes posible ya que estoy AJUSTADISIMO con el tiempo (deberia entregarlo en dos dias)

aqui les dejo el video donde saco la funcion del LCD(funcionando bien): video youtube

aqui cuando esta el codigo completo(funcionando mal): video youtube

Aqui la foto del circuito que realice:

Aqui el codigo que uso:(la funcion que sacaria para que todo funcione bien es: "display20x4()")

/* Control de 2 dislpays de siete segmentos CC con arduino
 


Agradezco al usuario: SURBYTE por ayudarme con el codigo




 ######################    Circuito    ######################


Control de 2 dislpays de siete segmentos Catodo Comun con arduino


 Pin 2  ->  segmento  a     del dispaly
 Pin 3  ->  segmento  b    del dispaly
 Pin 4  ->  segmento  c    del dispaly
 Pin 5  ->  segmento  d    del dispaly
 Pin 6  ->  segmento  e    del dispaly
 Pin 7  ->  segmento  f     del dispaly
 Pin 8  ->  segmento  g    del dispaly

 Pin 9  ->  Transistor del display de  Hdecenas     ( NPN )
 Pin 10 ->  Transistor del display de  Hunidades    ( NPN )
 Pin 11  -> Transistor del display de  Mdecenas     ( NPN )
 Pin 12 ->  Transistor del display de  Munidades    ( NPN )

 ###################################################### */
#include <DHT.h>

#define DHTPIN 1
#define DHTTYPE DHT22 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#include <Wire.h>
#include "RTClib.h"
DHT dht(DHTPIN, DHTTYPE);
RTC_DS1307 rtc;

const byte segmento_a            = 2; 
const byte segmento_b            = 3; 
const byte segmento_c            = 4; 
const byte segmento_d            = 5; 
const byte segmento_e            = 6; 
const byte segmento_f            = 7; 
const byte segmento_g            = 8;
const byte segmento[7] = {2, 3, 4, 5, 6, 7, 8}; 

const byte transistor_hdecenas   = 9; 
const byte transistor_hunidades  = 10; 
const byte transistor_mdecenas   = 11; 
const byte transistor_munidades  = 12; 
const byte transistor[4] = {9, 10, 11, 12};

byte Digit[10][8] =
   { 
     { 1,1,1,1,1,1,0,0 },    // 0
     { 0,1,1,0,0,0,0,0 },    // 1
     { 1,1,0,1,1,0,1,0 },    // 2
     { 1,1,1,1,0,0,1,0 },    // 3
     { 0,1,1,0,0,1,1,0 },    // 4
     { 1,0,1,1,0,1,1,0 },    // 5
     { 1,0,1,1,1,1,1,0 },    // 6
     { 1,1,1,0,0,0,0,0 },    // 7
     { 1,1,1,1,1,1,1,0 },    // 8
     { 1,1,1,0,0,1,1,0 }     // 9
   };


  // con esta codificación los leds encienden correctamente
byte transistor_on = 5; 
byte hunidad; 
byte munidad; 
byte hdecena; 
byte mdecena;

void setup() {
  lcd.begin();
  lcd.backlight();
  dht.begin();
  rtc.begin();
  
  for (byte i=0; i<7; i++) {
        pinMode(segmento[i], OUTPUT);    
  }
  for (byte i=0; i<4; i++) {
        pinMode(transistor[i], OUTPUT);    
  }
  
  
}

 void loop() {
  
  Variableshora();  
  display20x4();
  
  
}

void CalculaDigitos( int Num) {
  int Digit0 = Num %10 ;
  int Digit1 = (Num % 100) / 10 ;
  int Digit2 = (Num % 1000) / 100 ;
  int Digit3 = Num  / 1000 ;

  Display(3 , Digit3);
  Display(2 , Digit2);
  Display(1 , Digit1);
  Display(0 , Digit0);
  

}

/* ##### Funcion tempozidador en la que unidades se incrementa cada segundo ##### */

void Variableshora() {
  DateTime now = rtc.now(); // Obtiene la fecha y hora del RTC
  static byte ant;

  hdecena = now.hour()/10;
  hunidad = now.hour()%10;
  mdecena = now.second()/10;
  munidad = now.second()%10;
  
  if (munidad != ant) {
      char buffer[10];
      sprintf(buffer, "%d%d:%d%d", hdecena, hunidad, mdecena, munidad);
      Serial.println(buffer);
  }
  ant = munidad;
  Display(0, hdecena);
  delay(5);
  Display(1, hunidad);
  delay(5);
  Display(2, mdecena);
  delay(5);
  Display(3, munidad); 
  delay(5);
} 

void Display(int pos, int N) {  
       digitalWrite(transistor_hdecenas ,LOW);        // Apaga todos los digitos
       digitalWrite(transistor_hunidades,LOW);
       digitalWrite(transistor_mdecenas ,LOW);
       digitalWrite(transistor_munidades,LOW);
 
      for (int i= 0 ; i<8 ; i++)    // Esto no cambia de la session anterior
            digitalWrite(i+2 , Digit[N][i]) ;

      digitalWrite(transistor[pos], HIGH);      // Enciende el digito pos
  }
  
  
void display20x4(){
 DateTime now = rtc.now(); // Obtiene la fecha y hora del RTC
 int h = dht.readHumidity();
 int t = dht.readTemperature();
  
 lcd.setCursor(0,0);
 lcd.print("Temperatura "); 
 lcd.print(t); 
 lcd.setCursor(0,1);
 lcd.print("Humedad ");
 lcd.print(h);
 lcd.setCursor(0,2);
 lcd.print(now.day());
 lcd.print("/");
 lcd.print(now.month());
 lcd.print("/");
 lcd.print(now.year());
 lcd.setCursor(0,3);
 lcd.print("Temperatura");
  
 }

libraries.zip (27.5 KB)

Porque si tienes un hilo abierto Proyecto Reloj con este tema abres uno nuevo preguntando lo mismo? Hasta te pasé la librería para hacerlo!!

Vamos a seguir en tu proyecto porque esto es doble post.

Repite tu consulta en tu hilo.