#define A 9
#define B 8
#define C 7
#define D 6
#define E 5
#define F 4
#define G 3
int GREEN = 10;
int YELLOW = 11;
int RED = 12;
int DELAY_GREEN = 5000;
int DELAY_YELLOW = 2000;
void green_light() {
digitalWrite(GREEN, HIGH);
digitalWrite(YELLOW, LOW);
digitalWrite(RED, LOW);
}
void yellow_light() {
digitalWrite(GREEN, LOW);
digitalWrite(YELLOW, HIGH);
digitalWrite(RED, LOW);
}
void red_light() {
digitalWrite(GREEN, LOW);
digitalWrite(YELLOW, LOW);
digitalWrite(RED, HIGH);
}
void setup() {
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(YELLOW, OUTPUT);
pinMode(RED, OUTPUT);
pinMode(2, OUTPUT); // сделал для GND семисегментного индикатора
}
int num_array[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 displayDigit(int digit) {
digitalWrite(A, num_array[digit][0] == 1 ? HIGH : LOW);
digitalWrite(B, num_array[digit][1] == 1 ? HIGH : LOW);
digitalWrite(C, num_array[digit][2] == 1 ? HIGH : LOW);
digitalWrite(D, num_array[digit][3] == 1 ? HIGH : LOW);
digitalWrite(E, num_array[digit][4] == 1 ? HIGH : LOW);
digitalWrite(F, num_array[digit][5] == 1 ? HIGH : LOW);
digitalWrite(G, num_array[digit][6] == 1 ? HIGH : LOW);
}
void loop() {
digitalWrite(2, LOW); //включаю общий катод
for (int i = 9; i >= 0; i--){
displayDigit(i);
if(i <= 2 && i >=0) {
yellow_light();
digitalWrite(RED, HIGH);
}
else {
red_light();
}
delay(1000);
}
digitalWrite(2, HIGH); //выключаю общий катод
green_light(); //включаем зелёный сигнал светофора
delay(DELAY_GREEN);
}