Problema sensor rfid y display 7 segmentos 8 digitos

Buenas, estoy haciendo mi proyecto de grado superior de mantenimiento electrónico y llevo más de 6 horas sin ser capaz de ver qué es lo que falla. El caso es que tengo 2 displays de 7 segmentos 4 dígitos cada uno y un sensor rfid-rc522, en los displays tienen que salir unos números en todo momento que van a ir cambiando a través de unos pulsadores que aun no he introducido en el código pero son sencillos. El caso es que implementando el sensor rfid, los displays dejan de funcionar, en vez de mostrar los 2 números, solo muestra un 4 en la última cifra y algunas interferencias en las otras. por separado funcionan perfectamente las 2 cosas, pero juntas no. Alguien podría decirme si ve donde puede estar el fallo? Muchas gracias.

Adjunto el código.

Proyecto_final.ino (11.1 KB)

Cuando tienes una rutina rápida como la que veo usas para los displays luego no puedes agregar cosas como ésta!!

            int pauseBetweenNotes = noteDuration * 1.30;
            delay(pauseBetweenNotes);  // <==== esto lo repites desde el primero que aparece hasta el final
            noTone(9);
            }
            delay(1000);    // <==== esto lo repites desde el primero que aparece hasta el final
            }
            }

Tu código es ineficiente pero como todo puede mejorarse, oor el uso de delay.
La solución es millis() y máquina de estados o timers.

Entiendo que la melodía tiene tiempos y pausas pero debes buscar un modo mas avanzado (los que te sugerí antes) de hacerlo.

Traducido no puedes detener el programa o tus digitos se congelaran como ahora lo hacen.

Si, esa tengo que depurarlo, pero sin pasar ningúna tarjeta rfid por el sensor no debería ejecutarse el void del rfid y aun así bloquea el display.

Moderador: No repitas lo que se lee arriba

La próxima intenta identar debidametne Porque no pueden usar la identación debida en los códigos.
Antes de subir un codigo usan CONTROL+T y quedará mejor organizado.

Realmente ver un código donde todo esta en una misma linea es difícil y tener que editarlo mas.

Bien, ahora sería de ayuda para responderte de donde has bajado la libreria RFID.

Coloca el link usando etiquetas. Si no sabes lee las normas del foro.
Tu código luce bien pero no puedo afirmarlo hasta ver que hacer rfid.iscard()

no se si la descargué de aqui, pero esta es la librería que tengo
rfid-master

Estoy planteandome como solución eficaz, aunque no eficiente, conectarle un arduino nano solo para leer el rfid y enviar los datos cuando lea algo.

Por cierto, muchas gracias por enseñarme el comando de ctrl+t, no lo conocía.

Vamos a hacer algo para establecer la responsabilidad de rfid.iscard()

mide con millis() el tiempo que transcurre en esa función

Este es tu loop

void loop() 
{   
    CalculaDigitoso(objetivo) ;
    CalculaDigitoss(suma) ;
    leerpelota();
}

agrega esto como global

// como global
unsigned long start;

void setup(){
   // todo igual y al final en la ultima linea



   start = millis();
}

void loop() 
{  
    CalculaDigitoso(objetivo) ;
    midoTiempo();
    CalculaDigitoss(suma) ;
    midoTiempo();
    leerpelota();
    midoTiempo();
}

void  midoTiempo(){
    char buffer[20];
    sprintf(buffer, "Tiempo rutina = %d mseg", millis()-start);
    Serial.println(buffer);
    start = millis(); // preparado para siguiente
}

y luego nos cuentas los tiempos de cada rutina

Al final hice lo de poner el arduino nano conectado al mega. El martes me voy a Polonia a hacer las prácticas y tenía que dejarlo listo antes de marchar, a la vuelta tengo que presentarlo. Te agradezco la ayuda, pero no puedo usar el código ese porque no lo entiendo muy bien y tengo que defenderlo cuando presente el proyecto. Al final he logrado que funcione, tal vez no muy bien, como el tema de los pulsadores, pero funciona y creop que será suficiente. Subo los códigos por si alguien quiere echarle un ojo o pueda servirle de algo.

Moderador: No repitas lo que se lee arriba

nano.ino (7.99 KB)

mega.ino (6.2 KB)