#define LEDPin D10
#define buzzerPin D9
#define relayPin D8
#define pirPin D7
#define servoPin D4
//Alarm and Motion Variables
unsigned long alarmCurrentMillis;
unsigned long servoCurrentMillis;
unsigned long servoStartMillis = 0;
unsigned long alarmStartMillis = 0;
bool alarmState = HIGH;
const byte alarmDelay = 150;
const byte StepPeriod = 50;
const byte StepIncrement = 2;
bool pirState = LOW;
Servo myServo;
void setup() {
Serial.begin(115200);
pinMode(LEDPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(relayPin, OUTPUT);
pinMode(pirPin, INPUT);
}
void loop() {
servoCurrentMillis = millis();
servoSweep();
//alarm();
}
void alarm(){
pirState = digitalRead(pirPin);
if(pirState == HIGH){
digitalWrite(relayPin, HIGH);
alarmCurrentMillis = millis();
if(alarmCurrentMillis - alarmStartMillis > alarmDelay){
digitalWrite(LEDPin, alarmState);
if(alarmState == HIGH){
tone(buzzerPin, 300);
} else {
noTone(buzzerPin);
}
alarmState = !alarmState;
alarmStartMillis = alarmCurrentMillis;
}
} else {
digitalWrite(relayPin, LOW);
}
}
void servoSweep(){
static int pos = 0;
static int increment = StepIncrement;
if (servoCurrentMillis - servoStartMillis >= StepPeriod)
{
servoStartMillis = servoCurrentMillis;
pos += increment;
if (pos > 180)
{
pos = 180;
increment = -StepIncrement;
}
if (pos < 0)
{
pos = 0;
increment = StepIncrement;
}
myServo.write(pos);
}
}