Issue with 4 digits 7 segment ( it keeps showing the digits values one by one theres a delay between all of them)

int C = 10;
int o = 11;
const int numeral[12] = {
 //ABCDEFG /dp
 B11111100, // 0
 B01100000, // 1
 B11011010, // 2
 B11110010, // 3
 B01100110, // 4
 B10110110, // 5
 B00111110, // 6
 B11100000, // 7
 B11111110, // 8
 B11100110, // 9
 B10011100, // C 
 B11000110, // o
 };
const int inPin = 0; // analog pin
 // pins for decimal point and each segment
// dp,G, F, E, D, C, B, A
const int segmentPins[] = { 9,8,7,6,5,4,3,2}; 
const int nbrDigits= 4;
//dig 1 2 3 4
const int digitPins[nbrDigits] = { 13,12,11,10};
void setup(){
  Serial.begin (9600);
 for(int i=0; i < 8; i++)
 pinMode(segmentPins[i], OUTPUT); // set segment and DP pins to output
 for(int i=0; i < nbrDigits; i++){
 pinMode(digitPins[i], OUTPUT); //HIGH disables digit, LOW enables digit 
 digitalWrite (digitPins[i], HIGH);  //Digit disabled by default
 }
}

void loop()

{
  
 int value = analogRead (inPin);
int millivolts = (value / 1023.0) * 5000;
float celsius = millivolts * 0.1 - 50; // sensor output is 10mV per degree Celsius
Serial.println (millivolts);
Serial.println (celsius);
delay (2000);
 showNumber(celsius);
}
void showNumber( int number)
{
  showDigit (C, nbrDigits - 1);
  showDigit (o, nbrDigits - 2);
  
 // showDigit (C, nbrDigits - 1);
 if(number == 0)
 showDigit( 0, nbrDigits-1) ; 
 else
 {
 
 for( int digit = nbrDigits-3; digit >= 0; digit--)
 {
 if(number > 0)
 {
 showDigit( number % 10, digit) ;
 number = number / 10;
 }
 }
 }
}

void showDigit( int number, int digit)
 // Displays given number on a 7-segment display at the given digit position
{
 digitalWrite( digitPins[digit], LOW );
 for(int segment = 1; segment < 8; segment++)
 {
 boolean isBitSet = bitRead(numeral[number], segment);
 
 //isBitSet = ! isBitSet; 
 digitalWrite( segmentPins[segment], isBitSet);
 }
delay(300);
 
 digitalWrite( digitPins[digit],HIGH);
  //delay(1000);

}

https://www.tinkercad.com/things/5TUmbi5Z2Gg-tremendous-esboo-duup/editel?sharecode=Zuv0iIA3nR5KKPwUxWDiyDL-MtWPrb2iuPpmt_0bVmg

A delay you say? Well, you told it to wait 300ms with each digit it puts there.

Please open your code back up in the IDE and do an auto-format. It's so much easier to read and debug code when the blocks line up nice and neat and you can see what's nested where without having to count braces.

See if this code helps your project.
As I don't know which sensor you used I used a potentiometer to simulate a temperature sensor.
Then modify the temperature calculation in the "loop()" to suit your sensor.

Simulated in: " SevenSeg - Wokwi ESP32, STM32, Arduino Simulator "

int C = 10;
int o = 11;
const int numeral[12] = {
  //ABCDEFG /dp
  //2345678  9
  B11111100, // 0
  B01100000, // 1
  B11011010, // 2
  B11110010, // 3
  B01100110, // 4
  B10110110, // 5
  B00111110, // 6
  B11100000, // 7
  B11111110, // 8
  B11100110, // 9
  B10011100, // C
  B11000110, // o
};
const int inPin = 0; // analog pin
// pins for decimal point and each segment
// dp,G, F, E, D, C, B, A
const int segmentPins[] = { 9, 8, 7, 6, 5, 4, 3, 2};
const int nbrDigits = 4;
//dig 1 2 3 4
const int digitPins[nbrDigits] = { 13, 12, 11, 10};
//--------------------------------------------------------------------
void setup() {
  Serial.begin (9600);
  for (int i = 0; i < 8; i++) {
      pinMode(segmentPins[i], OUTPUT); // set segment and DP pins to output
    }
  for (int i = 0; i < nbrDigits; i++) {
    pinMode(digitPins[i], OUTPUT); //HIGH disables digit, LOW enables digit
    digitalWrite (digitPins[i], HIGH);  //Digit disabled by default
  }
}
//--------------------------------------------------------------------
void loop()
{
  int value = analogRead (inPin);
  //int millivolts = (value / 1023.0) * 5000;
  //float celsius = millivolts * 0.1 - 50; // sensor output is 10mV per degree Celsius
  float celsius = map(value, 0, 1023, 0, 60);
  showNumber(celsius);
}
//--------------------------------------------------------------------
void showNumber( int number)
{
  //Serial.println(number);
  showDigit (C, nbrDigits - 1);
  showDigit (o, nbrDigits - 2);
  if (number == 0)
    showDigit( 0, nbrDigits - 3) ;
   else
    {
     for ( int digit = nbrDigits - 3; digit >= 0; digit--)
     {
       if (number > 0)
       {
         showDigit( number % 10, digit) ;
         number = number / 10;
       }
     }
    }
}
//--------------------------------------------------------------------
void showDigit( int number, int digit)
// Displays given number on a 7-segment display at the given digit position
{
  for(int i = 0; i < 4; i++)
  {
    digitalWrite( digitPins[i], LOW );
  }
  for (int segment = 0; segment < 8; segment++)
  {
    boolean isBitSet = bitRead(numeral[number], segment);
    isBitSet = ! isBitSet;
    digitalWrite( segmentPins[segment], isBitSet);
  }
  digitalWrite( digitPins[digit], HIGH);
}

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