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.
Tags:
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:
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);
}
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por