#define A 2 //определение константы с номером пина для сегмента A
#define B 3 //определение константы с номером пина для сегмента B
#define C 5 //определение константы с номером пина для сегмента C
#define D 6 //определение константы с номером пина для сегмента D
#define E 7 //определение константы с номером пина для сегмента E
#define F 9 //определение константы с номером пина для сегмента F
#define G 8 //определение константы с номером пина для сегмента G
#define DP 4 //определение константы с номером пина для сегмента DP
int showDel = 1000; //время отображение цифры на индикаторе
int blCt = 2; //мигаем точкой между цифрами (0 - отключает эту функцию)
int blDel = 300; //время отображения точки на индикаторе
void (*pZro)(void) = &fZro; //определение указателя с записью адреса функции fZro
void (*pOne)(void) = &fOne; //определение указателя с записью адреса функции fOne
void (*pTwo)(void) = &fTwo; //определение указателя с записью адреса функции fTwo
void (*pThr)(void) = &fThr; //определение указателя с записью адреса функции fThr
void (*pFor)(void) = &fFor; //определение указателя с записью адреса функции fFor
void (*pFiv)(void) = &fFiv; //определение указателя с записью адреса функции fFiv
void (*pSix)(void) = &fSix; //определение указателя с записью адреса функции fSix
void (*pSvn)(void) = &fSvn; //определение указателя с записью адреса функции fSvn
void (*pEgt)(void) = &fEgt; //определение указателя с записью адреса функции fEgt
void (*pNne)(void) = &fNne; //определение указателя с записью адреса функции fNne
typedef void (* funcPtype) (); //определение типа данных для массива указателей
funcPtype funcArr[] = {pZro, pOne, pTwo, pThr, pFor, pFiv, pSix, pSvn, pEgt, pNne}; //массив указателей на функции
int funcsNm = sizeof(funcArr) / sizeof(funcPtype *); //определение длины массива funcArr
char *ledPins[] = {A,B,C,D,E,F,G,DP}; //массив переменных с номерами пинов
int ledPinsNm = sizeof(ledPins) / sizeof(char *); //определение длины массива ledPins
void setup() {
for (int i = 0; i < ledPinsNm; i++){ //запись режма OUTPUT для пинов индикатора
pinMode(ledPins[i], OUTPUT); //и начального уровня HIGH
digitalWrite(ledPins[i], HIGH); //при помощи перебора элементов массива ledPins
}
}
void loop() {
for (int f=0; f < funcsNm; f++){ //вывод символов на индикатор
funcArr[f](); //при помощи перебора массива указателей на функции funcArr
delay(showDel); //задержка отображения цифры на индикаторе
fDelay(blCt, blDel); //мигание точкой между цифрами
}
}
void fZro () { //функция вывода на индикатор символа "0"
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
digitalWrite(DP, HIGH);
}
void fOne () { //функция вывода на индикатор символа "1"
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
digitalWrite(DP, HIGH);
}
void fTwo () { //функция вывода на индикатор символа "2"
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
digitalWrite(DP, HIGH);
}
void fThr () { //функция вывода на индикатор символа "3"
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
digitalWrite(DP, HIGH);
}
void fFor () { //функция вывода на индикатор символа "4"
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(DP, HIGH);
}
void fFiv () { //функция вывода на индикатор символа "5"
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(DP, HIGH);
}
void fSix () { //функция вывода на индикатор символа "6"
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(DP, HIGH);
}
void fSvn () { //функция вывода на индикатор символа "7"
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
digitalWrite(DP, HIGH);
}
void fEgt () { //функция вывода на индикатор символа "8"
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(DP, HIGH);
}
void fNne () { //функция вывода на индикатор символа "9"
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(DP, HIGH);
}
void fDt () { //функция вывода на индикатор символа "Точка"
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
digitalWrite(DP, LOW);
}
void fClr () { //функция очистки индикатора
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
digitalWrite(DP, HIGH);
}
void fDelay (int bC, int bD) { //функция вывода точки между цифрами, получает аргументы: число повторов,
for (int i = 0; i < bC; i++){ //задержка вывода. Выполняется в цикле ограниченном числом повторов (bC)
fClr(); //вызов функции очистки индикатора
delay(bD); //задержка вывода пустого индикатора
fDt(); //вызов функции вывода точки
delay(bD); //задержка вывода точки
}
}