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
);
}