// ---------------- ПИН ТРАНЗИСТОРА ----------------
const int PIN_DIG1 = 19; // база PNP
// ---------------- ПИНЫ СВЕТОДИОДОВ ----------------
const int LED1 = 47; // A
const int LED2 = 48; // B
const int LED3 = 14; // C
const int LED4 = 13; // D
const int LED5 = 12; // E
const int LED6 = 11; // F
const int LED7 = 10; // G
// ---------------- ФУНКЦИИ ВКЛ/ВЫКЛ ----------------
// При общем аноде (PNP) диод горит, если катод = LOW
void turnOn(int pin) {
digitalWrite(pin, LOW);
}
void turnOff(int pin) {
digitalWrite(pin, HIGH);
}
// Погасить все 7 диодов
void clearAll() {
turnOff(LED1);
turnOff(LED2);
turnOff(LED3);
turnOff(LED4);
turnOff(LED5);
turnOff(LED6);
turnOff(LED7);
}
// Показать одну цифру (0..9), включив нужные диоды
void showDigit(int digit) {
// Сначала гасим всё, чтобы не было наложения
clearAll();
switch (digit) {
case 0:
// (1,2,3,4,5,6)
turnOn(LED1);
turnOn(LED2);
turnOn(LED3);
turnOn(LED4);
turnOn(LED5);
turnOn(LED6);
break;
case 1:
// (4,5)
turnOn(LED4);
turnOn(LED5);
break;
case 2:
// (6,5,7,2,3)
turnOn(LED6);
turnOn(LED5);
turnOn(LED7);
turnOn(LED2);
turnOn(LED3);
break;
case 3:
// (6,5,7,4,3)
turnOn(LED6);
turnOn(LED5);
turnOn(LED7);
turnOn(LED4);
turnOn(LED3);
break;
case 4:
// (1,7,4,5)
turnOn(LED1);
turnOn(LED7);
turnOn(LED4);
turnOn(LED5);
break;
case 5:
// (1,6,7,4,3)
turnOn(LED1);
turnOn(LED6);
turnOn(LED7);
turnOn(LED4);
turnOn(LED3);
break;
case 6:
// (1,6,7,2,3,4)
turnOn(LED1);
turnOn(LED6);
turnOn(LED7);
turnOn(LED2);
turnOn(LED3);
turnOn(LED4);
break;
case 7:
// (1,2,4,5)
turnOn(LED1);
turnOn(LED2);
turnOn(LED4);
turnOn(LED5);
break;
case 8:
// (1,2,3,4,5,6,7)
turnOn(LED1);
turnOn(LED2);
turnOn(LED3);
turnOn(LED4);
turnOn(LED5);
turnOn(LED6);
turnOn(LED7);
break;
case 9:
// (1,2,4,5,6,7)
turnOn(LED1);
turnOn(LED2);
turnOn(LED4);
turnOn(LED5);
turnOn(LED6);
turnOn(LED7);
break;
}
}
void setup() {
Serial.begin(115200);
Serial.println("Start single-digit test with switch-case!");
// Транзистор (PNP)
pinMode(PIN_DIG1, OUTPUT);
digitalWrite(PIN_DIG1, HIGH); // изначально "выключаем" цифру
// Светодиоды
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
pinMode(LED7, OUTPUT);
clearAll(); // все сегменты погашены
}
void loop() {
for (int d = 0; d < 10; d++) {
// Включаем цифру (PNP=LOW)
digitalWrite(PIN_DIG1, LOW);
// Зажигаем нужные сегменты
showDigit(d);
// Держим 1 секунду
delay(1000);
// Выключаем цифру (PNP=HIGH)
digitalWrite(PIN_DIG1, HIGH);
// Гасим сегменты (опционально)
clearAll();
delay(200);
}
}