Hola a todos. Quisiera saber como hacer para pregunta cuando haya un cambio de estado en un pin, algo así como un rebote. Estoy haciendo un proyecto donde debo mover un servo motor al presionar un botón, pero este botó quedará presionado y no debe seguir moviéndose el servo, hasta que se suelte y se vuelva a presionar, lo que estoy haciendo es una cerradura, de manera que al cerrar la puerta un botón queda presionado, por eso el servo debe moverse una sola vez, y mi idea es almacena el estado en que quedó cuando se presionó, cuando se suelte vuelve y cambia de estado, pero solo cuando se vuelve a presionar el servo gira nuevamente. El servo gira en un sentido a través de un dato enviado por bluetooth, eso ya lo tengo cubierto, solo me falta que al cerrar la puerta automáticamente el servo gire a la posición de cerrado y evitar el tener que enviar otro comando para esto.
Agradezco su ayuda! 
Me respondo yo mismo, pensé quizá por la hora (4 am) que el código de ejemplo de rebote publicado en http://arduino.cc/en/Tutorial/Debounce#.U14L1_l5Pax no me servía, pero si, la parte del servo me quedó así:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
/*
Eliminación de Rebote
Cada vez que el pin de entrada va de LOW-HIGH (por ejemplo, cuando se usa un pulsador), el pin de salida se activa de LOW-HIGH o de HIGH-LOW.
Este código esta basado en Limor Fried's versión of debounce, pero la lógica es invertida para este ejemplo. En aquel ejemplo, el pulsador retorna LOW cuando esta cerrado, y HIGH cuando esta abierto. Acá, el pulsador retorna HIGH cuando se presiona y LOW cuando no se presiona.
*/
// declaracion de constantes. Estas son usadas para configurar el numero de pin
const int buttonPin = 2; // el número del pin para la entrada del pulsador
//const int ledPin = 13; // el número de pin para la entrada del LED
// declaracion de variables:
//int ledState = HIGH; // el estado actual del pin de salida
int buttonState; // la lectura actual del pin de entrada
int lastButtonState = LOW; // lectura previa del pin de entrada
long lastDebounceTime = 0; // la ultima vez que el pin de salida cambio
long debounceDelay = 50;
void setup() {
pinMode(buttonPin, INPUT);
// pinMode(ledPin, OUTPUT);
// inicializa el estado del LED
// digitalWrite(ledPin, ledState);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
// lee el estado del pulsador y lo asigna a una variable local
int reading = digitalRead(buttonPin);
// revisa si el pulsador fue presionado
// (ejemplo, la entrada fue de LOW-HIGH), y tu estas esperando
// suficiente tiempo desde la última pulsación para ignorar el ruido:
// si el pulsador cambia, debido al ruido o a la pulsación:
if (reading != lastButtonState) {
// resetea el tiempo de rebote
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
// cualquiera que sea la lectura que ha estado ahí por mas tiempo
// que el retardo de entrada se toma como el estado actual real:
// si el estado del pulsador cambia:
if (reading != buttonState) {
buttonState = reading;
// solo se cambia el estado del LED si el estado del pulsador el HIGH
if (buttonState == HIGH) {
for(pos = 180; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(5); // waits 15ms for the servo to reach the position
}
}
}
}
// digitalWrite(ledPin, ledState);
// guarda la lectura. En el siguiente ciclo,
// este se convertirá en el estado anterior del pulsador:
lastButtonState = reading;
}