Lógica de retenção

Bom dia.
Estou iniciando um projeto em C++ e estou utilizando o mplabx. Neste projeto quero usar um botão em que quando eu o pressione por 3 segundos acenda um LED, mas quando soltar o botão quero que o LED permaneça acesso. E para desligado da mesma forma, ao pressionar por 3 segundos o LED se apague.
Tentei fazer isso com a estrutura IF/ELSE, WHILE, consegui fazer com que haja um atraso de 3 segundos do acendimento de LED quando eu pressiono o botão, mas o problema todo é como vou manter esse LED acesso se quando eu solto o botão o LED se apaga? É essa condição que não consigo fazer.
Não sei se esse tipo de programação é igual ao um contato selo ou lógica de retenção, ou então é igual a uma programação em ladder em que ao ser acionado um motor também é acionado um contato NA que se fecha garantindo a energização do sistema.
Quem souber peço por gentileza que dê uma ajuda.
Vlw.
Estou iniciando um projeto em C++ e estou utilizando o mplabx. Neste projeto quero usar um botão em que quando eu o pressione por 3 segundos acenda um LED, mas quando soltar o botão quero que o LED permaneça acesso. E para desligado da mesma forma, ao pressionar por 3 segundos o LED se apague.
Tentei fazer isso com a estrutura IF/ELSE, WHILE, consegui fazer com que haja um atraso de 3 segundos do acendimento de LED quando eu pressiono o botão, mas o problema todo é como vou manter esse LED acesso se quando eu solto o botão o LED se apaga? É essa condição que não consigo fazer.
Não sei se esse tipo de programação é igual ao um contato selo ou lógica de retenção, ou então é igual a uma programação em ladder em que ao ser acionado um motor também é acionado um contato NA que se fecha garantindo a energização do sistema.
Quem souber peço por gentileza que dê uma ajuda.
Vlw.