#1 2019-12-23 18:53:01

Seryoga
Учасник
Зареєстрований: 2019-09-28
Повідомлень: 14

Прерывание по таймеру

Подскажите как сделать прерывание по таймеру так чтобы диоды загорались и тухли по очередно c интервалам 0,8сек

int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;

volatile unsigned long int timerLED1;       
                                            
unsigned long int timePreview = 0;  
bool LEDOn = 0; 
 
ISR (TIMER0_COMPA_vect) 
{
    timerLED1++;        
    if(timerLED1 - timePreview >= 800) 
    {                                    
      timePreview = timerLED1;           
     
      digitalWrite(led1, 1);
          
    }  
    
}
void setup() 
{
      
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
  
  TCCR0A |= (1 << WGM01);              
  OCR0A = 0xF9;                       
  TIMSK0 |= (1 << OCIE0A);            
  TCCR0B |= (1 << CS01) | (1 << CS00); 
  sei();                               
}
void loop() 
{
  
}

Остання редакція Seryoga (2019-12-23 18:53:53)

Неактивний

#2 2019-12-23 19:09:13

Kaka
Учасник
Зареєстрований: 2018-03-21
Повідомлень: 411

Re: Прерывание по таймеру

Seryoga пише:

чтобы диоды загорались и тухли

Нельзя так делать. Протухнут - вони не оберёшься.

Неактивний

#3 2019-12-23 22:33:35

Avazart
Учасник
Зареєстрований: 2019-05-05
Повідомлень: 181

Re: Прерывание по таймеру

Seryoga пише:

Подскажите как сделать прерывание по таймеру так чтобы диоды загорались и тухли по очередно c интервалам 0,8сек

Что конкретно Вы имеете ввиду? Т.е сначала горит 1-й светодиод потом 1-й и 2-й потом 1-й, 2-й, 3-й итд так?

Неактивний

#4 2019-12-24 07:41:40

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Прерывание по таймеру

Создаёте массив led-пинов, индекс для этого массива, настраиваете таймер на 1мс период, в прерывании таймера через нужное время тухните по текущему индексу, зажигаете по следующему.
Напомнило. Где ви сохните бельё?

Остання редакція Green (2019-12-24 08:06:45)

Неактивний

#5 2019-12-24 13:49:09

Watchdog
Гість

Re: Прерывание по таймеру

ISR(YOUR_TIMER_VECTOR)
{
   digitalWrite(ledpin[ledidx], HIGHLIGTH);
   ledidx = (ledidx + 1) % LEDPIN_DIMENTION;
   digitalWrite(ledpin[ledidx], EXTINGUISH);
}

#6 2019-12-24 13:56:46

Watchdog
Гість

Re: Прерывание по таймеру

Watchdog пише:

Простите, наоборот. В предыдущем случае все будут гореть а один тухнуть. big_smile  А так все будут тухнуть, кроме одного! lol

ISR(YOUR_TIMER_VECTOR)
}
   digitalWrite(ledpin[ledidx], EXTINGUISH);
   ledidx = (ledidx + 1) % LEDPIN_DIMENTION;
   digitalWrite(ledpin[ledidx], HIGHLIGTH);
}

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму