Un semplice bottone che muova un servo motore

Ciao Ragazzi!
Era da tempo che stavo lavorando a questo progetto:
In breve, ho una porta secondaria di servizio, ho messo esternamente un Keypad collegato all’interno ad un arduino uno e un servo motore, la funzione del servo è quella di sbloccare lo scrocchio se il codice digitato viene accettato, una volta che il codice inserito è corretto, sblocca il tutto per 20 secondi poi rimette in sicurezza la porta.
Funziona benissimo se si arriva da fuori, ma se da dentro si vuole uscire non è possibile.
Quello che voglio fare ora è di mettere un normale bottone nella parte interna, tipo quello per suonare il campanello (forse è piu corretto pulsante) e che arduino senta in circuito che viene chiuso e mi risponde arrivando la funzione che sblocca lo scrocchio.
Ho scoperto la funzione AttachInterrupt() ma ho difficoltà ad implementarla, mi date una mano?

Questo è il codice attuale senza implementazioni:

#include <Password.h> 
#include <Keypad.h> 
#include <Servo.h>


Servo myservo; //declares servo
Password password = Password( "1542" ); //password to unlock box, can be changed

const byte ROWS = 4; // Four rows
const byte COLS = 4; // columns
// Define the Keymap
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = { 9, 8, 7, 6 };// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
byte colPins[COLS] = { 5, 4, 3, 2 }; 


   

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  Serial.begin(9600);
  Serial.write(254);
  Serial.write(0x01);
  delay(200); 
  pinMode(11, OUTPUT);  //green light
  pinMode(12, OUTPUT);  //red light
  myservo.attach(13); //servo on digital pin 9 //servo
  keypad.addEventListener(keypadEvent); //add an event listener for this keypad
  // initialize the pushbutton pin as an input:
   
  }

void loop(){
  keypad.getKey();
  myservo.write(85);
  }
  //take care of some special events
  void keypadEvent(KeypadEvent eKey){
  switch (keypad.getState()){
  case PRESSED:
  
  Serial.print("Enter: ");
  Serial.println(eKey);
  delay(10);
  
  Serial.write(254);
  
  switch (eKey){
    case 'A': checkPassword(); delay(1); break;
    case 'B': muoviUnPelo(); delay(1); break;
    
    case 'D': password.reset(); delay(1); break;
    
     default: password.append(eKey); delay(1);
}
}
}
void muoviUnPelo(){
  myservo.write(53);
  delay(50);
  myservo.write(49);
}
  
void checkPassword(){
  
if (password.evaluate()){  //if password is right open box
    
    Serial.println("Accepted");
    Serial.write(254);delay(1000);
    //Add code to run if it works
    myservo.write(51); //160deg
    
        digitalWrite(11, HIGH);//turn on
    delay(20000); //wait 5 seconds
    digitalWrite(11, LOW);// turn off
    
    
}else{
    Serial.println("Denied"); //if passwords wrong keep box locked
    Serial.write(254);
    delay(10);
    //add code to run if it did not work
    myservo.write(90);
    digitalWrite(12, HIGH); //turn on
    delay(500); //wait 5 seconds
    digitalWrite(12, LOW);//turn off
    
}


}

cosa vuoi fare coll' interrupt.

Metti nel loop()

if (difgitalRead(pulsanteinterno)==1) funzione apriporta().

La parte che apre la porta la metti in una funzione e la chiami da entrambi i controlli.

Io controllerei comunque se la porta é chiusa nel momento che il servo deve chiudere il chiavistello perché senó ti trovi la porta aperta e la serratura chiusa impossibilizzata a chudere la aporta.

Comunque anche se in questo caso delay(20000); blocca il codice non é grave perche lo sketch non deve fare niente. senó impara l' uso di millis() per le temporizzazioni.

Ciao Uwe

quindi in breve cosi?:

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  Serial.begin(9600);
  Serial.write(254);
  Serial.write(0x01);
  delay(200); 
  pinMode(11, OUTPUT);  //green light
  pinMode(12, OUTPUT);  //red light
  myservo.attach(13); //servo on digital pin 9 //servo
  keypad.addEventListener(keypadEvent); //add an event listener for this keypad
  // initialize the pushbutton pin as an input:
   
  }

void loop(){
  keypad.getKey();
  myservo.write(85);
if (difgitalRead(pulsanteinterno)==1);
Serial.write(254);delay(1000);
    //Add code to run if it works
    myservo.write(51); //160deg
    
        digitalWrite(11, HIGH);//turn on
    delay(20000); //wait 5 seconds
    digitalWrite(11, LOW);// turn off
  }
  //take care of some special events
  void keypadEvent(KeypadEvent eKey){
  switch (keypad.getState()){
  case PRESSED:
  
  Serial.print("Enter: ");
  Serial.println(eKey);
  delay(10);
  
  Serial.write(254);
  
  switch (eKey){
    case 'A': checkPassword(); delay(1); break;
    case 'B': muoviUnPelo(); delay(1); break;
    
    case 'D': password.reset(); delay(1); break;
    
     default: password.append(eKey); delay(1);
}
}
}
void muoviUnPelo(){
  myservo.write(53);
  delay(50);
  myservo.write(49);
}
  
void checkPassword(){
  
if (password.evaluate()){  //if password is right open box
    
    Serial.println("Accepted");
    Serial.write(254);delay(1000);
    //Add code to run if it works
    myservo.write(51); //160deg
    
        digitalWrite(11, HIGH);//turn on
    delay(20000); //wait 5 seconds
    digitalWrite(11, LOW);// turn off
    
    
}else{
    Serial.println("Denied"); //if passwords wrong keep box locked
    Serial.write(254);
    delay(10);
    //add code to run if it did not work
    myservo.write(90);
    digitalWrite(12, HIGH); //turn on
    delay(500); //wait 5 seconds
    digitalWrite(12, LOW);//turn off
    
}


}

mi sfugge una cosa, dove lo collego e come lo implemento usando questo tuo metodo?