// Применение програмного RS триггера
uint8_t trigger = 0b10;
void setup()
{
DDRB = (1 << DDB3) | (1 << DDB2); // D10, D11 выходы,
// остальные входы.
PORTB = (1 << PB0) | (1 << PB1); // Включаем подтягивающие
// резисторы на D8, D9
}
void loop()
{
uint8_t state = PINB & 0b11; // Считываем состояние кнопки.
state &= trigger; // Приводим state в соответствие
// с таблицей истинности триггера.
if (!state) // Если state равно 0b00
{
trigger ^= 0b11; // Переключаем триггер.
if (trigger & 0b10) PORTB ^= 0b100; // Если кнопка отпущена то
// переключаем светодиод.
// Если требуется переключение при нажатии, то if (trigger & 0b1)
}
}