Go Down

Topic: Resolvido - Definir mais de uma ação para um button (Read 991 times) previous topic - next topic

Klynnex

Jan 07, 2013, 05:56 am Last Edit: Jan 07, 2013, 02:25 pm by Klynnex Reason: 1
Olá amigos,
estou quebrando a cabeça a alguns dias com com a lógica.
Eu tenho um projeto que possui um button na protoboard, do qual eu tenho que adicionar ações a ele a cada clique. Ou seja, se a pessoa der um clique ele toma a ação //até aqui beleza. Só que se ela der dois cliques toma outra ação, três cliques executa outra ação.
O meu problema é identificar quando é dado mais de dois cliques. Pensei em utilizar alguma biblioteca Timer, para verificar se o clique anterior foi dado com menos de dois segundos, só que não consegui.
Se vocês puderem me ajudar, com uma ideia ou até com um pedaço do código pra eu entender a lógica eu agradeço.
Obrigado.

bubulindo

Algo assim?

Code: [Select]

#define TIME_OUT     2000
unsigned char num_clicks = 0;
unsigned char time_on = 0;
unsigned long timer = 0;
unsigned char flanco = 0;

if (digitalRead(botao) == LOW && flanco == 0) { //primeiro click.
   num_clicks++; //incrementa clicks
   flanco = 1; // não volta aqui neste ciclo.
   if (time_on == 0) { //primeira vez que entra aqui.
      timer = millis();
      time_on = 1; //não volta a entrar.
   }
}

if (digitalRead(botao) == HIGH) { //faz reset do flanco para entrar na condicão anterior.
   flanco = 0;
}

if (millis() - timer >= TIME_OUT ) { //acabou-se o tempo desde que carregaste pela primeira vez no botão.
   switch (num_clicks) {  //decide o que fazer tendo por base o numero de clicks.
      case 1: {
                  funcao_1();
                  break;
                  }
      case 2: {
                  funcao_2();
                  break;
                  }
      case 3: {
                  funcao_3();
                  break;
                  }
      default: {
                  erro();
                  break;
                  }
    }
//faz reset do ciclo...
num_clicks = 0;
flanco = 0;
time_on = 0;
}


Este código (ou qualquer código com botões) tem o problema do debounce. Provavelmente a variável num_clicks vai contar mais que o numero de vezes que clicaste no botão. Mas nada como experimentar e ver o que dá.
This... is a hobby.

Klynnex

bubulindo, Muito obrigado mesmo  :).
Funcionou para o que desejo :D.
Estava seguindo essa mesma lógica, só que agora vi onde que errei haha.

Valeu mesmo, tu não sabe o quanto me ajudou :)

bubulindo

This... is a hobby.

Go Up