#define FIRST_SEGMENT_PIN 2
#define SEGMENT_COUNT 8
// Всего цифр 10, поэтому в массиве 10 чисел.
byte numberSegments[7] = {B00000110, B00110001, B00000110, B01101111, B00111111, B01100110, B00000000};
byte flag = 0;
void setup() {
Serial.begin(9600);
pinMode(10, INPUT);
for (int i = 0; i < SEGMENT_COUNT; ++i)
pinMode(i + FIRST_SEGMENT_PIN, OUTPUT);
}
void loop() {
if (digitalRead(10) == 1) {
flag = !flag;
}
// определяем число, которое следует отобразить.
// Пусть им будет номер текущей секунды, зацикленный на десятке
int number = (millis() / 1000) % 7;
if (flag == 0) {
// получаем код из массива, в котором содержится полученная цифра
int mask = numberSegments[number];
// для каждого из 7 сегментов индикатора
for (int i = 0; i < SEGMENT_COUNT; ++i) {
// определяем: должен ли он быть включён.
boolean enableSegment = bitRead(mask, i);
// включаем/выключаем сегмент на основе полученного значения
digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment);
}
}
if (flag == 1) {
// получаем код из массива, в котором содержится полученная цифра
int mask = numberSegments[6-number];
// для каждого из 7 сегментов индикатора
for (int i = 0; i < SEGMENT_COUNT; ++i) {
// определяем: должен ли он быть включён.
boolean enableSegment = bitRead(mask, i);
// включаем/выключаем сегмент на основе полученного значения
digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment);
}
}
Serial.println(flag);
}