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.
Circuito
O interruptor no pino 7 e o LED no pino 13.Código
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; }