#define RED A5
#define YELLOW A4
#define GREEN A3
#define DELAY 200
#define LEDPIN1 13
#define LEDPIN2 PC1
#define LEDPIN3 PC2
#define COUNT_TIME 15
#define COUNT_LEDPIN1 2000
#define COUNT_LEDPIN2 1000
#define COUNT_LEDPIN3 300
uint16_t COUNT_LED1 = COUNT_LEDPIN1;
uint16_t COUNT_LED2 = COUNT_LEDPIN2;
uint16_t COUNT_LED3 = COUNT_LEDPIN3;
int ar[] = {RED, YELLOW, GREEN};
void timer_init();
ISR(TIMER1_COMPA_vect)
{
if (COUNT_LED1 > 0)
{
COUNT_LED1 --;
}
else
{
digitalWrite(LEDPIN1, !digitalRead(LEDPIN1));
COUNT_LED1 = COUNT_LEDPIN1;
}
if (COUNT_LED2 > 0)
{
COUNT_LED2 --;
}
else
{
DDRC ^= (1 << LEDPIN2);
COUNT_LED2 = COUNT_LEDPIN2;
}
if (COUNT_LED3 > 0)
{
COUNT_LED3 --;
}
else
{
DDRC ^= (1 << LEDPIN3);
COUNT_LED3 = COUNT_LEDPIN3;
}
}
void setup() {
// put your setup code here, to run once:
timer_init();
for (int i = 0; i < sizeof(ar) / sizeof(*ar); ++i) {
pinMode(ar[i], OUTPUT);
}
pinMode(LEDPIN1, OUTPUT);
//pinMode(A2, OUTPUT);
PORTC |= (1 << LEDPIN2) | (1 << LEDPIN3);
DDRC |= (1 << LEDPIN2) | (1 << LEDPIN3);
}
void loop() {
// put your main code here, to run repeatedly:
for (int i = 0; i < sizeof(ar) / sizeof(*ar); ++i) {
for (int j = 0; j < sizeof(ar) / sizeof(*ar); ++j) {
if (ar[j] == ar[i]) {
digitalWrite(ar[j], HIGH);
//digitalWrite(ar[j], !digitalRead(ar[j]));
}
else {
digitalWrite(ar[j], LOW);
//digitalWrite(ar[j], !digitalRead(ar[j]));
}
}
delay(DELAY);
}
digitalWrite(A2, HIGH);
}
void timer_init()
{
// инициализация Timer1
cli(); // отключить глобальные прерывания
TCCR1A = 0; // установить регистры в 0
TCCR1B = 0;
OCR1A = COUNT_TIME; // установка регистра совпадения
TCCR1B |= (1 << WGM12); // включение в CTC режим
// Установка битов CS10 и CS12 на коэффициент деления 1024
TCCR1B |= (1 << CS10);
TCCR1B |= (1 << CS12);
TIMSK1 |= (1 << OCIE1A); // включение прерываний по совпадению
sei(); // включить глобальные прерывания
}