Ви не увійшли.
Сторінки 1
Подскажите как сделать прерывание по таймеру так чтобы диоды загорались и тухли по очередно 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)
Неактивний
Подскажите как сделать прерывание по таймеру так чтобы диоды загорались и тухли по очередно c интервалам 0,8сек
Что конкретно Вы имеете ввиду? Т.е сначала горит 1-й светодиод потом 1-й и 2-й потом 1-й, 2-й, 3-й итд так?
Неактивний
Создаёте массив led-пинов, индекс для этого массива, настраиваете таймер на 1мс период, в прерывании таймера через нужное время тухните по текущему индексу, зажигаете по следующему.
Напомнило. Где ви сохните бельё?
Остання редакція Green (2019-12-24 08:06:45)
Неактивний
ISR(YOUR_TIMER_VECTOR)
{
digitalWrite(ledpin[ledidx], HIGHLIGTH);
ledidx = (ledidx + 1) % LEDPIN_DIMENTION;
digitalWrite(ledpin[ledidx], EXTINGUISH);
}
Простите, наоборот. В предыдущем случае все будут гореть а один тухнуть. А так все будут тухнуть, кроме одного!
ISR(YOUR_TIMER_VECTOR) } digitalWrite(ledpin[ledidx], EXTINGUISH); ledidx = (ledidx + 1) % LEDPIN_DIMENTION; digitalWrite(ledpin[ledidx], HIGHLIGTH); }
Сторінки 1