Вопрос больше академический, настроил таймер1 на подсчет импульсов от кнопки, после чего на пине меняется сигнал на противоположный (светодиод загорается и гаснет).
Вопрос:
Можно ли настроить таймер, что бы светодиод после зажигания например через секунду сам погасился?
Если да - куда копать?
Думал использовать канал OCR1B, но он работает с другим выходным пином.
/*
Name: NanoTimers01.ino
Created: 09.11.2022 13:03:46
Author: Andrey
*/
static constexpr unsigned char pin_input_step = 5; // T1 PD5 pin 5 Nano
static constexpr unsigned char pin_mixer = 9; // OC1A PB1 pin 9 Nano
void startTimer1compOutOCR1Atrig(void) { // изменение полярности выходного пина по совпадению счетчика от внешних импульсов
cli(); // отключить глобальные прерывания
TCCR1A = 0b00000000; // очищаем все настройки таймера
TCCR1B = 0b00000000; // очищаем все настройки таймера
TCCR1A |= 1 << COM1A0; // 01 - изменение состояния вывода OC1A (PB1 pin 9 Nano) на противоположное при совпадении с A
TCCR1B |= 1 << CS12; // 110 - внешний источник на выводе T1 (T1 PD5 pin 5 Nano) по спаду сигнала
TCCR1B |= 1 << CS11; // 110 - внешний источник на выводе T1 (11 ножка) по спаду сигнала
OCR1A = 5; // установка регистра совпадения
TCCR1B |= (1 << WGM12); // включение в CTC режим // сброс при совпадении
sei(); // включить глобальные прерывания
}
void initPins(void) {
pinMode(pin_input_step, INPUT_PULLUP);
pinMode(pin_mixer, OUTPUT);
digitalWrite(pin_mixer, LOW);
}
// the setup function runs once when you press reset or power the board
void setup() {
initPins();
startTimer1compOutOCR1Atrig();
}
// the loop function runs over and over again until power down or reset
void loop() {
}
Дополнение: реализовать без использования/вызова прерываний.