Pessoal, estou com uma dúvida que acredito que a sloução é bem simples.

Estou começando em PIC e estou querendo fazer o seguinte: ao segurar pressionado uma tecla por 3 segundos, o programa chama uma função. Depois de entrar nessa função, eu preciso pressionar novamente a tecla para sair da mesma e voltar no programa principal

Já tentei fazer o seguinte:

 

if (button (&portb, 1,3000,1))

{

  funcao();

}

Mas não deu certo. Ele não espera os 3 segundos pra chamar a função. Faz isso de maneira muito rápida.

Alguém tem alguma sugestão?

Estou usando o MikroC PRo.

Abraços

Exibições: 912

Responder esta

Respostas a este tópico

Você pode usar a seguinte lógica:

Enquanto pressionada a tecla, uma variável chamada cont incrementa de 30 em 30 e confere se a tecla ainda está sendo pressionada de 10 em 10 ms. Se cont==300 terão passados 3 segundos com a tecla pressionada

Usando o compilador CCS o código poderia ser assim:(Estou chamando o botão de b1)

.

.

.

long int cont=0;

while(b1)                             //ENQUANTO EU PRESSIONO O BOTÃO

{

cont=cont+30;                   //INCREMENTA A VARIÁVEL

delay_ms(10);                    //DE 10 EM 10 MS

if(cont==300)                     //SE CONT FOR IGUAL A 300

{funcao();}                         //ENTRA NA FUNÇÃO

}

cont=0;                           //SE TIRAR O DEDO DO BOTÃO, SAI DO LAÇO DE REPETIÇÃO E ZERA A VARIAVEL

.

.

.

Como você está usando o delay e testando uma condição (com o IF) dentro de um laço de repeticao (WHILE) Vai ser um pouco mais do que 3 segundos. Pouquíssimo dependendo da eletrônica

Vê se da certo aí. Essa parte de pressionar a tecla pra sair, você pode fazer de várias maneiras, vai depender do que você está fazendo dentro da funcão.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço