#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 aDisp[12][8] = {
{0,0,0,0,0,0,1,1}, //кодирование символа "0"
{1,0,0,1,1,1,1,1}, //кодирование символа "1"
{0,0,1,0,0,1,0,1}, //кодирование символа "2"
{0,0,0,0,1,1,0,1}, //кодирование символа "3"
{1,0,0,1,1,0,0,1}, //кодирование символа "4"
{0,1,0,0,1,0,0,1}, //кодирование символа "5"
{0,1,0,0,0,0,0,1}, //кодирование символа "6"
{0,0,0,1,1,1,1,1}, //кодирование символа "7"
{0,0,0,0,0,0,0,1}, //кодирование символа "8"
{0,0,0,0,1,0,0,1}, //кодирование символа "9"
{1,1,1,1,1,1,1,0}, //кодирование символа "."
{1,1,1,1,1,1,1,1}, //очистка индикатора (все сегменты погашены)
};
int aRow = 12;
int aCol = 8;
int blCt = 3;
int blDel = 300;
int showDel = 1000;
void (*pZro)(void) = &fZro;
void (*pOne)(void) = &fOne;
void (*pTwo)(void) = &fTwo;
void (*pThr)(void) = &fThr;
void (*pFor)(void) = &fFor;
void (*pFiv)(void) = &fFiv;
void (*pSix)(void) = &fSix;
void (*pSvn)(void) = &fSvn;
void (*pEgt)(void) = &fEgt;
void (*pNne)(void) = &fNne;
void (*pClr)(void) = &fClr;
typedef void (* funcPtype) ();
funcPtype funcArr[] = {pZro, pOne, pTwo, pThr, pFor, pFiv, pSix, pSvn, pEgt, pNne, pClr};
int funcsNm = sizeof(funcArr) / sizeof(funcPtype *);
int del_t = 1000; //переменная с величиной задержки между выводами цифр
char *ledPins[] = {A,B,C,D,E,F,G,DP};
int ledPinsNm = sizeof(ledPins) / sizeof(char *);
void fDelay (int bC, int bD) {
for (int i = 0; i < bC; i++){
fClr();
delay(bD);
fDt();
delay(bD);
}
}
void setup() {
for (int i=0; i < ledPinsNm; i++){
pinMode(ledPins[i], OUTPUT);
}
Serial.begin(9600);
Serial.println(ledPinsNm);
Serial.println(funcsNm);
}
void loop() {
for (int f=0; f < funcsNm; f++){
funcArr[f]();
delay(showDel);
fDelay(blCt, blDel);
}
Serial.println("Второй вариант");
Serial.println();
fDisp(aDisp, aRow, aCol, showDel);
//delay(1000); //задержка выполнения на величину 2 секунды
}
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 fDisp (int arr[][8], int aR, int aC, int sD) {
for (int i=0; i < aR; i++){
digitalWrite(A, arr[i][0]);
digitalWrite(B, arr[i][1]);
digitalWrite(C, arr[i][2]);
digitalWrite(D, arr[i][3]);
digitalWrite(E, arr[i][4]);
digitalWrite(F, arr[i][5]);
digitalWrite(G, arr[i][6]);
digitalWrite(DP, arr[i][7]);
delay(sD);
}
}
void fPause (int arr[][8], int aR, int aC, int bC, int bD) {
for (int i=0; i < bC; i++) {
fCls(aDisp, aRow, aCol);
delay(bD);
fDot(aDisp, aRow, aCol);
delay(bD);
}
}
void fCls (int arr[][8], int aRow, int aCol) {
digitalWrite(A, arr[12][0]);
digitalWrite(B, arr[12][1]);
digitalWrite(C, arr[12][2]);
digitalWrite(D, arr[12][3]);
digitalWrite(E, arr[12][4]);
digitalWrite(F, arr[12][5]);
digitalWrite(G, arr[12][6]);
digitalWrite(DP, arr[12][7]);
}
void fDot (int arr[][8], int aRow, int aCol) {
digitalWrite(A, arr[11][0]);
digitalWrite(B, arr[11][1]);
digitalWrite(C, arr[11][2]);
digitalWrite(D, arr[11][3]);
digitalWrite(E, arr[11][4]);
digitalWrite(F, arr[11][5]);
digitalWrite(G, arr[11][6]);
digitalWrite(DP, arr[11][7]);
}