Filtrar o ruído

Este exemplo mostra o uso de um botão como interruptor: cada vez que você pressiona o botão, o LED (ou outro componente) liga (se estiver desligado) ou desliga (se estiver ligado). Ele também desrebota o sinal da entrada, sem a qual pressionando uma vez o botão, apareceria no código múltiplos acessos. Use a função millis() para obter a informação do momento em que o botão foi pressionado.

Circuito

Um botão entre o pino 7 e o terra e um LED no pino 13.

Code

int inPin = 7;         // o numero do pino de entrada
int outPin = 13;       // o numero do pino de saida

int state = HIGH;      // o estado corrente do pino de saída
int reading;           // a leitura corrente do pino de entrada
int previous = LOW;    // a leitura previa do pino de entrada

// as seguintes variaveis sao do tipo long por que o tempo e medido em milisegundos e
// rapidamente se tornarão um numero grande demais para uma variavel do tipo int
long time = 0;         // o ultimo tempo em que o pino de entrada teve o valor alterado
long debounce = 200;   // o tempo de filtragem, aumentar se a saida piscar

void setup()
{
pinMode(inPin, INPUT);
pinMode(outPin, OUTPUT);
}

void loop()
{
reading = digitalRead(inPin);

// se apenas pressionarmos o botao (i.e. modificarmos a entrada de LOW para HIGH),
// e se esperamos tempo suficiente desde a última pressionada para ignorar qualquer ruído...

if (reading == HIGH && previous == LOW && millis() - time > debounce) {
// ... inverte a saída
if (state == HIGH)
state = LOW;
else
state = HIGH;

// ... e se lembra quando o botão foi pressionado pela última vez
time = millis();   
}

digitalWrite(outPin, state);

previous = reading;
}

 

O conteúdo desta página é uma tradução para o português a partir do site original do Arduino.

Esta obra está licenciada sob uma Licença Creative Commons.

Creative Commons License