consider. you'll need to add code to drive motor to open or close fence
const byte butPin = A1;
const byte led1Pin = 13;
const byte led2Pin = 12;
byte butState;
enum { Closed, Opening, Open, Closing, Last };
byte state = Closed;
enum { Off = HIGH, On = LOW };
const unsigned long Period = 200;
unsigned long msec;
unsigned long msecLst;
// -----------------------------------------------------------------------------
void loop ()
{
byte but = digitalRead (butPin);
if (butState != but) // state change
{
butState = but;
delay (10); // debounce
if (LOW == but) // pressed
state = Last == ++state ? Closed : state;
}
msec = millis ();
switch (state) {
case Opening:
digitalWrite (led1Pin, Off);
if ( (msec - msecLst) > Period) {
msecLst = msec;
digitalWrite (led2Pin, ! digitalRead (led2Pin));
}
break;
case Open:
digitalWrite (led2Pin, On);
break;
case Closing:
digitalWrite (led2Pin, Off);
if ( (msec - msecLst) > Period) {
msecLst = msec;
digitalWrite (led1Pin, ! digitalRead (led1Pin));
}
break;
case Closed:
default:
digitalWrite (led1Pin, On);
break;
}
}
// -----------------------------------------------------------------------------
void setup ()
{
pinMode (led1Pin, OUTPUT);
digitalWrite (led1Pin, Off);
pinMode (led2Pin, OUTPUT);
digitalWrite (led2Pin, Off);
pinMode (butPin, INPUT_PULLUP);
butState = digitalRead (butPin);
}