Звонок модуля GSM SIM800C при срабатывании датчика
- Войдите на сайт для отправки комментариев
Чт, 07/03/2019 - 19:28
Приветствую. Нужна помощь в разделении операций входящих в void loop().
1. Опрос и реакция датчика (горит диод на ledPin нужное кол-во времени).
2. Звонок модулем GSM SIM800C на телефон, по реакции датчика (пока горит диод на ledPin).
Сейчас же диод загорается (идёт звонок) и не гаснет, пока датчик не выключить вручную. Надо разделить работу этих модулей. Сначала отрабатывает датчик и он имеет приоритет, а далее, по результату идёт звонок один раз, пока не наступят новые изменения в датчике (без вмешательства в операции написанные для датчика, потому что там всё ОК).
Ситуация такая.
Пока не уберете delay (тоесть не замените на millis()) программа правильно работать не будет!
Спасибо! Будем попробовать.
1. Для регистрации срабатывания датчика удара (серия очень коротких импульсов) настоятельно рекомендую использовать регистры аппаратных прерываний, и соответствующие пины, дабы это событие не пропустить.
http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/attachinterrupt#comment-437331
А Вы по факту один раз в секунду пытаетесь отловить импульс рандомной ничтожной длительности (зависит от резонансной частоты пьезоэлемента и силы оплеухи).
2. Строки с 56 по 61 будут долбить модем пока он.. не знаю что он в итоге сделает, но так не надо. Раз закинули ATD и отлавливайте ответ
в Вашем случае. Варианта ответа фактически четыре:
3. При первом входе в loop() у Вас датчик уже "сработал", count инициирован нулём при объявлении. Если честно вообще не очень понял что он "считает".
4. Как правильно Вам уже подсказали выкидывайте все delay'и из скетча, они здесь не нужны.
Датчик механический SW-420, проблема датчика в том что - в состоянии покоя на входе датчика уровень может быть любым (LOW или HIGH, как бог пошлёт). Для этого сделана проверка состояния, и из любого входного состояния при колебаниях, на выходе датчика появляется высокий уровень (LedPin =HIGH). Отдельно обработка датчика работает как надо, безукаризненно.
Чертовщина начинается когда я начинаю считывать ledPin для подачи звонка. Скетч обработки датчика сходит с ума, ledPin горит постоянно, звонки идут непрерывно, зацикливается насмерть. Delay() все убрал. Скетч уменьшен до минимума для выяснения проблемы. Звонок вынес из loop(), и ничего не изменилось.
Но я Вам скажу это не датчик удара а максимум датчик "тряски", и то фиксирует эту тряску только в одной оси. В спирали катается шарик и всего то.
Вообще по феншую желательно ещё ввести переменную для контроля состояния звонилки на основе ответов от неё, чтоб не давать повторный дозвон если он уже идёт.
Есть ещё гиро GY-521, решаем проблемы по порядку.
Ваш пример скетча ещё оптимальнее, но тоже не работает. LedPin работает, звонок не проходит. Хотя в мониторе порта проходит!
Нужно симку вставить в любой телефон и добавить в записную книжку сим-карты запись с соответствующим именем и нужным номером, в моём примере это "admin"
Или с терминала
Ну и в setup между 10 и 11 строками конечно же добавьте открытие порта, забыл
Открытие порта прописано, номер телефона в sim нужен в случае управления с этого номера. Это управление телефонной книгой SIM, исходящий звонок должен быть на любой номер, если не определён номер для звонка в скетче. Я не прав?
vlad072 ваш скетч работает, виноват я. Плата GSM запитана +5v от dc-dc преобразователя на 3А, но на модуль GSM подаётся 3,8v через линейный стабилизатор платы. На пиках потребления была просадка до 3,5v, что вызывало нестабильную работу GSM. Я знал про проблему с питанием GSM, но чужие грабли не бьют.
Приветствую!
Подскажите, почему принимает ВСЕ входящие вызовы?
Посмотри этот код, все работает, отзванивается, но управление в коде кривое
Этоп код, с дозвоном с номера SIM карты, полностью рабочий, доработанный. Описание http://arduino.ru/forum/proekty/arduino-pro-minisim800-dopolnenie-k-avto-signalizatsii-s-avtozapuskom
Ответить что не так в вашем коде сложно, потому что не понятно что там "так". Вот в общих чертах как это реализовано у меня:
... как это реализовано у меня:
Какой у вас модуль GSM?
У меня SIM800C.
После месяца мытарств, этот скетч работает, но только с монитором порта!
Пробовал пример из https://codius.ru/articles/GSM_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C_SIM800L_%D1%87%D0%B0%D1%81%D1%82%D1%8C_2
Идут звонки пока не включу монитор порта, "поднимает трубку" на свой и сбрасывает чужой.
У меня тоже sim800c. Зачем 7 строка? Номер абонента передаётся в уведомлении "+CLIP:" а не "RING" (12 строка). У вас вообще АОН включен? Выше рабочий пример, не городитевы огород со String, зачем? Если будете в дальнейшем работать с пакетными данными, получите нерабочий код, поскольку там львиная доля байтов сообщения - нули, и постоянную неопределённость с памятью в придачу.
Приветствую вас vlad072. АОН включен в setup.
Я пробовал ваш пример, изменив пины и скорость порта и закоментил строки относящиеся к DTFM (я использую аппаратный dtfm).
Не хочет у меня работать, может вы пропустили что-то важное.
Пример притянут из довольно объёмного проекта, поэтому немного неотёсаный. Если не используете адресную книгу симки и тоновый набор, вот, упростил для пробы.
Соответственно ставите свою скорость, пины rx/tx и номер телефона.
Да, и старайтесь в сетапе оставлять настройки только по крайней необходимости,, остальные настройки делайте "по месту", т.е. например АОН включайте каждый раз непосредственно при входящем звонке, усиление микрофона перезаливайте при каждом ответе и т.п. Эти модемы очень непредсказуемо себя иногда ведут, и то что вы когда то там ранее настроили при включении не факт что осталось в прежнем виде. Я в своё время об это много копий сломал.
Наверное не по феншую сижу - не работает! Идут вызовы и никакой реакции на данные передаваемые gsm в порт, а может их там и вовсе нет. Как проверить, только монитором?
С монитором порта искажается работа, как у меня с предыдущим скетчем.
Хватит уже людей вводить в заблуждение, если у вас модемы ведут себя непредсказуемо, это не значит что у остальных тоже должны быть проблемы.
Руки выпрямите и будет все хорошо.
Не все же гениальные как вы. Беспроблемный вы наш.
Тыкать носом в каки не велика помощь.
Я и не утверждаю что они обязательно У ВСЕХ будут. На моих двух они есть, заказаны в разное время у разных продавцов. Для тех у кого плохая память, повторю: аналогичные проблемы не только у меня. И никого я не пугаю, а советую как уйти от возможных проблем в перспективе.
Опять мои руки виноваты в том что в модемах рандомо слетают профили, они виснут и ребутятся? Мои руки к прошивкам модемов никогда не прикасались, хорош умничать. Повторюсь в который раз: нет что сказать по делу - проходим мимо, не знаем о чём говорим, не сталкивались - проходим мимо. Если интересно, могу привести пример, как завесить модем sim800c парой безобидных АТ - команд из офф. мануала.
Добрый день!
vlad072 вы используете команду AT+IFC=1,1 (контроль пнредачи данных)?
У меня похоже тишина в softSerial, если я провоцирую появление каких то данных, скетч начинает работать (ваш пример сбрасывает все входящие).
вы используете команду AT+IFC=1,1 (контроль пнредачи данных)?
У меня похоже тишина в softSerial, если я провоцирую появление каких то данных, скетч начинает работать (ваш пример сбрасывает все входящие).
Нет
У меня похоже тишина в softSerial, если я провоцирую появление каких то данных, скетч начинает работать (ваш пример сбрасывает все входящие).
Так для начала посмотрите что у вас вообще творится в сериале
Попробуйте вручную ответить, отбиться, посмотрите что приходит во время входящего дозвона, симмитируйте различные сценарии и из этого исходите. Вобщем любой обмен надо сначала отработать руками, а потом уже прикручивать скетч. Вы бродите в трёх соснах ))
Спасибо!
Попробую. Давно брожу, уже дорогу протоптал.
Приветствую!
Приехал новый модуль, всё работает.
Большое спасибо vlad072, за участие и помощь. Дай бог тебе здоровья!
Тему можно закрыть.
Да уж, судя по всему косоглазые эти модемы на помойке паяют с помошью гвоздя и и зажигалки. Уже третий sim800c пришёл в некондиционном сосянии. Специально заказываю у разных торговцев в нидежде что придёт нормальный. Первый безвременно покончил в себя, начал греться и не отвечал на АТ, у второго тотально холодная пайка, пришлось пропаивать чип трансивера, третий вот:Даже включать не стал, сфотал, открыл спор и кинул в мусор.
Ответить что не так в вашем коде сложно, потому что не понятно что там "так". Вот в общих чертах как это реализовано у меня:
Поясните пожалуйста смысл 15-й и 20-й строки. Зачем нужно true в этих find?
А так спасибо за код. С этим алгоритмом лучше работает скетч.
P.S. Понял, это подтверждение предыдущих DDET.
А как Вы себе представляете проверку, что ответил модем?
Жаль тема заглохла, а косяк был всего то в очень маленьком времени остановки!!!. строка 52, остановка на 1 мили секунду!!! Я поменял на 10 и работает исправно. Спасибо автору!!
У меня работает, видео выложу на свои соцсети.