Pages: [1]   Go Down
Author Topic: Resolvido - Definir mais de uma ação para um button  (Read 824 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: January 07, 2013, 08:25:26 am by Klynnex » Logged

'round the world...
Online Online
Faraday Member
**
Karma: 42
Posts: 3267
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Algo assim?

Code:
#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á.
Logged

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).

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Valeu mesmo, tu não sabe o quanto me ajudou smiley
Logged

'round the world...
Online Online
Faraday Member
**
Karma: 42
Posts: 3267
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Funcionou? smiley

Na boa... um dia ajudas-me tu. smiley-razz
Logged

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).

Pages: [1]   Go Up
Jump to: