#define pinLum 25 // порт подключения аналогового выхода датчика света (фоторезистор)
#define pinPIR 19 // порт подключения датчика движения
#define pinLED 15 // порт подключения светодиода
#define pinSiren 18 //порт подключения генератора звука
#define servoPin 2 // порт подключения сервопривода
#include <Wire.h>
#include <ESP32Servo.h>
Servo servDoor;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
servDoor.attach(servoPin);
Serial.println("Welcom ROBBANK");
Serial.println("Calibrate System");
delay(1000);
pinMode(pinLum, INPUT);
pinMode(pinPIR, INPUT);
pinMode(pinLED, OUTPUT);
pinMode(pinSiren, OUTPUT);
static uint32_t durationCalibrate=millis();
int Lum=0;
Serial.println("Calibrate light");
while((Lum < 32 || Lum > 4063) || Lum != 1001){
Lum = analogRead(pinLum);
if(millis()-durationCalibrate>=5000){
for(;;){
Serial.print("FATAL ERROR ");
Serial.print("Fail calibrate");
delay(10000);
}
}
}
Serial.println("Turn PIR sensor");
while(!digitalRead(pinPIR)){
if(millis()-durationCalibrate>=5000){
for(;;){
Serial.print("FATAL ERROR ");
Serial.println("Fail calibrate");
delay(10000);
}
}
}
while(digitalRead(pinPIR)){
Serial.println("Clbrate complited!");
delay(2000);
}
}
void loop() {
int Lum = analogRead(pinLum);
bool Move = digitalRead(pinPIR);
static bool flagLed;
static bool flagDisp;
static bool flagSiren;
if(Lum >= 2000){
if(flagDisp==false){
Serial.println("Enable security");
flagDisp=true;
servDoor.write(180);
}
static uint32_t durationLED;
if(millis()-durationLED >= 1000){
flagLed=!flagLed;
durationLED=millis();
}
if(Move == true && flagSiren == false){
flagSiren = true;
Serial.println("Motion detected!");
Serial.println("Calling robot");
delay(1000);
Serial.print("Request robot: ");
Serial.println("");
Serial.write(67);
Serial.write(79);
Serial.write(68);
Serial.write(69);
Serial.write(58);
Serial.write(32);
Serial.write(82);
Serial.write(79);
Serial.write(66);
Serial.write(79);
Serial.write(84);
Serial.write(71);
Serial.write(79);
Serial.write(84);
Serial.write(79);
Serial.write(10);
delay(3000);
digitalWrite(pinSiren, HIGH);
flagLed = true;
}else if(Move == false && flagSiren==true){
flagSiren =false;
digitalWrite(pinSiren, LOW);
flagDisp=false;
}
}else{
if(flagDisp=true){
flagLed=false;
Serial.println("Disable security");
servDoor.write(0);
flagDisp=false;
}
}
digitalWrite(pinLED, flagLed);
delay(100);
}