Este exemplo demonstra o uso de um interruptor como uma chave: cada vez que é pressionado, o LED (ou o que for) é ligado (se estiver desligado) e vice-versa. Além disso, também funciona como filtro para o ruído mecânico característico dos interruptores, sem o qual, ao pressionar o interruptor, detectaríamos uma seqüência de múltiplos toques. O código a seguir faz uso da função millis() para acompanhar o momento em que o interruptor é pressionado.
O interruptor no pino 7 e o LED no pino 13.

int inPin = 7; // o número do pino de entrada
int outPin = 13; // número do pino de saída
int state = HIGH; // estado atual do pino de saída
int reading; // estado atual do pino de entrada
int previous = LOW; // estado anterior do pino de entrada
// as seguintes variáveis são do tipo ''long'' porque o tempo,
// medido em milissegundos,
// transformar-se-á logo em um valor grande demais para um ''int''
long time = 0; // último momento em que o pino de saída foi atualizado
long debounce = 200; // tempo do filtro, aumente se ocorrer irregularidades
void setup()
{
pinMode(inPin, INPUT);
pinMode(outPin, OUTPUT);
}
void loop()
{
reading = digitalRead(inPin);
// se acabamos de pressionar o interruptor (isto é, se a entrada
// foi de LOW para HIGH), e esperamos o bastante desde o
// último toque de forma a ignorar o ruído...
if (reading == HIGH && previous == LOW && millis() - time > debounce) {
// ... inverta a saída
if (state == HIGH)
state = LOW;
else
state = HIGH;
// ... e lembre-se do momento do último toque
time = millis();
}
digitalWrite(outPin, state);
previous = reading;
}