As vezes nos deparamos com algumas situações que nos deixam com a pulga atrás da orelha, uma delas é quando vamos utilizar um botão para uma determinada situação, e quando vamos testar, a situação que você irá ocasionar com o acionamento do botão, a situação ocorre 2, 3 ou mais vezes, se você segurar o botão dai sim, piora tudo e isso te leva a uma alternativa, aumentar o delay. Porém, no caso de aumentar o delay, do mesmo jeito se você segurar o botão, ele irá fazer determinada ação várias vezes. Assim, utiliza-se uma borda na programação, para que ocorra um travamento na ação, Mas como funciona isso? Bem vou mostrar a vocês:

Bem, aqui vai um exemplo de uma função sem borda:

--------------------------------------------------------------------------------------------------------------------------------------------------

/* Programa de exemplo
Everton Carvalho */

int variavel = 0;

void setup ()
{
  pinMode(INPUT, 3);
}

void loop ()
{
  if (3 == 1)
  {
    variavel++;
  }

  delay(100);
}

--------------------------------------------------------------------------------------------------------------------------------------------------

Neste exemplo, se ficarmos pressionando o botão que está conectado a porta 3 do arduino, a variavel irá continuar aumentando, até que solte-se o botão.

Uma alternativa é criar uma variável que ocasione o travamento da função se o botão ficar pressionado e não ocorra o aumento da variavél.

Como neste exemplo:

--------------------------------------------------------------------------------------------------------------------------------------------------

/* Programa de exemplo 2 

Everton Carvalho */

int borda = 0;
int variavel = 0;

void setup ()
{
  pinMode(INPUT, 3);
}

void loop ()
{
  if (borda == 0)
  {
    if (3 == 1)
    {
      borda++;
      variavel++;
    }
  }
  else
  {
    if (3 == 0)
    {
      borda = 0;
    }
  }
  delay(100);
}

--------------------------------------------------------------------------------------------------------------------------------------------------

Espero ter trazido aos novatos como eu uma nova informação sobre Arduino, espero que tirem as dúvidas.

Exibições: 4328

Responder esta

Respostas a este tópico

Eu não tenho experiencia com arduino, mas na programação do pic, quando me deparava com esse problema eu usava a seguinte lógica:

IF(BOTAO)                     //TESTA O BOTAO

{

   WHILE(BOTAO){}       //ENQUANTO O BOTAO ESTIVER PRESSIONADO FICA DENTRO DESSE WHILE VAZIO

   VARIAVEL++;            //INCREMENTA VARIÁVEL OU QUALQUER OUTRA AÇÃO

}

estou com um problema em um código desse tipo, enquanto eu seguro o botão a variável incrementa em 1, mas assim que solto o botão ela volta para o zero, onde será que eu posso estar errando?

Posta seu código...

pode deixar, já consegui corrigir o erro.

É uma solução possível, incrementando uma variável. Só tem que cuidar com os estouros, dependendo da aplicação.

Uma alternativa, ao invés de incrementar uma variável, é observar o estado anterior.

Inclusive está la nos exemplos das Últimas IDEs do Arduino:

http://arduino.cc/en/Tutorial/ButtonStateChange

Fiz aqui, mas não deu muito certo, fiz assim, a cada pulso no botão incrementa um valor a variavel marcha, e quando tiver em 3 acende o led, quando em 8 apaga o led, o problema é que se ficar segurando o botão o led fica piscando, mais rapido ou mais lento, conforme valor de delay.

abaixo o codigo.

// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 9; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin
int borda ;
int marcha ;
// variables will change:
int buttonState = 1; // variable for reading the pushbutton status

void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}

void loop(){
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);

// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:



if (borda== 0)
{
if(buttonState == LOW)
{

borda=1;
marcha++;

}
}
else
{
if(buttonState == LOW)
{
borda = 0;


}
}
if(marcha==3)
{
// turn LED on:
digitalWrite(ledPin, HIGH);

}
if(marcha==8)
{
// turn LED on:
digitalWrite(ledPin, LOW);
marcha=0;
}



delay(100);

}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço