Go Down

Topic: Resolvido - Definir mais de uma ação para um button (Read 865 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á.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

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

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Go Up