Здравствуйте!
И так, делаю я мотоциклетную сигнализацию.
В основе лежит NodeMCU
И такие компоненты как: пара модульных реле, датчик наклона, и модуль с пультом на 4 кнопки и соотвественно 4 вывода(использоваться будет только 3).
В чем задача: Нажимаю на кнопку
A, ставится режим сигнализации, размыкается реле номер 1(цепь зажигания) и ведется наблюдение за датчиком наклона, при любом изменении на выводе начинает замыкаться и размыкаться с задержкой в 1 секунду в течении 20, реле номер 2(сигнал)
Нажимаю на кнопку
B, режим охраны отключается и замыкается реле номер 1
Нажимаю на кнопку
D, замыкается реле номер 2(подать сигнал удаленно, например из окна)
В чем проблема: не выходит сделать режим включенной охраны, а именно таймер, и в целом на датчик реакция не такая как хотелось бы
Делал через нейросетку, так как в коде не разбираюсь.
Если кто может помочь буду очень благодарен ибо сам мучаюсь с этим уже 4-й вечер
И так, делаю я мотоциклетную сигнализацию.
В основе лежит NodeMCU
И такие компоненты как: пара модульных реле, датчик наклона, и модуль с пультом на 4 кнопки и соотвественно 4 вывода(использоваться будет только 3).
В чем задача: Нажимаю на кнопку
A, ставится режим сигнализации, размыкается реле номер 1(цепь зажигания) и ведется наблюдение за датчиком наклона, при любом изменении на выводе начинает замыкаться и размыкаться с задержкой в 1 секунду в течении 20, реле номер 2(сигнал)
Нажимаю на кнопку
B, режим охраны отключается и замыкается реле номер 1
Нажимаю на кнопку
D, замыкается реле номер 2(подать сигнал удаленно, например из окна)
В чем проблема: не выходит сделать режим включенной охраны, а именно таймер, и в целом на датчик реакция не такая как хотелось бы
Делал через нейросетку, так как в коде не разбираюсь.
Если кто может помочь буду очень благодарен ибо сам мучаюсь с этим уже 4-й вечер
C++:
#include <Bounce2.h>
const int relay1Pin = D6;
const int relay2Pin = D7;
const int buttonAPin = D1;
const int buttonBPin = D2;
const int buttonDPin = D5;
const int tiltSensorPin = D3;
Bounce buttonA = Bounce();
Bounce buttonB = Bounce();
Bounce buttonD = Bounce();
Bounce tiltSensor = Bounce();
bool alarmArmed = false;
bool alarmTriggered = false;
bool buttonDPressed = false;
bool tiltSensorActive = false;
unsigned long tiltSensorChangeTime = 0;
unsigned long relay2LastChangeTime = 0;
bool relay2State = LOW;
void setup() {
pinMode(relay1Pin, OUTPUT);
pinMode(relay2Pin, OUTPUT);
pinMode(buttonAPin, INPUT_PULLUP);
pinMode(buttonBPin, INPUT_PULLUP);
pinMode(buttonDPin, INPUT_PULLUP);
pinMode(tiltSensorPin, INPUT_PULLUP);
buttonA.attach(buttonAPin);
buttonA.interval(5);
buttonB.attach(buttonBPin);
buttonB.interval(5);
buttonD.attach(buttonDPin);
buttonD.interval(5);
tiltSensor.attach(tiltSensorPin);
tiltSensor.interval(5);
digitalWrite(relay1Pin, HIGH); // Изначально цепь зажигания включена
digitalWrite(relay2Pin, LOW); // Изначально реле 2 выключено
}
void loop() {
buttonA.update();
buttonB.update();
buttonD.update();
tiltSensor.update();
if (buttonA.fell()) {
if (!alarmArmed) {
digitalWrite(relay1Pin, LOW); // Режим 1: включено реле 1
digitalWrite(relay2Pin, LOW); // Режим 1: выключено реле 2
alarmArmed = true;
alarmTriggered = false;
}
}
if (buttonB.fell()) {
if (alarmArmed) {
digitalWrite(relay1Pin, HIGH); // Режим 2: выключено реле 1
alarmArmed = false;
alarmTriggered = false;
digitalWrite(relay2Pin, LOW); // Режим 2: выключено реле 2
}
}
if (buttonD.fell()) {
buttonDPressed = true; // Режим 3: кнопка D нажата, замыкаем реле 2
digitalWrite(relay2Pin, HIGH);
}
if (buttonD.rose()) {
buttonDPressed = false; // Режим 3: кнопка D отпущена, размыкаем реле 2
digitalWrite(relay2Pin, LOW);
}
// Проверяем состояние датчика наклона
if (tiltSensor.fell() && alarmArmed) {
if (!tiltSensorActive) {
tiltSensorActive = true;
tiltSensorChangeTime = millis(); // Запоминаем время начала изменения наклона
}
}
if (tiltSensor.rose() && alarmArmed) {
if (tiltSensorActive) {
unsigned long currentTime = millis();
unsigned long elapsedTime = currentTime - tiltSensorChangeTime;
if (elapsedTime < 20000) { // Проверяем, прошло ли менее 20 секунд с начала изменения наклона
if (elapsedTime % 2000 < 1000) {
// Изменяем состояние реле 2 с задержкой в 1 секунду
if (currentTime - relay2LastChangeTime >= 1000) {
relay2State = !relay2State;
digitalWrite(relay2Pin, relay2State);
relay2LastChangeTime = currentTime;
}
}
} else {
tiltSensorActive = false; // Сбрасываем флаг активации датчика наклона
digitalWrite(relay2Pin, LOW); // Выключаем реле 2
}
}
}
}