consider (a bit involved than i expected)
(Capitalize constant)
#include <Servo.h>
Servo Servo1;
const byte LedTimeout = 12;
const byte LedActive = 13;
const int SensorPin = A0;
const int ServoPin = 3;
const unsigned long MsecOn = 3000; // a few seconds
const unsigned long MsecOff = 10000; // change to a few minutes
int pos = 1500;
int posStop = 1400;
float sensorValue = 0;
const int Tval = 10;
enum { ST_IDLE, ST_ACTIVE, ST_TIMEOUT };
int state = ST_IDLE;
unsigned long msecLst;
enum { Off = HIGH, On = LOW };
// -----------------------------------------------------------------------------
void loop () {
unsigned long msec = millis ();
sensorValue += (analogRead (SensorPin) - sensorValue) / 100;
Serial.println (sensorValue);
switch (state) {
case ST_IDLE:
if (sensorValue > Tval) {
Servo1.write (pos);
digitalWrite (LedActive, On);
state = ST_ACTIVE;
msecLst = msec + MsecOn;
}
break;
case ST_ACTIVE:
if (msec > msecLst) {
Servo1.write (posStop);
digitalWrite (LedActive, Off);
digitalWrite (LedTimeout, On);
msecLst = msec + MsecOff;
state = ST_TIMEOUT;
}
break;
case ST_TIMEOUT:
if (msec > msecLst) {
digitalWrite (LedTimeout, Off);
state = ST_IDLE;
}
break;
}
}
// -----------------------------------------------------------------------------
void setup () {
Serial.begin (9600);
pinMode (LedTimeout, OUTPUT);
digitalWrite (LedTimeout, Off);
pinMode (LedActive, OUTPUT);
digitalWrite (LedActive, Off);
Servo1.attach (ServoPin);
}