Напишите ответ

Введите сообщение и нажмите Отправить
Параметры

Назад

Обзор темы (новое вверху)

unior
2020-09-16 14:56:45

Прошу прощения,после удаления строки
attachInterrupt(digitalPinToInterrupt(sensorPin), sensorInt, FALLING );
программа работала правильно,все дело было в датчике,который был накручен так,что выход датчика D0 горел постоянно,отсюда и постоянное срабатывание реле.Как только подрегулировал датчик,все заработало,как должно.

Большое СПАСИБО за помощь!
БЛАГОДАРСТВУЮ !!!

junipor
2020-09-16 13:43:45

Ну если вы действительно

unior пишет:

Сам пытаюсь учить С++,

то взяли бы умную книжку и прочитали что в предпоследней строчке перед Off() желательно добавить else

unior
2020-09-16 12:58:08

Загрузил скетч,срабатывает датчик,реле включается,пробуждается экран,реле выключается,потом включается и идет дозвон на смартфон.Затем цикл повторяется многократно без срабатывания датчика.Сбросил вызов, нет повторных вибраций у датчика,а реле все равно работает по циклу.Как заставить схему выполнять 1 цикл на 1 срабатывание датчика?

unior
2020-09-16 12:27:47

При проверке выдает ошибку:

                            sensor pin
exit status 1
'sensorInt' was not declared in this scope

     и выделяет розовым цветом строку:
  attachInterrupt(digitalPinToInterrupt(sensorPin), sensorInt, FALLING );

Удалил выделенную строку и компиляция завершена! Пробую загрузить и проверить работу сигнализации.

junipor
2020-09-16 12:23:56

Какую?

unior
2020-09-16 12:10:43

После изменений при проверке выдает ошибку:

#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();

}

junipor
2020-09-15 20:37:42

Если тупо в лоб и без кошерных 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();

}
unior
2020-09-15 15:17:31

Здравствуйте,люди!
Хочу поставить на входную дверь простейшую 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 сек для дозвона.Сам пытаюсь учить С++,но прогресс идет медленно,а рабочая сигнализация требуется как можно раньше.
Любители-ардуинщики или профессионалы,кто может,помогите,пожалуйста, с корректировкой программы!

Подвал раздела