The 7-segment display always shows 00

I connected 2 digit 7-segment display to Arduino. In the end I observe on the screen 00, although in general the program works, the data in the methods come. Debugged using the serial port.
The main code is called in the timer

 ISR(TIMER1_OVF_vect)   // Timer1 interrupt service routine (ISR)
{
  mySeg.isrHandler();
}

The file with the main code looks like this

#include "7segments.h"

Segments::Segments(int digitsCount, int segmentPins[], int digitPins[]) {
  this->digitsCount = digitsCount;
  this->segmentPins = segmentPins;
  this->digitPins = digitPins;
  init();
}

void Segments::init() {
  #define SegA   A2
  #define SegB   A3
  #define SegC   A4
  #define SegD   A5
  #define SegE   A6
  #define SegF   A7
  #define SegG   A8
  // common pins of the four digits definitions
  #define Dig1   A0
  #define Dig2   A1
  #define Dig3   A9
  #define Dig4   A10

  for(int i=0; i < 8; i++) {
    pinMode(segmentPins[i], OUTPUT); // set segment and DP pins to output
  }
  for(int i=0; i < digitsCount; i++) {
    pinMode(digitPins[i], OUTPUT);
  }

  displayOff();  // turn off the display

  // Timer1 module overflow interrupt configuration
  TCCR1A = 0;
  TCCR1B = 1;  // enable Timer1 with prescaler = 1 ( 16 ticks each 1 µs)
  TCNT1  = 0;  // set Timer1 preload value to 0 (reset)
  TIMSK1 = 1;  // enable Timer1 overflow interrupt
}

void Segments::isrHandler()
{
  displayOff();  // turn off the display
  int value = getCounter();

  switch (current_digit)
  {
    case 1:
      disp(value / 1000);   // prepare to display digit 1 (most left)

      if (is_common_cathod == 1) {
        digitalWrite(Dig1, HIGH);  // turn on digit 1
      }
      else {
        digitalWrite(Dig1, LOW);  // turn on digit 1
      }
      break;

    case 2:
      disp( (value / 100) % 10);   // prepare to display digit 2

      if (is_common_cathod == 1) {
        digitalWrite(Dig2, HIGH);  // turn on digit 2
      }
      else {
        digitalWrite(Dig2, LOW);  // turn on digit 2
      }
      break;

    case 3:
      disp( (value / 10) % 10);   // prepare to display digit 3

      if (is_common_cathod == 1) {
        digitalWrite(Dig3, HIGH);  // turn on digit 3
      }
      else {
        digitalWrite(Dig3, LOW);  // turn on digit 3
      }
      break;

    case 4:
      disp(value % 10);   // prepare to display digit 4 (most right)

      if (is_common_cathod == 1) {
        digitalWrite(Dig4, HIGH);  // turn on digit 4
      }
      else {
        digitalWrite(Dig4, LOW);  // turn on digit 4
      }
  }

  current_digit = (current_digit % 4) + 1;
}

void Segments::displayOff()
{
  digitalWrite(Dig1, LOW);
  digitalWrite(Dig2, LOW);
  digitalWrite(Dig3, LOW);
  digitalWrite(Dig4, LOW);
}

int Segments::getCounter() {
  if (millis() - this->lastRefreshTime >= REFRESH_INTERVAL) {
    if (this->counter == LAST_COUNTER_VALUE) {
      this->counterDirection = 0;
    }
    if (this->counter == 0) {
      this->counterDirection = 1;
    }
    if (this->counterDirection == 1) {
      this->counter++;
    }
    else {
      this->counter--;
    }

    this->lastRefreshTime += REFRESH_INTERVAL;
  }

  return this->counter;
}

void Segments::disp(byte number)
{
  switch (number)
  {
    case 0:  // print 0
      digitalWrite(SegA, HIGH);
      digitalWrite(SegB, HIGH);
      digitalWrite(SegC, HIGH);
      digitalWrite(SegD, HIGH);
      digitalWrite(SegE, HIGH);
      digitalWrite(SegF, HIGH);
      digitalWrite(SegG, LOW);

      break;

    case 1:  // print 1
      digitalWrite(SegA, LOW);
      digitalWrite(SegB, HIGH);
      digitalWrite(SegC, HIGH);
      digitalWrite(SegD, LOW);
      digitalWrite(SegE, LOW);
      digitalWrite(SegF, LOW);
      digitalWrite(SegG, LOW);

      break;

    case 2:  // print 2
      digitalWrite(SegA, HIGH);
      digitalWrite(SegB, HIGH);
      digitalWrite(SegC, LOW);
      digitalWrite(SegD, HIGH);
      digitalWrite(SegE, HIGH);
      digitalWrite(SegF, LOW);
      digitalWrite(SegG, HIGH);

      break;

    case 3:  // print 3
      digitalWrite(SegA, HIGH);
      digitalWrite(SegB, HIGH);
      digitalWrite(SegC, HIGH);
      digitalWrite(SegD, HIGH);
      digitalWrite(SegE, LOW);
      digitalWrite(SegF, LOW);
      digitalWrite(SegG, HIGH);

      break;

case 4:  // print 4
      digitalWrite(SegA, LOW);
      digitalWrite(SegB, HIGH);
      digitalWrite(SegC, HIGH);
      digitalWrite(SegD, LOW);
      digitalWrite(SegE, LOW);
      digitalWrite(SegF, HIGH);
      digitalWrite(SegG, HIGH);

      break;

    case 5:  // print 5
      digitalWrite(SegA, HIGH);
      digitalWrite(SegB, LOW);
      digitalWrite(SegC, HIGH);
      digitalWrite(SegD, HIGH);
      digitalWrite(SegE, LOW);
      digitalWrite(SegF, HIGH);
      digitalWrite(SegG, HIGH);

      break;

    case 6:  // print 6
      digitalWrite(SegA, HIGH);
      digitalWrite(SegB, LOW);
      digitalWrite(SegC, HIGH);
      digitalWrite(SegD, HIGH);
      digitalWrite(SegE, HIGH);
      digitalWrite(SegF, HIGH);
      digitalWrite(SegG, HIGH);

      break;

    case 7:  // print 7
      digitalWrite(SegA, HIGH);
      digitalWrite(SegB, HIGH);
      digitalWrite(SegC, HIGH);
      digitalWrite(SegD, LOW);
      digitalWrite(SegE, LOW);
      digitalWrite(SegF, LOW);
      digitalWrite(SegG, LOW);

      break;

    case 8:  // print 8
      digitalWrite(SegA, HIGH);
      digitalWrite(SegB, HIGH);
      digitalWrite(SegC, HIGH);
      digitalWrite(SegD, HIGH);
      digitalWrite(SegE, HIGH);
      digitalWrite(SegF, HIGH);
      digitalWrite(SegG, HIGH);

      break;

    case 9:  // print 9
      digitalWrite(SegA, HIGH);
      digitalWrite(SegB, HIGH);
      digitalWrite(SegC, HIGH);
      digitalWrite(SegD, HIGH);
      digitalWrite(SegE, LOW);
      digitalWrite(SegF, HIGH);
      digitalWrite(SegG, HIGH);
  }
}

Could you please advise me why the screen always shows 00, what did I miss when writing the program?

Are these defined in the header file?

Which Arduino you are using -- MEGA? What is the source of your data (0x00 - 0xFF) that you want to show on the display unit?

If you are using Arduino IDE, please post complete sketch showing setup() and loop() functions.

Yes, they are defined in the header file.

I'm using an Arduino Mega. I want to display a counter from 0 to 100


    case 4:
      disp(value % 10);   // prepare to display digit 4 (most right)

      if (is_common_cathod == 1) {
        digitalWrite(Dig4, HIGH);  // turn on digit 4
      }
      else {
        digitalWrite(Dig4, LOW);  // turn on digit 4
      }
  }

  • It is time for a programming break; :roll_eyes: