#include int ledPin = 13; // LED oin int PIRPin = 2; // input pin (for PIR sensor) int servoPin = 7; // output pin (servo) int pirState = LOW; // we start, assuming no motion detected int val = 0; // variable for reading the pin status int initDelay = 10000; // initial delay int servoInit = 0; // starting angle for servo int servoAngle = 135; // final angle of servo Servo myservo; // create servo object to control a servo void setup() { pinMode(ledPin, OUTPUT); // declare LED as output pinMode(PIRPin, INPUT); // declare sensor as input Serial.begin(9600); // use the monitor to debug myservo.attach(servoPin); // attaches the servo pin to the servo object } void loop(){ //delay before arming if(initDelay > 0){ pirState = LOW; // assume PIR is inactive digitalWrite(ledPin, HIGH); // LED on while delayed myservo.write(servoInit); // initialise servo delay(initDelay); // delay arming while we get hands out of the way initDelay=0; //only delay once digitalWrite(ledPin, LOW); // LED off Serial.println("Armed"); } val = digitalRead(PIRPin); // read input value if (val == HIGH) { // check if the input is HIGH i.e. motion detected digitalWrite(ledPin, HIGH); // turn LED ON if (pirState == LOW) { // was PIR waiting? myservo.write(servoAngle); // move the servo pirState = HIGH; // set a flag so we only act if PIR is idle Serial.println("Motion detected!"); } } else { // digitalWrite(ledPin, LOW); // turn LED OFF if (pirState == HIGH){ // is PIR active? myservo.write(servoInit); // move servo back to start point pirState = LOW; // set a flag so we only act if PIR is active Serial.println("Servo reset - come on rat..."); } } }