#include <Keypad.h>
String password;
String passwordlog = "HTO!";
unsigned long passwordTimerStart = 0;
bool Serialpasswordflag = false;
bool passwordflagtrue = false;
bool passwordflagfalse = false;
bool timerActive = false;
float lux;
// Настройка клавиатуры
const byte ROWS = 4; // 4 строки
const byte COLS = 4; // 4 столбца
char keys[ROWS][COLS] = {
{'1','2','3','H'},
{'4','5','6','T'},
{'7','8','9','O'},
{'*','0','!','='}
};
#define SPEAKER_PIN 23
int distance;
#define ECHO_PIN 14
#define TRIG_PIN 12
byte rowPins[ROWS] = {19, 21, 17, 16};
byte colPins[COLS] = {15, 2, 0, 4};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
#define PIR 13
int val = 0;
bool flagPIR = false;
#define LDR_PIN 34
#define pinG 26
#define pinR 27
#define pinB 25
int analogValue;
void setup(){
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(PIR, INPUT);
pinMode(LDR_PIN, INPUT);
pinMode(pinR, OUTPUT);
pinMode(pinG, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(SPEAKER_PIN, OUTPUT);
}
int readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void loop(){
analogValue = analogRead(LDR_PIN);
if (analogValue >=2500){
digitalWrite(pinB, HIGH);
digitalWrite(pinG, HIGH);
digitalWrite(pinR, HIGH);
} else{
digitalWrite(pinB, LOW);
digitalWrite(pinG, LOW);
digitalWrite(pinR, LOW);
}
val = digitalRead(PIR);
if(val == 1 && flagPIR == false){
Serial.println("Кто-то рядом");
flagPIR = true;
}
if(val == 0 && flagPIR == true){
flagPIR = false;
}
char key = keypad.getKey();
distance = readDistanceCM();
if(distance <= 50 && passwordflagfalse == false && passwordflagtrue == false){
if(!Serialpasswordflag){
Serial.println();
Serial.print("Введите пароль: ");
Serialpasswordflag = true;
passwordTimerStart = millis();
timerActive = true;
password = "";
}
if(timerActive && (millis() - passwordTimerStart > 10000)) {
Serial.println();
Serial.println("Время вышло! Тревога!");
timerActive = false;
passwordflagfalse = true;
password = "";
tone(8, 262, 10000);
}
if (key != NO_KEY && String(key) != "*" && String(key) != "=") {
Serial.print(String(key));
password += String(key);
}
if(String(key) == "*"){
password = "";
Serial.println();
Serial.print("Введите пароль заново: ");
}
if(String(key) == "=") {
if(password == passwordlog) {
Serial.println();
Serial.println("Пароль верный! Сигнализация снята.");
password = "";
timerActive = false;
passwordflagtrue = true;
key = NO_KEY;
} else {
Serial.println();
Serial.println("Неверный пароль! Тревога!");
timerActive = false;
passwordflagfalse = true;
password = "";
tone(23, 262, 10000);
}
}
} else{
Serialpasswordflag = false;
}
if(String(key) == "=" && passwordflagtrue == true){
key = NO_KEY;
bool passwordesc = false;
Serial.println("Хотите включить систему сигнализации? Введите пароль для её отключения в будущеем: ");
passwordlog = "";
bool enteringNewPassword = true;
while(enteringNewPassword) {
char newKey = keypad.getKey();
if (newKey != NO_KEY && String(newKey) != "*" && String(newKey) != "=") {
Serial.print(String(newKey));
passwordlog += String(newKey);
}
if(String(newKey) == "*"){
passwordlog = "";
Serial.println();
Serial.print("Введите пароль заново: ");
}
if(String(newKey) == "=") {
enteringNewPassword = false;
passwordesc = true;
}
}
if(passwordesc) {
Serial.println();
Serial.println("Система будет запущена через 10 секунд: ");
passwordTimerStart = millis();
timerActive = true;
while(millis() - passwordTimerStart < 10000) {
delay(100);
}
Serial.println("Система сигнализации включена");
password = "";
passwordflagtrue = false;
passwordflagfalse = false;
timerActive = false;
}
}
}Датчик расстояния
Клавиатура
Датчик освещённости
Сервопривод
Датчик газа
Датчик движения
Буззер
Светодиод