Lógica de retenção

Linguagem descritiva de hardware

Moderadores: 51, guest2003

Lógica de retenção

Mensagempor Davi » 04 Dez 2013 09:31

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.
Davi
 
Mensagens: 1
Registrado em: 28 Jun 2013 11:58

Re: Lógica de retenção

Mensagempor dreher » 04 Dez 2013 10:31

Código: Selecionar todos
if (botao_pressionado)
{
   int i=0;//zera um contador para esperar 3000 milissegundsos
   for (i=;i<30;i++) //faz um laço de repetição para testar se a chave continua pressionada após 100ms (30*100ms=3000 ms)
   {
      delay_ms(100);
      if (!botao_pressionado) break;
   }
   if (botao_pressionado && i>=30) //se o botão ainda está pressionado e se passou 3 segundos
   {
    led=!led; //inverte o led
   }
   while (botao_pressionado) {} //fica preso enquanto não soltar o botão
}
dreher
Byte
 
Mensagens: 489
Registrado em: 12 Out 2006 11:10
Localização: Blumenau - SC


Voltar para Verilog, VHDL, SystemC ( PLAs, CPLDs, FPGAs, etc... )

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x