Display de 7 segmentos 4 dígitos

Muy buenas.

Tengo un proyecto para hacer un dado en el que puedo seleccionar el número de caras y sacar el resultado, generado mediante la función random, por la pantalla del 7 segmentos 4 dígitos y la librería SevSeg.

Consigo que genere correctamente los valores pero al sacarlos por el display los saca dígito a dígito y no el número completo de una tirada, excepto en los dados de 6 y 4 caras, claro.

No es un problema de hardware, puesto que cuando hago que salga un valor concreto lo hace perfectamente, pero al volcar el valor de una variable lo hace dígito a dígito.

Os dejo unas el código, a ver si podéis ayudarme a detectar el error y corregirlo.

Muchas gracias.

#define PULSADOR4 A1//definimos el elemento pulsador4
#define PULSADOR6 A2//definimos el elemento pulsador6
#define PULSADOR20 A3//definimos el elemento pulsador20
#define PULSADOR100 A4//definimos el elemento pulsador100
#include "SevSeg.h"
SevSeg sevseg; 

void setup(){
  pinMode(PULSADOR4, INPUT);//configuramos el pulsador4 como input
  pinMode(PULSADOR6, INPUT);//configuramos el pulsador4 como input
  pinMode(PULSADOR20, INPUT);//configuramos el pulsador4 como input
  pinMode(PULSADOR100, INPUT);//configuramos el pulsador4 como input

  randomSeed(analogRead(A0));//fijamos el A0 como seed, para generar auténtica aleatoriedad a través de la indeterminación
  
  byte numDigits = 4;
  byte digitPins[] = {10, 11, 12, 13};
  byte segmentPins[] = {9, 2, 3, 5, 6, 8, 7, 4};
  bool resistorsOnSegments = true; 
  bool updateWithDelaysIn = true;
  byte hardwareConfig = COMMON_CATHODE; 
  
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
  sevseg.setBrightness(90);
  
}
void loop(){
  int valor4 = digitalRead(PULSADOR4);//Declaramos una variable entera asociada a la lectura del PULSADOR
   if (valor4 == HIGH)//Si el el pulsador devuelve HIGH disparamos el IF
  
    {
      int resultadoD4= random(1, 5);//Declaramos el resultado del dado como entero función random
    delay (200);
    sevseg.setNumber(resultadoD4);
        sevseg.refreshDisplay(); 
    
}
int valor6 = digitalRead(PULSADOR6);//Declaramos una variable entera asociada a la lectura del PULSADOR
    if (valor6 == HIGH)//Si el el pulsador devuelve HIGH disparamos el IF

    {
      int resultadoD6= random(1, 7);//Declaramos el resultado del dado como entero función random
      delay (200);
      sevseg.setNumber(resultadoD6);
      sevseg.refreshDisplay();
    }
    int valor20 = digitalRead(PULSADOR20);//Declaramos una variable entera asociada a la lectura del PULSADOR
   if (valor20 == HIGH)//Si el el pulsador devuelve HIGH disparamos el IF

    {
      int resultadoD20= random(1, 21);//Declaramos el resultado del dado como entero función random
      delay (200);
      sevseg.setNumber(resultadoD20);
      sevseg.refreshDisplay();
    }
int valor100 = digitalRead(PULSADOR100);//Declaramos una variable entera asociada a la lectura del PULSADOR
   if (valor100 == HIGH)//Si el el pulsador devuleve HIGH disparamos el IF

    {
      int resultadoD100= random(1, 101);//Declaramos el resultado del dado como entero función random
      delay (1000);
      sevseg.setNumber(resultadoD100);
      sevseg.refreshDisplay();
    }
}

¿Has prestado atención a la siguiente línea de los ejemplos de la librería?

sevseg.refreshDisplay(); // Must run repeatedly; don't use blocking code (ex: delay()) in the loop() function or this won't work right

Dice:
Debe ejecutarse repetidamente; No use código de bloqueo (por ejemplo, delay()) en la función loop() o esto no funcionará correctamente

Puede que no esté en todos ese comentario tan detallado pero en todos dice
// Must run repeatedly
o sea, Debe ejecutarse repetidamente.

Más allá del problema que pueden generar los delay(), debes poner

sevseg.refreshDisplay(); 

al final del loop() para que se ejecute continuamente y así refresque (y muestre) todos los dígitos.

Saludos

Solucionado, me estaba volviendo loco, muchísimas gracias.

Un saludo

Es que para no volverse loco hay que hacer bien los deberes. :wink:

De nada, me alegra que haya sido la solución.

Saludos

Porque dices eso? Solo debes mirar los ejemplos y comparar con lo que has hecho.
Todos los dias el 80% de las consultas son perfectamente evitables mirando los ejemplos.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.