Problemas para programar servo y reloj

Hola buenas, necesito como colocar un botón de interruptor en este código, esto es para que cuando lo presione se abra y si lo suelto se cierre la puerta. De esta manera podre abrir la puerta con un botón y además se abrirá con la hora a lo que este programada, desde ya muchas gracias :slight_smile:

#include <Servo.h>
#include <DS3231.h>
#include <Wire.h>

char *horas[]={
"16:45",
"16:46",
"16:47",
"16:47",
"16:49"
};

long nhoras = (sizeof(horas)/sizeof(char *));
bool h12;
bool PM;
DS3231 Clock;
Servo servoMotor;
byte year, month, date, DoW, hour, minute, second;

void setup() {
Wire.begin();
Serial.begin(9600);
}
void loop() {
delay(1000);
Clock.getTime(year, month, date, DoW, hour, minute, second);
if(deboGirar()==1)
girar();
}

void girar(){
servoMotor.attach(9);
int i;
for (i=0;i<4;i++){
servoMotor.write(0);
delay(500);
servoMotor.write(90);
delay(500);
}
servoMotor.detach();
}

int deboGirar(){
String h = "";
String m = "";
for(int i=0;i<nhoras;i++){
h= getValue(horas*, ':', 0);*
_ m= getValue(horas*, ':', 1);_
_
hour = Clock.getHour(h12, PM);_
if(int(hour)==atoi(h.c_str()) && int(minute)==atoi(m.c_str()) && int(second)==0)
_
return 1;_
_
}_
_
return 0; _
_
}_
String getValue(String data, char separator, int index)
_
{_
_
int found = 0;_
_
int strIndex[] = { 0, -1 };_
_
int maxIndex = data.length() - 1;_
_
for (int i = 0; i <= maxIndex && found <= index; i++) {_
_
if (data.charAt(i) == separator || i == maxIndex) {_
_
found++;_
_
strIndex[0] = strIndex[1] + 1;_
_
strIndex[1] = (i == maxIndex) ? i+1 : i;_
_
}_
_
}_
_
return found > index ? data.substring(strIndex[0], strIndex[1]) : "";_
_
}*_

Bienvenido al foro Arduino.
Lee el privado que te he enviado para que edites tu post.
Al hacerlo comprenderás que debes prestar mas atención a la Sección donde posteas y que siempre se deben usar etiquetas para postear códigos/errores, imágenes y enlaces.
Ahora tienes la guia de como editar de modo que te llevará 5 min.

El código es tuyo o lo copiaste?

Cambia en la función loop el if de forma que evalúe con or el valor del pulsador, algo así como:

if(deboGirar() || digitalread (PIN))
      girar();

Si el pulsador en reposo devuelve true:

if(deboGirar() || !digitalread (PIN))
      girar();

PIN es el número del pin donde has puesto el pulsador. Girará en las horas o cuando se pulse.

Saludos.