// ===== Пины для сегментов =====
const int segmentPins[] = {2, 3, 4, 5, 6, 7, 8}; // A,B,C,D,E,F,G
// ===== COM индикаторы =====
const int tensPin = 9; // левый индикатор (десятки)
const int unitsPin = 10; // правый индикатор (единицы)
// ===== Таблица цифр 0-9 =====
// порядок сегментов: A,B,C,D,E,F,G
const byte digitTable[10][7] = {
{1,1,1,1,1,1,0}, // 0
{0,1,1,0,0,0,0}, // 1
{1,1,0,1,1,0,1}, // 2
{1,1,1,1,0,0,1}, // 3
{0,1,1,0,0,1,1}, // 4
{1,0,1,1,0,1,1}, // 5
{1,0,1,1,1,1,1}, // 6
{1,1,1,0,0,0,0}, // 7
{1,1,1,1,1,1,1}, // 8
{1,1,1,1,0,1,1} // 9
};
void setup() {
// Сегменты как OUTPUT
for(int i=0;i<7;i++){
pinMode(segmentPins[i], OUTPUT);
digitalWrite(segmentPins[i], LOW);
}
// COM как OUTPUT
pinMode(tensPin, OUTPUT);
pinMode(unitsPin, OUTPUT);
digitalWrite(tensPin, HIGH); // изначально выключены
digitalWrite(unitsPin, HIGH);
}
// ===== Включить цифру на индикаторе =====
void displayDigit(int digit, int commonPin){
digitalWrite(commonPin, LOW); // включаем индикатор
for(int i=0;i<7;i++){
digitalWrite(segmentPins[i], digitTable[digit][i] ? HIGH : LOW);
}
}
// ===== Выключить индикатор =====
void hideDigit(int commonPin){
digitalWrite(commonPin, HIGH); // выключаем индикатор
}
void loop() {
int count = 42; // любое число 0-99
int tens = count / 10;
int units = count % 10;
// ===== Мультиплексирование =====
// 1) Показываем единицы
displayDigit(units, unitsPin);
hideDigit(tensPin); // десятки выключены
delay(5); // держим 5 мс
// 2) Показываем десятки
displayDigit(tens, tensPin);
hideDigit(unitsPin); // единицы выключены
delay(5); // держим 5 мс
}