Пришлось добавить еще одну кнопку "СТОП". Код ниже. Прошил тиньку, на макетке вроде работает, пауза 8 сек.
#define F_CPU 1200000UL
#define OUT PB2
#define OUT10 PB0
#define BUT_Start PB4
#define BUT_Stop PB3
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
// Обработчик прерывания PCINT0
ISR(PCINT0_vect)
{
_delay_ms (60); // антидребезг (использовать задержки в прерываниях некошерно, но пока и так сойдёт)
if ((PINB & (1<<BUT_Stop)) == 0) // если нажата кнопка
{
PORTB &= ~((1<<OUT)|(1<<OUT10)); //выкл.
}
}
int main(void)
{
// Пины кнопок
DDRB &= ~((1<<BUT_Start)|(1<<BUT_Stop)); // входы
PORTB |= (1<<BUT_Start)|(1<<BUT_Stop); // подтянуты
// Пин светодиода
DDRB |= (1<<OUT)|(1<<OUT10); // выход
PORTB &= ~((1<<OUT)|(1<<OUT10)); // выключен
GIMSK |= (1<<PCIE); // Разрешаем внешние прерывания PCINT0.
PCMSK |= (1<<BUT_Stop); // Разрешаем по маске прерывания на ногах кнопки
sei(); // Разрешаем прерывания глобально
while (1)
{
_delay_ms (60); // антидребезг
if ( (PINB & (1<<BUT_Start)) == 0 ) // если нажата кнопка
{
PORTB |= ((1<<OUT)|(1<<OUT10)); //вкл
_delay_ms (8000); // пауза
}
PORTB &= ~(1<<OUT10); //выкл
}
}
Что нужно: кнопка "Стар"т сразу включает 2 реле, одно из которых отключается через 8-10 сек. Второе остается включено пока не нажата кнопка "Стоп".
Если кто-то подскажет как улучшить код, чтобы не было сбоев, буду очень благодарен.