Загрузка данных


int latchPin = 9;       // ST_CP
int clockPin = 12;      // SH_CP
int dataPin  = 11;      // DS

// Разряды индикатора
int g_registerArray[4] = {2, 3, 4, 5};

// Цифры 0-9
byte g_digits[10] = {
  B00111111, // 0
  B00000110, // 1
  B01011011, // 2
  B01001111, // 3
  B01100110, // 4
  B01101101, // 5
  B01111101, // 6
  B00000111, // 7
  B01111111, // 8
  B01101111  // 9
};

// Пустой символ
#define EMPTY B00000000

// Пользовательские символы
//   A
//  F B
//   G
//  E C
//   D

byte H = B01110110;
byte E = B01111001;
byte L = B00111000;
byte P = B01110011;

// --------------------------------------------------
// Вывод одного символа на выбранный разряд
// --------------------------------------------------
void showDigit(byte symbol, int digit)
{
  // Выключаем все разряды
  for (int i = 0; i < 4; i++)
    digitalWrite(g_registerArray[i], HIGH);

  // Передаём сегменты
  digitalWrite(latchPin, LOW);

  shiftOut(dataPin, clockPin, MSBFIRST, symbol);

  digitalWrite(latchPin, HIGH);

  // Включаем нужный разряд
  digitalWrite(g_registerArray[digit], LOW);

  // Очень короткая задержка
  delayMicroseconds(1500);

  // Выключаем разряд
  digitalWrite(g_registerArray[digit], HIGH);
}


// --------------------------------------------------
// Одновременное отображение четырёх символов
// --------------------------------------------------
void display4(byte a, byte b, byte c, byte d, int time)
{
  unsigned long start = millis();

  while (millis() - start < time)
  {
    showDigit(a, 0);
    showDigit(b, 1);
    showDigit(c, 2);
    showDigit(d, 3);
  }
}


// --------------------------------------------------
// SETUP
// --------------------------------------------------
void setup()
{
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);

  // Пины разрядов
  for (int i = 0; i < 4; i++)
  {
    pinMode(g_registerArray[i], OUTPUT);

    // Разряды выключены
    digitalWrite(g_registerArray[i], HIGH);
  }
}


// --------------------------------------------------
// LOOP
// --------------------------------------------------
void loop()
{
  // -----------------------------------------------
  // 1. Все четыре цифры одновременно
  // -----------------------------------------------

  // 0 1 2 3
  display4(
    g_digits[0],
    g_digits[1],
    g_digits[2],
    g_digits[3],
    2000
  );


  // 4 5 6 7
  display4(
    g_digits[4],
    g_digits[5],
    g_digits[6],
    g_digits[7],
    2000
  );


  // 8 9 0 1
  display4(
    g_digits[8],
    g_digits[9],
    g_digits[0],
    g_digits[1],
    2000
  );


  // -----------------------------------------------
  // 2. МОЯ ДОБАВКА
  // -----------------------------------------------

  // H E L P
  display4(
    H,
    E,
    L,
    P,
    3000
  );


  // -----------------------------------------------
  // 3. Эффект очистки
  // -----------------------------------------------

  display4(
    EMPTY,
    EMPTY,
    EMPTY,
    EMPTY,
    500
  );
}