Суть вопроса возможно ли реализовать такую задачу на ардуино:
Ардуино на нем блок двойного реле на конце моторчик который управляется +- 0.5 секунда импульс открытие .
Встроенный датчик положения двери при закрытие двери замок закрывается подается на мототорчик сигнал -+ 0.5 секунд и врубается сигнал .
Открытие с помощью программы через блютутз с возможностью ставить свой пароль код.
Если забыл код чтоб была возможность сбросить код путем какой нибудь фичи типа программы доступа администратора или кода администратора
https://create.arduino.cc/editor/denis0690/e947ab9c-a4e0-4161-b7b5-622cbcb567ff помогите исправить код
Требуется пароль. Разместите здесь свой код и чертеж схемы.
Requires password. Post your code and a drawing of your circuit here.
#include <WiFi.h>
#include <WebServer.h>
#include <DNSServer.h>
#include <SPIFFS.h>
const int IN_1 = 13; // L298N in1 motors Right GPIO 13 (D13)
const int IN_2 = 12; // L298N in2 motors Right GPIO 12 (D12)
const int ENDSTOP_PIN = 15; // Пин для концевого выключателя GPIO 15 (D15)
const char* ssid = "Denis123";
const char* password = "Denis12345"; // Ваш пароль Wi-Fi
String adminPassword;
const int unlockTime = 1000; // Время подачи тока на мотор для открытия замка (в миллисекундах)
const int lockTime = 1000; // Время подачи тока на мотор для закрытия замка (в миллисекундах)
const int endstopDelay = 3000; // Пауза после срабатывания концевого выключателя (в миллисекундах)
const int maxAttempts = 3; // Максимальное количество попыток ввода пароля
const int lockoutTime = 1000 * 60 * 30; // Время блокировки после превышения максимального количества попыток (в миллисекундах)
int attemptCount = 0; // Счетчик попыток ввода пароля
unsigned long lockoutStart = 0; // Время начала блокировки
bool doorLocked = false; // Переменная для отслеживания состояния замка двери
bool doorOpened = false; // Переменная для отслеживания состояния двери
const byte DNS_PORT = 53;
IPAddress apIP(192, 168, 1, 250);
DNSServer dnsServer;
WebServer server(80);
void setup() {
pinMode(IN_1, OUTPUT);
pinMode(IN_2, OUTPUT);
pinMode(ENDSTOP_PIN, INPUT_PULLUP);
Serial.begin(115200);
Serial.begin(115200);
Serial.println("Serial initialized");
if (!SPIFFS.begin(true)) {
Serial.println("Форматирование SPIFFS...");
SPIFFS.format();
if (!SPIFFS.begin(true)) {
Serial.println("Ошибка форматирования SPIFFS");
return;
}
Serial.println("SPIFFS успешно отформатирована");
}
File configFile = SPIFFS.open("/config.txt", "r");
if (!configFile) {
Serial.println("Не удалось открыть файл конфигурации для чтения");
} else {
Serial.println("Файл конфигурации успешно открыт");
String adminPasswordFromFile;
while (configFile.available()) {
adminPasswordFromFile += (char)configFile.read();
}
configFile.close();
adminPasswordFromFile.trim(); // Удаляем лишние пробелы
adminPassword = adminPasswordFromFile; // Присваиваем значение без пробелов
Serial.println("Пароль администратора, считанный из файла конфигурации: " + adminPassword);
}
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
WiFi.softAP(ssid, password, 1, 0);
IPAddress myIP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(myIP);
dnsServer.start(DNS_PORT, "*", apIP);
server.on("/", HTTP_handleRoot);
server.on("/unlock", HTTP_handlePassword);
server.on("/checkpassword", HTTP_handleCheckPassword);
server.on("/changepassword", HTTP_handleChangePassword);
server.onNotFound(HTTP_handleRoot);
server.begin();
}
void loop() {
dnsServer.processNextRequest();
server.handleClient();
String command = server.arg("State");
if (command == "doorunlock") {
if (!doorLocked) {
doorunlock();
}
}
if (digitalRead(ENDSTOP_PIN) == LOW && !doorLocked && doorOpened) {
delay(endstopDelay);
doorlock();
}
if (digitalRead(ENDSTOP_PIN) == HIGH) {
doorOpened = true;
} else {
doorOpened = false;
}
}
void doorunlock() {
digitalWrite(IN_1, HIGH);
delay(unlockTime);
digitalWrite(IN_1, LOW);
doorLocked = false;
}
void doorlock() {
digitalWrite(IN_2, HIGH);
delay(lockTime);
digitalWrite(IN_2, LOW);
doorLocked = true;
}
void HTTP_handleRoot() {
String page = "<!DOCTYPE html><html><head><meta charset='utf-8'><meta name='viewport' content='width=device-width, initial-scale=1.0'>";
page += "<style>body {background-color: black; color: white; font-family: Arial, sans-serif;}";
page += "button {font-size: 24px; border: none; border-radius: 5px;}";
page += "input[type='password'] {width: 80%; height: 50px; font-size: 20px; padding: 5px; margin-bottom: 10px;}";
page += "#unlockButton {width: 80%; height: 70px; font-size: 24px; background-color: #0055FF; color: white; transition: background-color 0.3s;}";
page += "#unlockButton:hover {background-color: #0088FF;}";
page += "#settingsButton {width: 80%; height: 70px; font-size: 18px; background-color: gray; color: white;}";
page += "#settingsButton:hover {background-color: darkgray;}";
page += "#changePasswordButton {width: 80%; height: 70px; font-size: 24px; background-color: red; color: white;}</style>";
page += "</head><body>";
page += "<h1>Введите пароль:</h1>";
page += "<input type='password' id='password'>";
page += "<button id='unlockButton' onclick=\"unlockDoor()\">Открыть</button>";
page += "<p id='status'></p>";
page += "<button id='settingsButton' onclick=\"toggleSettings()\">Настройки</button>";
page += "<div id='settings' style='display: none;'>";
page += "<h1>Сменить пароль:</h1>";
page += "<input type='password' id='oldPassword' placeholder='Старый пароль'>";
page += "<input type='password' id='newPassword' placeholder='Новый пароль'>";
page += "<input type='password' id='confirmPassword' placeholder='Подтвердите новый пароль'>";
page += "<button id='changePasswordButton' onclick=\"changePassword()\">Сменить пароль</button>";
page += "</div>";
page += "<script>";
page += "var passwordField = document.getElementById('password');";
page += "var statusField = document.getElementById('status');";
page += "var settingsDiv = document.getElementById('settings');";
page += "var oldPasswordField = document.getElementById('oldPassword');";
page += "var newPasswordField = document.getElementById('newPassword');";
page += "var confirmPasswordField = document.getElementById('confirmPassword');";
page += "function unlockDoor() { var password = passwordField.value; var xhr = new XMLHttpRequest(); xhr.open('GET', '/unlock?password=' + password, true); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { passwordField.value = ''; statusField.innerHTML = xhr.responseText; } }; xhr.send(); }";
page += "function toggleSettings() { if (settingsDiv.style.display === 'block') { settingsDiv.style.display = 'none'; } else { settingsDiv.style.display = 'block'; } }";
page += "function changePassword() { var oldPassword = oldPasswordField.value; var newPassword = newPasswordField.value; var confirmPassword = confirmPasswordField.value; if (newPassword == confirmPassword) { var xhr = new XMLHttpRequest(); xhr.open('GET', '/changepassword?oldpassword=' + oldPassword + '&newpassword=' + newPassword + '&confirmpassword=' + confirmPassword, true); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { statusField.innerHTML = xhr.responseText; } }; xhr.send(); } else { statusField.innerHTML = 'Пароли не совпадают'; } }";
page += "</script></body></html>";
server.send(200, "text/html", page);
}
void HTTP_handlePassword() {
if (attemptCount < maxAttempts && millis() - lockoutStart > lockoutTime) {
if (server.hasArg("password")) {
String enteredPassword = server.arg("password");
if (enteredPassword.equals(adminPassword)) {
doorunlock();
server.send(200, "text/plain", "Дверь разблокирована");
} else {
attemptCount++;
if (attemptCount >= maxAttempts) {
lockoutStart = millis();
}
server.send(200, "text/plain", "Неверный пароль");
}
} else {
server.send(200, "text/plain", "Пароль не предоставлен");
}
} else {
server.send(200, "text/plain", "Заблокировано");
}
}
void HTTP_handleCheckPassword() {
if (server.hasArg("password")) {
if (server.arg("password").equals(adminPassword)) {
server.send(200, "text/plain", "Пароль верный");
} else {
server.send(200, "text/plain", "Неверный пароль");
}
} else {
server.send(200, "text/plain", "Пароль не предоставлен");
}
}
void HTTP_handleChangePassword() {
if (server.hasArg("oldpassword") && server.hasArg("newpassword") && server.hasArg("confirmpassword")) {
String oldPassword = server.arg("oldpassword");
String newPassword = server.arg("newpassword");
String confirmPassword = server.arg("confirmpassword");
if (oldPassword.equals(adminPassword)) {
if (newPassword.equals(confirmPassword)) {
adminPassword = newPassword;
File newConfigFile = SPIFFS.open("/config.txt", "w");
if (!newConfigFile) {
Serial.println("Не удалось открыть файл конфигурации для записи");
return;
}
newConfigFile.println(adminPassword);
newConfigFile.close();
server.send(200, "text/plain", "Пароль изменен");
} else {
server.send(200, "text/plain", "Новые пароли не совпадают");
}
} else {
server.send(200, "text/plain", "Старый пароль неверный");
}
} else {
server.send(200, "text/plain", "Не все аргументы предоставлены");
}
}
Не работает открытие замка при вводе пароля
Это третья тема с той же темой, которую вы создали, проигнорировали и/или удалили.
This is the third topic with the same subject that you have created, ignored and/or deleted.
Какую доску вы используете? Покажите чертеж вашей схемы.
Which board are you using? Show a drawing of your circuit.
4 of 4 deleted. You misspelled your name.
Я реши лвсе вопросы с помощью Chat gpt спасибо
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.