#include <Servo.h>
// define pins
const int LED_PIN = 13; // onboard LED
const int SERVO_PIN = 9; // servo signal pin
const int BUTTON_PIN = 2; // pushbutton input pin
const int RELAY_PIN = 10; // relay output pin
// create servo object
Servo myservo;
// define servo angle values
const int SERVO_CLOSED_ANGLE = 0;
const int SERVO_OPEN_ANGLE = 90;
// define button state variables
int buttonState = 0;
int lastButtonState = 0;
void setup() {
// initialize digital pins as inputs or outputs
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
pinMode(RELAY_PIN, OUTPUT);
// attach servo to pin
myservo.attach(SERVO_PIN);
// set initial servo position
myservo.write(SERVO_CLOSED_ANGLE);
}
void loop() {
// read button state
buttonState = digitalRead(BUTTON_PIN);
// if button state has changed, toggle relay output and servo position
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
digitalWrite(RELAY_PIN, HIGH);
myservo.write(SERVO_OPEN_ANGLE);
} else {
digitalWrite(RELAY_PIN, LOW);
myservo.write(SERVO_CLOSED_ANGLE);
}
}
// update last button state
lastButtonState = buttonState;
// blink onboard LED
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
delay(500);
}