Ви не увійшли.
Здравствуйте,люди!
Хочу поставить на входную дверь простейшую GSM сигнализацию на датчике вибрации SW-420 (на выходе D0 логический 0, если датчик сработал);Arduino UNO R3 (CH340);реле 4-х канальный модуль реле 5В 10А с опторазвязкой(активный уровень управляющего сигнала - низкий) и старого кнопочного телефона SAMSUNG GT 12021I.Подключил все компоненты,выход с реле подключил на горячую клавишу вызова моего смартфона.
После покупки и сборки всего необходимого мне помогли с программой,вот она:
#define sensorPin 2 // Вход с датчика
#define relePin 4 // Выход на реле
#define ledPin 13 // Выход светодиода
#define timerDelay 60000 // Время удержания реле в милисекундах
unsigned long sensorTimer;
void setup() {
digitalWrite(relePin,HIGH);
pinMode(relePin,OUTPUT);
pinMode(sensorPin,INPUT_PULLUP);
pinMode(ledPin,OUTPUT);
digitalWrite(ledPin,LOW);
attachInterrupt(digitalPinToInterrupt(sensorPin), sensorInt, FALLING );
sensorTimer=0;
}
void sensorInt(void){
sensorTimer=millis();
digitalWrite(relePin,LOW);
digitalWrite(ledPin,HIGH);
}
void loop() {
if(millis()>=sensorTimer+timerDelay && sensorTimer!=0) {
sensorTimer=0;
digitalWrite(relePin,HIGH);
digitalWrite(ledPin,LOW);
}
}
При вибрации входной двери,срабатывает реле и замыкает горячую клавишу кнопочного самсунга на 60 сек,совершая дозвон на мой смартфон.
Все работает,но вот беда - у этой модели телефона нельзя отключить переход экрана в спящий режим.Когда экран в спящем режиме - срабатывание реле и замыкание горячей клавиши приводит только к включению экрана.Получается,что в данном случае для нормальной работы сигнализации нужно включить реле на 2-3 сек для пробуждения экрана,выключить,а затем включить на 60 сек для дозвона.Сам пытаюсь учить С++,но прогресс идет медленно,а рабочая сигнализация требуется как можно раньше.
Любители-ардуинщики или профессионалы,кто может,помогите,пожалуйста, с корректировкой программы!
Неактивний
Если тупо в лоб и без кошерных millis и прерываний, то примерно так
void On(void){
digitalWrite(relePin,LOW);
digitalWrite(ledPin,HIGH);
}
void Off(void){
digitalWrite(relePin,HIGH);
digitalWrite(ledPin,LOW);
}
void loop() {
if(!digitalRead(sensorPin)) {
On();
delay(3000);
Off();
delay(1000);
On();
delay(60000);
Off();
}
Off();
}
После изменений при проверке выдает ошибку:
#define sensorPin 2 // Вход с датчика
#define relePin 4 // Выход на реле
#define ledPin 13 // Выход светодиода
#define timerDelay 60000 // Время удержания реле в милисекундах
unsigned long sensorTimer;
void setup() {
digitalWrite(relePin,HIGH);
pinMode(relePin,OUTPUT);
pinMode(sensorPin,INPUT_PULLUP);
pinMode(ledPin,OUTPUT);
digitalWrite(ledPin,LOW);
attachInterrupt(digitalPinToInterrupt(sensorPin), sensorInt, FALLING );
sensorTimer=0;
}
void On(void){
digitalWrite(relePin,LOW);
digitalWrite(ledPin,HIGH);
}
void Off(void){
digitalWrite(relePin,HIGH);
digitalWrite(ledPin,LOW);
}
void loop() {
if(!digitalRead(sensorPin)) {
On();
delay(3000);
Off();
delay(1000);
On();
delay(60000);
Off();
}
Off();
}
Неактивний
Какую?
При проверке выдает ошибку:
sensor pin
exit status 1
'sensorInt' was not declared in this scope
и выделяет розовым цветом строку:
attachInterrupt(digitalPinToInterrupt(sensorPin), sensorInt, FALLING );
Удалил выделенную строку и компиляция завершена! Пробую загрузить и проверить работу сигнализации.
Остання редакція unior (2020-09-16 15:31:02)
Неактивний
Загрузил скетч,срабатывает датчик,реле включается,пробуждается экран,реле выключается,потом включается и идет дозвон на смартфон.Затем цикл повторяется многократно без срабатывания датчика.Сбросил вызов, нет повторных вибраций у датчика,а реле все равно работает по циклу.Как заставить схему выполнять 1 цикл на 1 срабатывание датчика?
Неактивний
Ну если вы действительно
Сам пытаюсь учить С++,
то взяли бы умную книжку и прочитали что в предпоследней строчке перед Off() желательно добавить else
Прошу прощения,после удаления строки
attachInterrupt(digitalPinToInterrupt(sensorPin), sensorInt, FALLING );
программа работала правильно,все дело было в датчике,который был накручен так,что выход датчика D0 горел постоянно,отсюда и постоянное срабатывание реле.Как только подрегулировал датчик,все заработало,как должно.
Большое СПАСИБО за помощь!
БЛАГОДАРСТВУЮ !!!
Неактивний