// Подставим определения для пинов индикатора (по схеме)
#define Seg_A 2
#define Seg_B 3
#define Seg_C 4
#define Seg_D 5
#define Seg_E 6
#define Seg_F 8
#define Seg_G 7
// Массив изображений цифр от 0 до 9, что не горит - равно 0
int Number[10][8] = {
{Seg_A,Seg_B,Seg_C,Seg_D,Seg_E,Seg_F,0}, //цифра 0
{0,Seg_B,Seg_C,0,0,0,0}, //цифра 1
{Seg_A,Seg_B,0,Seg_D,Seg_E,0,Seg_G}, // ну и так далее
{Seg_A,Seg_B,Seg_C,Seg_D,0,0,Seg_G},
{0,Seg_B,Seg_C,0,0,Seg_F,Seg_G},
{Seg_A,0,Seg_C,Seg_D,0,Seg_F,Seg_G},
{Seg_A,0,Seg_C,Seg_D,Seg_E,Seg_F,Seg_G},
{Seg_A,Seg_B,Seg_C,0,0,0,0},
{Seg_A,Seg_B,Seg_C,Seg_D,Seg_E,Seg_F,Seg_G},
{Seg_A,Seg_B,Seg_C,Seg_D,0,Seg_F,Seg_G},
};
void setup() {
// put your setup code here, to run once:
// все пины для индикатора - выходы
pinMode(Seg_A, OUTPUT);
pinMode(Seg_B, OUTPUT);
pinMode(Seg_C, OUTPUT);
pinMode(Seg_D, OUTPUT);
pinMode(Seg_E, OUTPUT);
pinMode(Seg_F, OUTPUT);
pinMode(Seg_G, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
// перечисление цифр на индикаторе от 0 до 9
for (int count = 0; count <10; count++)
{
// функция "показать цифру" в течение 0,5с и потом погасить
Number_Take(count,500);
// задержка 0,5с - цифры переключаются мигая
delay(500);
}
}
// функция, аргументы - номер цифры из массива, величина задержки
void Number_Take(int num, int del)
{
for(int i = 0; i<8; i++)
{
// зажечь соответствующие цифре сегменты, если 0 - пропустить
int a = Number[num][i];
if (a != 0)
{
digitalWrite(a, HIGH);
}
}
// необходимая задержка
delay(del);
// также погасить все сегменты
for(int i = 0; i<10; i++)
{
int a = Number[num][i];
if (a != 0)
{
digitalWrite(a, LOW);
}
}
}