Me he comido boolean por las prisas.
Ponlo.
// Sketch modelizacion de barrera paso a nivel
#include <VarSpeedServo.h>
#define ESPERA 2000 // milisegundos que tarda en completarse la maniobra de subida
const int servoPin1 = 9;
int button1 = 3; // Interruptor (usar Pull Up)
int buttonState; // Estado del interruptor
unsigned long duracion = 0; // Variable para la toma inicial del tiempo
boolean maniobra=false; // Indica que hemos comenzado un ciclo de baja-sube
VarSpeedServo servo1;
void setup()
{
servo1.attach(9);
pinMode(button1, INPUT);
pinMode(12, OUTPUT); // LED intermitente
pinMode(11, OUTPUT); // LED intermitente
pinMode(10, OUTPUT); // LED de parpadeo fijo
digitalWrite(3, HIGH); // Activa pullup interno
}
void loop()
{
buttonState = digitalRead(button1); // Leemos y guardamos el estado del interruptor
if (buttonState == LOW)
{
digitalWrite(10,HIGH); // Led de parpadeo fijo a ON
servo1.write(500,5); // Bajamos la barrera
maniobra = true;
while((buttonState=digitalRead(button1))==LOW)
{
digitalWrite(12,HIGH); // Led 12 ON
delay(500); // 0,5 seg de pausa
digitalWrite(12,LOW); // Led 12 OFF
delay(100); // 0,1 seg de pausa
digitalWrite(11,HIGH); // Led 11 ON
delay(250); // 0,25 seg de pausa
digitalWrite(11,LOW); // Led 11 OFF
delay(100); // 0,1 seg de pausa
}
}
else
{
digitalWrite (10,LOW); // Apagamos led de intermitencia fija
if(maniobra) // Tenemos a medio una maniobra baja-sube ?
{
servo1.write(80,5); // Subimos la barrera
maniobra=false; // Maniobra completada
duracion=millis(); // Tomamos tiempo inicial
while((duracion+ESPERA)>millis())
{
digitalWrite(12,HIGH); // Led 12 ON
delay(500); // 0,5 seg de pausa
digitalWrite(12,LOW); // Led 12 OFF
delay(100); // 0,1 seg de pausa
digitalWrite(11,HIGH); // Led 11 ON
delay(250); // 0,25 seg de pausa
digitalWrite(11,LOW); // Led 11 OFF
delay(100); // 0,1 seg de pausa
}
}
}
}